2012-05-03 39 views

回答

5

找到了一個更好的方法來通過循環分支來完成它。

我繞掛在樹枝通過調用

for (Ref branch : git.branchList().call()){ 
    git.checkout().setName(branch.getName()).call(); 
    // Then just revwalk as normal. 
} 
+0

+1否遍歷一個分支。我的回答更多的是找到提交的分支。 – VonC

2

看看JGit的當前實現(請參閱its git repo及其RevCommit類),我沒有找到與「Git: Finding what branch a commit came from」中列出的內容相同的內容。
即:

git branch --contains <commit> 

只有一部分的git branch選項來實現(如在ListBranchCommand.java)。

+0

呀,它看起來像有從承諾會不支持 - >分支,但是你知道是否遍歷一個分支的提交是可能的嗎? – Braden

+0

+1,因爲你的回答幫助我走向了正確的方向。有趣的是看到他們實現了什麼。 – Braden

1

可以使用下面的代碼通過獲取「從」支承諾:

/** 
    * 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); 
     } 
    } 
+0

非常有趣,但我懷疑它不會擴展爲大型存儲庫。 –