git status怎么操作_我如何做相当于“git diff --name-status”的操作。用jgit?

I want to get a list of changed/added/deleted files between revision XXXXXX and HEAD. This is what I have so far:

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< diffs = git.diff().setNewTree(null).setOldTree(null).call();

for(DiffEntry diff : diffs) {

// do stuff

}

Is this the right way to go about it and if so, how do I get the trees required for git.diff() ?

解决方案

You can get the tree id for HEAD and the hash by calling:

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

and for the revision id:

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

Once you have the tree ids you can create the tree iterators and get the diffs:

ObjectReader reader = repository.newObjectReader();

CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();

oldTreeIter.reset(reader, oldId);

CanonicalTreeParser newTreeIter = new CanonicalTreeParser();

newTreeIter.reset(reader, headId);

List diffs= git.diff()

.setNewTree(newTreeIter)

.setOldTree(oldTreeIter)

.call();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值