7

我即将在现有项目中移动大量文件。在我这样做之前,我想牢牢掌握一些用于分析具有多文件历史的代码的技术。

怎么用git问:“这行代码是哪来的?” 当内容在其生命周期中通过多个文件移动时?

我知道 git 没有明确地跟踪重命名(有充分的理由),所以看起来我应该能够问这个,我只是不确定如何。如果有方法可以将其可视化,那也很高兴。

4

2 回答 2

5

我建议查看 git 工具箱中的三个工具。第一个是责备,和 cvs 中的非常相似。它向您显示最后一次提交文件中的每一行。如果您想查看之前的内容,您可以获取触及该行的提交并查看之前的提交。

git show <sha1_of_interesting_commit>^ -- file/path

你可以重复指责,看看之前发生了什么。

git blame <sha1_of_interesting_commit>^ -- file/path

第二个工具--follow用于跟踪过去重命名的文件。

git log --follow -- file/path

第三个 - 可能是最有用的工具 - 是用于记录的镐选项。这将搜索历史记录以查找包含给定文本位的已删除、引入或更改的行。这对于跟踪函数名称等内容特别有用。它可能在特定提交的文件中是新的,但它是否来自不同的源文件?对它的调用是同时添加的,还是在它移动之前添加的?

git log -S"Interesting_Function"

如果您使用的是补丁或统计选项(例如-p--stat),则输出将仅限于其更改实际上涉及搜索字符串的那些文件,除非您还使用--pickaxe-all显示整个更改的位置。

结合git grep显示所有当前字符串的出现位置,镐是一个非常有用的历史挖掘工具。

于 2010-01-19T20:15:29.020 回答
0

git blame你会用什么来问“这行代码是从哪里来的?”。我不知道它是否处理重命名。大概是吧。

于 2010-01-19T19:45:58.887 回答