可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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?
回答1:
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)
回答2:
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")); }
回答3:
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()
回答4:
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);