2012-10-17 13 views
15

Używam JGit do realizacji zdalnego śledzenia oddziałów.JGit: Zamówienie zdalnego oddziału

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(); 

Pliki są wyrejestrowywane, ale HEAD nie wskazuje gałęzi. Poniżej znajduje się git status wyjście,

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

Tę samą operację można wykonać w wierszu poleceń git, łatwo i działa

git checkout -t origin/mybranch 

Jak to zrobić JGit?

Odpowiedz

19

Musisz użyć setCreateBranch utworzyć oddział:

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

Twoja pierwsza komenda była odpowiednikiem git checkout origin/mybranch.

(Edit: I złożyła poprawkę do JGit poprawić dokumentację CheckoutCommand: https://git.eclipse.org/r/8259)

+0

Próbowałem. to działa. to proste rozwiązanie. Muszę dokonać zmiany, zatwierdzić i popchnąć do oddalenia. Sprawdzę to i zaktualizuję wątek. – Nambi

+0

Kompletna odpowiedź niż moja. +1 – VonC

+0

Powyższy kod nie działa z tagami git, prawa? –

4

Jak pokazano w kodzie CheckoutCommand, należy ustawić wartość boolean createBranch na true, aby utworzyć gałąź lokalną.

można zobaczyć przykład w CheckoutCommandTest - testCreateBranchOnCheckout()

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

dobry pomysł, aby połączyć przetestować przypadki, +1 :) – robinst

3

z jakiegokolwiek powodu, kod robinst zamieszczonych nie działa dla mnie. W szczególności utworzony lokalny oddział nie śledził oddziału zdalnego. To, co kiedyś, że pracował dla mnie (przy 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

To powinna być akceptowana odpowiedź. Pozostałe dwa rozwiązania nie działają. –

1

można również tak jak ten

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); 
Powiązane problemy