我使用jgit-2.0.0.201206130900实现了DfsRepository
。它工作得很好,但我想重新打包它,所以我只有一个packfile。我如何通过jgit做到这一点?
答案 0 :(得分:0)
有这个工作。 DfsGarbageCollector
基本上相当于repack -d
。要获得repack -a
行为,请使用DfsPackCompactor
:
void repack(DfsRepository repo) throws IOException {
DfsGarbageCollector gc = new DfsGarbageCollector(repo);
gc.pack(null);
// update the list of packs for getPacks() below
// otherwise not all packs are compacted
repo.scanForRepoChanges();
// only compact if there are multiple pack files
DfsPackFile[] packs = repo.getObjectDatabase().getPacks();
if (packs.length > 1) {
DfsPackCompactor compactor = new DfsPackCompactor(repo);
for (DfsPackFile pack : packs) {
compactor.add(pack);
}
compactor.compact(null);
}
}
但这并不是全部。
DfsGarbageCollector
为垃圾创建一个单独的包文件。
我发现“删除”垃圾包文件的最简单方法是从我的DfsOutputStream
实现中返回DfsObjDatabase.writePackFile()
,如果包文件的源为PackSource.UNREACHABLE_GARBAGE
,则只会丢弃数据。