JGitのArchiveCommand
を使用してアーカイブを作成できます。そのsetPaths()
メソッドを使用すると、含まれる特定のパスのみを選択できます。
パスのリストをアセンブルするには、アーカイブするコミットのツリーを分析したいと思うでしょう。例えば:
TreeWalk treeWalk = new TreeWalk(repository);
treeWalk.setRecursive(true);
treeWalk.addTree(commit.getTree());
while(treeWalk .next()) {
if(!isBinary(treeWalk) {
filesToArchive.add(treeWalk.getPathString());
}
}
treeWalk.close();
コード例をアーカイブするコミットのツリー全体を歩き、ツリー内の各ファイルの内容を取得し、そのコンテンツがテキストまたはバイナリであるかどうかを決定するために架空isBinary()
メソッドを呼び出します。すべての非バイナリファイルは、ArchiveCommand
に渡すことができるfilesToArchive
コレクションに追加されます。あなたはJGitの属性サポートを使用して成功することがありisBinary()
実装については
:
Attributes attributes = new AttributesHandler(treeWalk).getAttributes();
boolean binary = attributes.isSet("binary");
AttributesHandler::getAttributes()
はがtreeWalk
によって表される現在のパスの属性を合併返します。
ObjectId blobId = getObjectId(0);
ObjectReader objectReader = repository.newObjectReader();
ObjectLoader objectLoader = objectReader.open(blobId);
byte[] bytes = objectLoader.getBytes();
objectReader.close();
booloean binary = RawText.isBinary(bytes);
RawText::isBinary
が所与のコンテンツはバイナリまたはテキストであるかどうかを決定するためにネイティブのGitと同じヒューリスティックを使用する:
あるいは、そうのようなisBinary()
方法を実装するためにRawText::isBinary()
を使用してもよいです。
これは素晴らしいことです。ファイルがバイナリかプレーンテキストかを判断するだけです。ありがとう。 –
回答を編集してください。 –
ありがとう@Rüdigerもう一度。プライベートだから 'AttributesHandler.BINARY_RULE_KEY'をどう使うのか分かりませんが、私はここから管理することができると思います –