簡體   English   中英

如何用jgit做相當於“git diff --name-status”的操作?

[英]How do I do the equivalent of “git diff --name-status” with jgit?

我想獲取修訂版XXXXXX和HEAD之間已更改/添加/刪除文件的列表。 這是我到目前為止:

String oldHash = "a97e5553e37a25bd1a3c99eab303145baed08dbd";
Git git = Git.open(new File("/tmp/jgit"));
Repository repository = git.getRepository();
ObjectId old = repository.resolve(oldHash);
ObjectId head = repository.resolve("HEAD");

// how do i get the trees from the obj. id?
List<<DiffEntry> diffs = git.diff().setNewTree(null).setOldTree(null).call();

for(DiffEntry diff : diffs) {
    // do stuff
}

這是正確的方法,如果是這樣,我如何獲得git.diff()所需的樹?

您可以通過調用獲取HEAD和散列的樹ID:

ObjectId head = repository.resolve("HEAD^{tree}");

並為修訂版ID:

ObjectId old = repository.resolve(oldHash + "^{tree}");

獲得樹ID后,您可以創建樹迭代器並獲取差異:

ObjectReader reader = repository.newObjectReader();
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset(reader, oldId);
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset(reader, headId);
List<DiffEntry> diffs= git.diff()
                        .setNewTree(newTreeIter)
                        .setOldTree(oldTreeIter)
                        .call();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM