2012-10-17 21 views
15

मैं एक दूरस्थ ट्रैकिंग शाखा चेकआउट करने के लिए जेजीआईटी का उपयोग कर रहा हूं।जेजीआईटी: एक दूरस्थ शाखा चेकआउट

Git binrepository = cloneCmd.call() 

CheckoutCommand checkoutCmd = binrepository.checkout(); 
checkoutCmd.setName("origin/" + branchName); 
checkoutCmd.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK); 
checkoutCmd.setStartPoint("origin/" + branchName); 

Ref ref = checkoutCmd.call(); 

फाइलों की जांच की जाती है, लेकिन HEAD शाखा को इंगित नहीं कर रहा है। के बाद है git status उत्पादन,

$ git status 
# Not currently on any branch. 
nothing to commit (working directory clean) 

एक ही आपरेशन Git कमांड लाइन में, आसानी से किया जा सकता है और यह काम करता है,

git checkout -t origin/mybranch 

इस JGit कैसे करना है?

उत्तर

19

में एक उदाहरण देख सकते आप setCreateBranch उपयोग करने के लिए एक शाखा बनाने के लिए:

Ref ref = git.checkout(). 
     setCreateBranch(true). 
     setName("branchName"). 
     setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK). 
     setStartPoint("origin/" + branchName). 
     call(); 

आपका पहला आदेश git checkout origin/mybranch के बराबर था।

(संपादित करें: मैं JGit करने के लिए एक पैच प्रस्तुत CheckoutCommand के प्रलेखन सुधार करने के लिए: https://git.eclipse.org/r/8259)

+0

मैंने कोशिश की। यह काम करता हैं। यह एक साधारण समाधान है। मुझे एक बदलाव, प्रतिबद्धता और रिमोट को धक्का देना है। मैं इसका परीक्षण करूंगा और थ्रेड अपडेट करूँगा। – Nambi

+0

मेरा से अधिक पूरा जवाब। +1 – VonC

+0

उपरोक्त कोड गिट टैग, अधिकारों के साथ काम नहीं करेगा? –

4

रूप CheckoutCommand के कोड में दिखाया गया है, आप एक स्थानीय शाखा बनाने के लिए बूलियन createBranchtrue करने के लिए सेट की जरूरत है।

आप CheckoutCommandTest - testCreateBranchOnCheckout()

@Test 
public void testCreateBranchOnCheckout() throws Exception { 
    git.checkout().setCreateBranch(true).setName("test2").call(); 
    assertNotNull(db.getRef("test2")); 
} 
+0

अच्छा विचार की तरह, मामलों का परीक्षण करने के लिए +1 लिंक करने के लिए कर सकते हैं :) – robinst

3

जो भी कारण के लिए, कोड है कि पोस्ट robinst मेरे लिए काम नहीं किया। विशेष रूप से, बनाई गई स्थानीय शाखा रिमोट शाखा को ट्रैक नहीं करती थी। यह मैं क्या उपयोग किया जाता है कि मुझे (jgit 2.0.0.201206130900-r का प्रयोग करके) के लिए काम किया है:

git.pull().setCredentialsProvider(user).call() 
git.branchCreate().setForce(true).setName(branch).setStartPoint("origin/" + branch).call(); 
git.checkout().setName(branch).call() 
+0

यह उत्तर स्वीकार किया जाना चाहिए। अन्य दो समाधान काम नहीं करते हैं। –

1

आप भी सिर्फ इस

git.checkout().setName(remoteBranch).setForce(true).call(); 
       logger.info("Checkout to remote branch:" + remoteBranch); 
       git.branchCreate() 
        .setName(branchName) 
        .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM) 
        .setStartPoint(remoteBranch) 
        .setForce(true) 
        .call(); 
       logger.info("create new locale branch:" + branchName + "set_upstream with:" + remoteBranch); 
       git.checkout().setName(branchName).setForce(true).call(); 
       logger.info("Checkout to locale branch:" + branchName); 
संबंधित मुद्दे