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

我以为git跟踪了重命名,并且我可以使用git log --follow跟踪重命名的历史记录,但是git没有跟踪重命名。

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

有任何想法吗?

最佳答案

Git根本不跟踪历史中的重命名,但是git log可以根据提交内容试探性地检测到重命名。

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

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

    10-04 14:52