2012-05-03 10 views
7

ट्रैवर्सिंग करते समय शाखा कैसे प्राप्त करें जेजीआईटी दस्तावेज़ों की कमी रेववॉक का उपयोग करते समय शाखाओं का उपयोग/पता लगाने के बारे में कुछ भी नहीं कहती है।जेजीआईटी: रेपोस

This question काफी कुछ कहता है।

तो मेरा सवाल है: मैं RevCommit से शाखा का नाम/आईडी कैसे प्राप्त करूं? या मैं हाथ से पहले कौन सी शाखा को पार करने के लिए निर्दिष्ट करूं?

उत्तर

5

शाखाओं को लूप करके इसे करने का एक बेहतर तरीका पता चला।

मैं

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

+1 कोई भी शाखा को घुमाने वाला नहीं है। मेरा जवाब शाखा को खोजने के बारे में अधिक था। – VonC

2

जेजीआईटी के वर्तमान कार्यान्वयन को देखते हुए (its git repo और इसकी RevCommit कक्षा देखें), मुझे "Git: Finding what branch a commit came from" में सूचीबद्ध के बराबर नहीं मिला।
Ie:

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

बहुत रोचक लेकिन मुझे संदेह है कि यह एक बड़े भंडार के लिए स्केल नहीं करेगा। –

संबंधित मुद्दे