1

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

git log -n1 -- <file>指定されたファイルに最近変更があったコミットを表示します。最新の変更を知るのは非常に簡単です。さりげなく自分で実装したいです。

libgit2を使用して各コミットをウォークします。何日かかかりましたが理解できません。構造のようなDAGを使用するgitcommitモデルは、私にとってそれを探すことはほとんどありません。

[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

指定されたファイルの最近の変更を検出するための最良の方法は何ですか?

4

1 に答える 1

0

親のコミットをウォークする必要があります。マージコミットには2つ以上の親があります。最終的には、ブランチである共通のコミットに行き着きます。したがって、関数が各親を再帰的にウォークする場合は、同じコミットを再度トラバースしないように、すでに検査されたコミットを戻り値として返す必要があります。または、変更が見つかった場合は、変更を格納するコミットを返し、短絡することができます。

于 2012-01-04T06:34:03.087 に答える