Git重命名匹配可以忽略空格更改吗?

时间:2018-10-10 20:14:55

标签: git

当我重命名文件并进行空格更改(例如更改缩进)时,Git无法识别重命名。而且我找不到git diff标志的任何组合,以使其在查找重命名时忽略空白。这使得很难检查原本简单的重构。

例如...

$ git init
$ ruby -e '100.times { puts "Basset hounds got long ears" }' > file
$ git add file
$ git commit -m 'first commit'
$ git mv file file2

现在一切都很好。

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    renamed:    file -> file2

现在,如果我缩进文件中的行,那么Git将不再识别重命名。

$ ruby -i -pe 'gsub(/^/, "  ")' file2
$ git add .
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    file
    new file:   file2

我提交git diff -w HEAD^后,仍然显示一个删除和一个新文件。我找不到任何可以识别重命名的git diff选项。

是否有一组选项允许Git在检测副本和重命名时忽略空格?

1 个答案:

答案 0 :(得分:0)

Git默认情况下无法执行此操作。

但是,如果您有专门知识,则可以通过更改相似性索引计算来实现。相关代码可以在diffcore-delta.c(已充分记录)中的herediffcore-rename.c中的here中找到。

请注意,在Git甚至检查文件是否可以被视为重命名之前(内部),需要进行一些初始检查和权衡。此检查将通过对以下问题的“是”答案:

  

是否是文件大小没有明显变化的常规非零大小文件?

因此,一种方法是在该点之前添加条件检查,这样,如果空白之间仅存在差异,则相似性索引的计算结果为100%,否则Git应该执行其通常的工作。

也就是说,您所经历的就是为什么它通常建议您在更改文件内容之前先重命名文件,但是第一次就很难获得正确的名称。