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

noo*_*kni 24 git git-commit git-blame

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

$ find -iname \*.php -exec perl -pi -e "s/\t/    /g" {} \
Run Code Online (Sandbox Code Playgroud)

我可以提交这个更改git commit,但它会在我提交之后将我标记为内部所有更改行的作者git blame.

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

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

Cod*_*aos 38

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

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

  • 我想你误解了我的答案.我说你应该责备忽略空白的变化(因此间接地提交),而不是试图明确标记提交,因此它不会出现在*blame*中. (9认同)
  • 是的,遗憾的是你的答案仅适用于实际使用`-w`标志的地方.在IDE和基于Web的工具(Github等)中,它不是. (4认同)

Jay*_*ine 19

感谢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

  • 美丽的git filter-branch --tree-filter'git diff-tree --name-only --diff-filter = AM -r --no-commit-id $ GIT_COMMIT | find -iname\*.php -exec perl -pi -e"s /\t// g"{} \;' 头 (2认同)
  • git commit中没有办法指定“对于差异中的每一行,保留先前的作者”吗?例如,修复来自样式linter的所有建议,然后提交清理文件? (2认同)