如何在git架构上寻找指定文件的最新更改

时间:2012-01-04 02:56:33

标签: git libgit2

我想知道一种在我学习git核心架构时检测指定文件中最近更改的算法。

您知道git log -n1 -- <file>显示指定文件中最近更改的提交。了解最新的变化非常简单。我随便想自己实现它。

我使用libgit2来处理每个提交。我花了几天但我无法理解。 使用DAG结构的git commit模型很难为我寻找。

[for example]
o---o---o---o---o---M--[HEAD]
     `-o------M-o-o'
        `-C-o-'

o means: a commit
M means: merge commit
C means: rechange change in the specified file

了解检测指定文件中最近更改的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您需要遍历父提交。合并提交有2个或更多父母。最终你最终会进入一个共同的提交,即分支。因此,如果您的函数以递归方式遍历每个父级,则需要将已检查的提交作为返回值传回,这样您就不会再次遍历相同的提交。或者,如果找到更改,则可以返回包含更改和短路的提交。