我正在使用JGit结帐远程跟踪分支。
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?
答案 0 :(得分:31)
您必须使用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)
答案 1 :(得分:4)
如CheckoutCommand
的代码所示,您需要将布尔createBranch
设置为true
才能创建本地分支。
您可以在CheckoutCommandTest
- testCreateBranchOnCheckout()
@Test
public void testCreateBranchOnCheckout() throws Exception {
git.checkout().setCreateBranch(true).setName("test2").call();
assertNotNull(db.getRef("test2"));
}
答案 2 :(得分:4)
无论出于何种原因,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();
答案 3 :(得分: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);