【发布时间】:2019-04-29 08:52:23
【问题描述】:
我正在尝试使用代码格式化工具格式化整个 repo。在这样做时,我想保留有关谁提交了哪一行的信息,以便像 git blame 这样的命令仍然显示正确的信息。我的意思是它应该显示之前编辑过每一行的作者(在格式化之前)。
有一个 git filter-branch 命令,它允许您从一开始就针对 repo 的每个修订版运行一个命令。
git filter-branch --tree-filter '\
npx prettier --write "src/main/web/app/**/**.{js, jsx}" || \
echo "Error: no JS files found or invalid syntax"' \
-- --all
运行它需要很长时间,而且我真的不在乎过去。我只想在不更改每一行的所有权的情况下格式化主分支。我怎样才能做到这一点?我尝试在末尾使用rev-list 和其他过滤器类型,但它仍然不起作用。必须有一种方法来格式化代码库,同时保留每一行的作者信息。
【问题讨论】:
-
所以问题是“如何在不修改 git 历史的情况下编辑 git 历史?”,对吧?
-
不,你误会了。 git filter-branch 命令允许我在不更改修订作者的情况下编辑行,因此
git blame仍然有效。我只是想为 HEAD 而不是过去的修订版这样做。 -
那么不要使用
git filter-branch——只需运行格式化程序,添加并提交即可。或者,如果您想修改分支中的最后一次提交 —git add和git commit --amend。 -
问题是这会改变每一行的作者都是我。当我说我希望 git blame 仍然有效时,我的意思是它应该列出该行先前修订的作者。
-
@aherriot - 您将
filter-branch的行为描述为“在不更改作者的情况下编辑行”;这在概念上是不正确的。 “行”没有作者。提交有作者,git blame找出最近更改每一行的提交并报告有关该提交的信息(包括作者)。
标签: git formatting git-filter-branch prettier