6

我在 Eclipse 中执行了几次重构,将大量文件移动到另一个 java 包中。这些通常会导致很多文件被自动更新以解析引用。因此,这些情况下的提交往往非常大。

我假设 git 跟踪了重命名,我可以git log --follow通过重命名来跟踪历史,但是 git 没有跟踪重命名。

我在 Eclipse 中执行了较小的重构操作,在提交时检测到重命名。唯一的区别似乎是提交的大小。

有任何想法吗?

4

1 回答 1

7

Git 根本不跟踪历史中的重命名,但git log可以根据提交内容启发式地检测重命名。

  • 您可能需要指定较低的-M百分比才能git log检测到重命名。如果超过一定百分比的文件已更改,git log(and git diff) 将不会将添加/删除对视为重命名。如果移动的文件非常小并且需要更改内容(例如包名称),那么它们可能会超过此阈值。
  • 您可能还需要指定一个值-l,它指定要评估的潜在重命名的最大数量。在大型提交中,您很可能会超出此范围,因此 Git 不会评估重命名以防止日志操作花费太长时间。(检测重命名是一个 O(n^2) 操作,其中 n 是需要考虑的添加/删除对的数量,因此在日志操作中处理每个提交以寻找重命名所花费的时间随着添加/删除排列。)

有关这些选项的更详细说明,请参阅 git-log 手册页。

于 2012-10-04T20:20:29.347 回答