1

jGit を使用して、リポジトリ内のすべてのコミットを取得しようとしています。ヘッドまたはタグを介して到達できるものだけでなく、まだガベージ コレクションされていないすべてのものも取得します。jGitでこれを効率的に行う方法はありますか?

実際のユースケースをより適切に説明するための更新

私は、Git 履歴のファイル システム ビューを提供する FUSE ベースのファイル システムに取り組んでいます。最初のバージョンについては、 https://github.com/centic9/JGitFS/を参照してください(Linux/Mac のみ)。

これにより、コミット用の「仮想」サブディレクトリを提供しています。つまり、次のようなディレクトリ構造を作成しています。

/commit
   00
     abcd..
     bcde..
   ae
     bdas..

そして、コミット ID の下で、仮想ファイルシステムはそのコミットの「現在」のソース ファイルを提供します。

参照/タグは、その参照/タグの HEAD を実際にコミットするためのシンボリック リンクとして提供されます。

/branch
   master -> ../commit/00/abcd...
   bugfix -> ../commit/ae/bdas...
/tag
   version_1 -> ../commit/00/bcde...

このファイルシステムを高速化するには、リポジトリ内のすべてのコミットを非常に高速に繰り返す方法が必要です。私が今行っているように、各タグと参照を別々に見ることは、最適とは言えません。なぜなら、このようにして、参照が共通の履歴を共有している場合、同じコミットを何度も見るからです (ほとんどの場合そうです!)。

できれば、ブランチの一部であるだけでなく、まだ利用可能なすべてのコミットの簡単なリストを取得したいと思います。これにより、参照/タグで到達できなくなったバージョンを確認することもできます。

4

1 に答える 1