2012-05-03 16 views
7

Tài liệu JGit thiếu dường như không nói gì về cách sử dụng/phát hiện các nhánh trong khi sử dụng RevWalk.JGit: Cách lấy Chi nhánh khi duyệt qua repos

This question nói khá nhiều điều tương tự.

Vì vậy, câu hỏi của tôi là: Làm cách nào để có tên/id chi nhánh từ RevCommit? Hoặc làm cách nào để tôi chỉ định nhánh nào sẽ di chuyển trước bàn tay?

Trả lời

5

Tìm ra cách tốt hơn để thực hiện điều đó bằng cách lặp lại nhánh.

tôi looped qua các chi nhánh bằng cách gọi

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

+1 không vượt qua một nhánh đơn lẻ. Câu trả lời của tôi là nhiều hơn về việc tìm kiếm chi nhánh cho một cam kết. – VonC

2

Nhìn vào triển khai hiện tại của JGit (xem its git repo và lớp RevCommit), tôi không tìm thấy tương đương với những gì được liệt kê trong "Git: Finding what branch a commit came from".
Ie:

git branch --contains <commit> 

Chỉ một số tùy chọn của git branch được thực hiện (như trong ListBranchCommand.java).

+0

Vâng, có vẻ như không có sự hỗ trợ cho đi từ cam -> chi nhánh, nhưng bạn có biết nếu vượt qua chỉ cam kết của một nhánh đơn lẻ không? – Braden

+0

+1 vì câu trả lời của bạn đã giúp tôi đi đúng hướng. Thú vị khi thấy chính xác những gì họ đã triển khai. – Braden

1

có thể sử dụng mã dưới đây để có được "từ" chi nhánh của cam kết:

/** 
    * 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

Rất thú vị nhưng tôi nghi ngờ nó sẽ không mở rộng cho một kho lưu trữ lớn. –