代码之家  ›  专栏  ›  技术社区  ›  keparo

Git:如何分析具有多文件历史的代码?

  •  7
  • keparo  · 技术社区  · 16 年前

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

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

    我知道Git没有明确地跟踪Renames(出于合理的原因),所以我似乎可以问这个问题,我只是不知道怎么做。如果有方法来形象化这一点,那也很好知道。

    2 回复  |  直到 16 年前
        1
  •  5
  •   CB Bailey    16 年前

    我建议查看Git工具箱中的三个工具。第一个是责备,这与简历中的情况非常相似。它显示哪个提交最后接触到了文件中的每一行。如果您想查看以前有什么,可以获取接触到该行的提交,并查看以前的提交。

    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"
    

    如果使用补丁或stat选项(例如 -p --stat )除非同时使用 --pickaxe-all 显示整个更改的位置。

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

        2
  •  0
  •   Nicolás    16 年前

    git blame 你会问“这行代码是从哪里来的?”我不知道它是否能处理重命名。可能是这样。