8

JGit初心者の質問:

JGit を使用して、リポジトリからファイル (BLOB) を読み取り、そのコンテンツを操作します。その後、同じファイル名の新しいコンテンツを新しいコミットとしてリポジトリに書き戻したいと考えています。しかし、JGit で新しいコンテンツをコミットするにはどうすればよいでしょうか?

私の疑似コード:

String gitUrl = "path/to/repository/.git";
Repository repository = new FileRepository(gitUrl);
String filename = "test/seppl.txt";
blobId = getIdOf(filename);
ObjectLoader object = repository.open(blobId, Constants.OBJ_BLOB);
ObjectStream is = object.openStream();
String newContent = processStream(is);
// How to commit the newContent in filename?

をファイルに書き込み、newContentこのファイルをAddCommandおよびCommitCommandでコミットする必要がありますか? または、文字列を「オンザフライ」で同じファイル名でリポジトリに書き込むことはできますか?

JGitでコミットする方法の例は、ウェブのどこかにありますか?

4

3 に答える 3

6

CommitCommand を使用する以外にデータをコミットする方法はないと思います (マージなどの非常に具体的な操作を除く)。

そのため、ファイルに変更を加えてから、それを追加してコミットする必要があります (API の AddCommand と CommitCommand を使用)。

于 2012-04-13T13:44:42.557 に答える
4

はい、もちろん、やりたいことはできますが、Add/Commit は使用しないでください。これらは、低レベル API のに構築された便利な API である高レベル Porcelein APIの一部であるためです。したがって、最も一般的なユースケースを実装するだけです。

AddCommandCommitCommandの実装を見て、下位レベルの API を使用して BLOB オブジェクトを作成し、次にツリー オブジェクトを作成し、オブジェクトをコミットする方法を確認する必要があります。

Pro Git book の第 9 章をよく読んで、Gitが低レベルでどのように機能するかを正しく理解することをお勧めします。

于 2012-05-07T05:58:10.043 に答える
3

Git での Blob の使用を検討することをお勧めします。この手法は、タグに署名するときに公開 PGP キーを保存するために使用されます。必要なコンテンツをファイルに入れる必要があるようですが、一時ファイルにすることができます。誰かがプルを実行すると、ファイルはメイン ディレクトリに存在しません。ブロブとしてツリーのエントリになります。

http://book.git-scm.com/7_raw_git.html

-w、ハッシュを返すとともにエントリを書き込むように指示します。

git hash-object -w myfile.txt
6ff87c4664981e4397625791c8ea3bbb5f2279a3

アップデート

私は自分の電話でこのエントリをざっと読んだので、あなたが提供した詳細にあまり注意を払っていませんでした. はい、文字列をファイルに書き込む必要がありますが、通常のファイルのように追加する必要はありません。JGit にはhash-object. BLOB エントリを処理するコードが既にあるようです。おそらく、BLOB を直接処理しない hash-object のより高いレベルの呼び出しがあります。

Git のすべてがコンテンツのハッシュに依存していることを考えると、文字列を直接書き込む方法を見つけたとしても、すべきではないと思います。新しいハッシュと更新されたエントリを取得できるように、同じファイル名でオブジェクトを再コミットする必要があります。

于 2012-04-13T14:57:51.757 に答える