上下文
我正在尝试检测工作副本中上次提交后可能发生的文件重命名。 在我的例子中,我有一个干净的工作副本,我这样做了:
git mv old.txt new.txt
正在运行 $ git status
显示预期结果:
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# renamed: old.txt -> new.txt
我试过了
使用 StatusCommand
,我可以在删除的列表中看到 old.txt,在添加的列表中看到 new.txt。
但是我找不到将它们链接在一起的方法。
我知道 RenameDetector
的存在, 但它可以使用 DiffEntry
,而且我不知道如何在 HEAD 和 Working Copy 之间获取 DiffEntries。
最佳答案
没关系,找到答案了。 JGit的API很复杂..
TreeWalk tw = new TreeWalk(repository);
tw.setRecursive(true);
tw.addTree(CommitUtils.getHead(repository).getTree());
tw.addTree(new FileTreeIterator(repository));
RenameDetector rd = new RenameDetector(repository);
rd.addAll(DiffEntry.scan(tw));
List<DiffEntry> lde = rd.compute(tw.getObjectReader(), null);
for (DiffEntry de : lde) {
if (de.getScore() >= rd.getRenameScore()) {
System.out.println("file: " + de.getOldPath() + " copied/moved to: " + de.getNewPath());
}
}
(这个片段也使用了 Gitective 库)
关于java - JGit 在工作副本中检测重命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17296278/