Git提交不会覆盖git blame中的原始作者

时间:2010-10-15 19:20:31

标签: git git-commit git-blame

我使用perl脚本修改php git存储库中的所有制表符并将它们全部更改为4个空格。

$ find -iname \*.php -exec perl -pi -e "s/\t/    /g" {} \

我可以使用git commit提交此更改,但在此提交完成后,它会将我标记为git blame内所有更改行的作者。

有没有办法实现这个大规模的改变,不会让我成为改变行的作者,但保留原作者?这是我们在项目中不想丢失的很多历史。

我们用4个空格替换制表符的目的不是让git责备中的东西看起来不同,而是遵循正确的PEAR编码标准。例如。没有标签,使用4个空格进行缩进。

2 个答案:

答案 0 :(得分:38)

commit 命令不负责决定如何处理空格,而是负责 blame 命令,因为它是 blame 分析版本之间的差异以获得每一行的作者。因此,在 blame 中搜索忽略空格的选项:

选项-w定义为: “在比较父版本和孩子的版本时忽略空格,以找到线条的来源。” http://kernel.org/pub/software/scm/git/docs/git-blame.html

答案 1 :(得分:19)

感谢git: change styling (whitespace) without changing ownership/blame?上的wnoise,我想出了这个在git历史记录上运行任意过滤器,所以使用它可以重写历史记录,使其看起来像是冒犯空白或其他问题从未提交过,留下原创作者,但你的代码已经清理完毕:git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | php cleanup.php' HEAD