0

我已经实现了一个DfsRepository使用 jgit-2.0.0.201206130900。它很好用,但我想重新打包它,这样我只有一个打包文件。我如何通过 jgit 做到这一点?

4

1 回答 1

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.

于 2012-11-26T23:25:46.617 回答