2012-01-04 11 views
1

gitコアアーキテクチャを学んでいるときに、指定されたファイルの最近の変更を検出するアルゴリズムを知りたいと思います。gitアーキテクチャで指定されたファイルの最近の変更を探す方法

あなたが知っているgit log -n1 -- <file>は、指定されたファイルの最近の変更を持つコミットを表示します。最新の変更を知ることは非常に簡単です。私は自発的にそれを実装したいと思います。

私はlibgit2を使ってそれぞれのコミットを歩き回ります。私は数日を取ったが、私はそれを理解することはできません。 gitコミットモデルはDAGのような構造を採用しているので、それは私にはほとんど求められません。

[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

この** [質問](http://stackoverflow.com/questions/8481914/git-log-1-fullpath-myfile-with-libgit2/8484744#8484744)**は同じ件名を扱っています。 – nulltoken

+0

通知をいただきありがとうございます、私はそこに移動します。この問題は単純に見えますが、マージコミットが現れたときは少し難解です。 – chobie

答えて

0

親がコミットする必要があります。マージコミットには、2つ以上の親があります。最終的に、ブランチである共通のコミットになります。したがって、関数が各親を再帰的に処理する場合は、すでにコミットされたコミットを戻り値として渡して、同じコミットを再びトラバースしないようにする必要があります。あるいは、変更が見つかった場合は、変更を収容しているショートカットを返すことができます。

+0

ご紹介いただきありがとうございます。私は、指定されたファイルに変更が見つかったときに、それぞれのコミットを歩くのをやめました。さて、私は共通のコミットを求め、それぞれのコミットがコミットされたことを確認します。 – chobie

関連する問題