Reputation: 2717
I'm using JGit to checkout a remote tracking branch.
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();
The files are checked out, but the HEAD is not pointing to the branch.
Following is the git status
output,
$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
The same operation can be performed in git command line, easily and it works,
git checkout -t origin/mybranch
How to do this JGit?
Upvotes: 28
Views: 29087
Reputation: 892
For whatever reason, the code that robinst posted did not work for me. In particular, the local branch that was created did not track the remote branch. This is what I used that worked for me (using 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();
Upvotes: 5
Reputation: 11
you also can just like this
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);
Upvotes: 1
Reputation: 31407
You have to use setCreateBranch
to create a branch:
Ref ref = git.checkout().
setCreateBranch(true).
setName("branchName").
setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK).
setStartPoint("origin/" + branchName).
call();
Your first command was the equivalent of git checkout origin/mybranch
.
(Edit: I submitted a patch to JGit to improve the documentation of CheckoutCommand: https://git.eclipse.org/r/8259)
Upvotes: 45
Reputation: 1323723
As shown in the code of CheckoutCommand
, you need to set the boolean createBranch
to true
in order to create a local branch.
You can see an example in CheckoutCommandTest
- testCreateBranchOnCheckout()
@Test
public void testCreateBranchOnCheckout() throws Exception {
git.checkout().setCreateBranch(true).setName("test2").call();
assertNotNull(db.getRef("test2"));
}
Upvotes: 4