缺少JGit文檔似乎沒有提及如何在使用RevWalk時使用/檢測分支。JGit:如何在遍歷回購時獲得分支
This question說幾乎相同的事情。
所以我的問題是:如何從RevCommit獲取分支名稱/ ID?或者我如何指定要在哪個分支之前進行遍歷?
缺少JGit文檔似乎沒有提及如何在使用RevWalk時使用/檢測分支。JGit:如何在遍歷回購時獲得分支
This question說幾乎相同的事情。
所以我的問題是:如何從RevCommit獲取分支名稱/ ID?或者我如何指定要在哪個分支之前進行遍歷?
找到了一個更好的方法來通過循環分支來完成它。
我繞掛在樹枝通過調用
for (Ref branch : git.branchList().call()){
git.checkout().setName(branch.getName()).call();
// Then just revwalk as normal.
}
看看JGit的當前實現(請參閱its git repo及其RevCommit類),我沒有找到與「Git: Finding what branch a commit came from」中列出的內容相同的內容。
即:
git branch --contains <commit>
只有一部分的git branch
選項來實現(如在ListBranchCommand.java
)。
可以使用下面的代碼通過獲取「從」支承諾:
/**
* find out which branch that specified commit come from.
*
* @param commit
* @return branch name.
* @throws GitException
*/
public String getFromBranch(RevCommit commit) throws GitException{
try {
Collection<ReflogEntry> entries = git.reflog().call();
for (ReflogEntry entry:entries){
if (!entry.getOldId().getName().equals(commit.getName())){
continue;
}
CheckoutEntry checkOutEntry = entry.parseCheckout();
if (checkOutEntry != null){
return checkOutEntry.getFromBranch();
}
}
return null;
} catch (Exception e) {
throw new GitException("fail to get ref log.", e);
}
}
非常有趣,但我懷疑它不會擴展爲大型存儲庫。 –
+1否遍歷一個分支。我的回答更多的是找到提交的分支。 – VonC