37

所以我有一个文件叫one.txt我多年来一直在 master 分支上修改。 gitk one.txt将显示该特定文件的整个历史记录。但是,在我更改one.txt=>之后two.txtgitk two.txt在重命名之前没有显示任何更改。

我试过gitk --follow two.txt了,但只给出了每次提交的评论,而不是实际的文件更改信息。

我知道我可以做到git log --follow two.txt,但是您必须将gitk每个 SHA1 值与每个正在更改的内容对应起来。

那么有什么窍门吗?

4

1 回答 1

30

根据 Linux Torvalds 的说法,考虑到gitk --follow现在git log --follow的问题--follow主要是 hack:

我很确定我在发布原始后续补丁时提到了这个确切的问题,它基本上归结为:“ --follow”是一个完全的黑客,使用常规的提交过滤功能,因此,花哨的东西像 " --parent" 不太好用。

IOW,我完全不确定它是否可以修复。"--follow是一个非常基本的非 gitty 事情,实际上是一个完整的 hack。这是一个相当的hack - 如果您不了解更多并查看源代码,您可能会认为它非常自然地适合 git。但不是。

现在,我们也有可能--parent一起合作--follow,但坦率地说,我不知道怎么做。因为--follow黑客实际上基本上可以归结为:

  • 根本修剪提交(这通常会简化父母身份并删除无趣的提交)
    • 对于“”中的整个正常提交列表,git log使用寻找重命名的神奇特殊技巧来生成补丁。
  • 如果是重命名,请更改我们神奇地跟踪的路径,以便我们查看下一次提交时,我们将遵循新(旧)路径。
  • 如果补丁是空的,我们强制隐藏提交(在内部,这是“ rev->always_show_header = 0;”的东西)

这里的关键是我们在队列的末尾做了所有的魔法,在我们完成了通常进行父身份重命名的提交的修剪很久之后。

对不起。我--follow偶尔使用过,但看到“好的,它被重命名了”是一个黑客行为。如果 " gitk --follow <pathname>" 能正常工作就好了,但这并不是我非常关心的事情。

于 2011-07-22T23:18:56.677 回答