0

git ですべてのコミット (または単一のブランチからのすべて) のリストを調べる方法を知りたがっていました。これはどのようにgit log行うのですか (コードの一部へのポインターもクールですが、どこから始めればよいかわかりません)。どういうわけか生のファイルシステムでそれを行うことはできますか?

理由は次のとおりです。システム コマンドを呼び出す必要のない他の言語でツールを作成する必要があります。

更新: Git internals: Git objects (および次の章) を読みましたが、packfiles もあることを理解しています。私が抱えている主な問題は、実行時に何が起こっているのかを理解することです: git rev-list --all。または - 単一ブランチの場合 ---allフラグなしの同じコマンド。git は頭を見つけ出し、そのオブジェクト ストアから取り出し、親の SHA をチェックし、それらをオブジェクト ストアから取り出しますか? または、他のより高速な方法はありますか?

4

2 に答える 2

2

すでにこれに出くわしたかどうかはわかりません: LibGit2 : https://github.com/libgit2/libgit2

libgit2 は、堅牢な API を備えた再入可能でリンク可能なライブラリとして提供される Git コア メソッドの移植可能な純粋な C 実装であり、バインドを使用して任意の言語でネイティブ スピードのカスタム Git アプリケーションを作成できます。

オープン ソースであり、コードを参照すると、貴重な情報が得られるはずです。例: Commit.c

于 2013-05-02T16:15:21.953 に答える
0

ブランチはフォルダー内の単なるファイルであり.git/refs、各ファイルには現在のブランチ ヒントの sha1 が含まれています。また、git gcすべての参照がファイルに収集される可能性があり.git/packed-refsます。

于 2013-05-02T17:59:48.857 に答える