29

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

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

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

有没有什么方法可以提交这个不会将我标记为更改行的作者但保留原作者的巨大更改?这是我们不想在我们的项目中失去的很多历史。

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

4

2 回答 2

39

决定如何处理空格不是commit命令的责任,而是blame命令的责任,因为它是blame分析版本之间的差异以获取每一行的作者。所以寻找一个选项来忽略blame中的空格:

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

于 2010-10-15T19:37:01.257 回答
20

感谢git 上的 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

于 2010-11-09T04:45:12.957 回答