为什么在eclipse中执行移动重构后我的git文件历史记录丢失了?

时间:2012-10-04 20:11:25

标签: eclipse git egit

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

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

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

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

有关这些选项的更多详细说明,请参阅git-log联机帮助页。