4

ショートストーリー:

タイトルが示すように、JGit を使用してチェックアウトされたファイルのインデックスから SHA1 またはハッシュを取得する方法は?

長い話:

私は GUI アプリケーションを作成しており、JGit を使用して 1 つのファイルのみを改訂しています。したがって、ユーザーは、このファイルのすべてのリビジョンをナイス テーブルに含むウィンドウを開くことができます。

ユーザーは変更を加えてコミットできます。また、ユーザーは時間をさかのぼってテーブルから古いリビジョンを選択して作業することもできます。

このワークフローは非常に単純です。私が JGit で内部的に行っていることは、1 つのブランチ (マスター ブランチ) のみを使用することです。HEAD は常にこのブランチを指しており、このブランチの先端は常に最新のコミットです。ユーザーが古いリビジョンを選択すると、CheckoutCommandクラスをインスタンス化し、パスをファイルに設定しaddPath()、ブランチマスターを使用しsetName()ます。

上記の結果、HEAD は master ブランチを指し、これは最新のリビジョン (ユーザーが選択したリビジョンではない) を指します。ただし、インデックスと作業ディレクトリ自体は、ユーザーが選択したリビジョンになりました。

最後に、テーブル内のどのリビジョンが現在チェックアウトまたはアクティブ化されているか、またはこれを何と呼びたいかをユーザーに提示できるようにしたいと考えています。このリビジョンは、以下のスクリーンショットのように強調表示されます。しかし、この目的で master ブランチの先端を使用することはできません。どうにかしてインデックスから SHA1 を取得する必要があります。

まさに私が欲しいものですが、JGitのコンテキストで投稿された質問があります(質問の作成者はgitを使用しています)。

バージョンを表す表

編集:もう少し分析した後、JGitDirCacheを使用してインデックスの内容にアクセスできることがわかりました。したがって、クラスを使用して、この質問DirCacheのように、インデックス内のファイルの SHA1 を取得できます。しかし今、このハッシュはチェックアウト元のリビジョン ハッシュと同じではないことがわかりました。つまり、この方法を使用して、テーブルのどのリビジョンがチェックアウトされているかを判断することはできません。

では、説明されている私のワークフローを使用して、ユーザーがどのリビジョンを選択して作業するかを判断する方法は他にありますか? あるいは、誰かが別のアプローチを提案できるかもしれません。

この問題に対する私の現在のアプローチは、 JGit を使用することですAddNoteCommand。ユーザーがリビジョンをチェックアウトすると、このリビジョンに「キー: 値」というメモを追加するだけです。このキーは、リビジョンがチェックアウトされているかどうかを示します。より良い提案がある人はいますか?

4

1 に答える 1