2012-01-04 43 views
1

我想知道一個算法,檢測指定的文件中的最近更改,因爲我正在學習git核心體系結構。如何尋求在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 

什麼是檢測指定文件中最近更改的最佳方法?

+0

This ** [question](http://stackoverflow.com/questions/8481914/git-log-1-fullpath-myfile-with-libgit2/8484744#8484744)**處理相同的主題。 – nulltoken 2012-01-04 07:03:51

+0

感謝您通知我,我會搬到那裏。這個問題看起來很簡單,但在合併提交出現時有點困難。 – chobie 2012-01-05 03:11:21

回答

0

您將需要步行父提交。合併提交有2個或更多的父母。最終你最終會得到一個共同的承諾,那就是分支。因此,如果函數遞歸地遍歷每個父元素,則需要將已檢查的提交作爲返回值傳回,因此不會再次遍歷相同的提交。或者,如果發現更改,則可以返回包含更改和短路的提交。

+0

謝謝你簡單介紹一下。當我在指定的文件中發現更改時,我已經停下來走每次提交。好吧,我會尋求共同的提交和檢查提交時間每個發現提交。 – chobie 2012-01-05 03:27:22

相關問題