JGit:签出一个远程分支

Nam*_*mbi 21 git jgit

我正在使用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();
Run Code Online (Sandbox Code Playgroud)

文件已签出,但HEAD未指向分支.以下是git status输出,

$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

可以在git命令行中轻松执行相同的操作,它可以正常工作,

git checkout -t origin/mybranch
Run Code Online (Sandbox Code Playgroud)

怎么做这个JGit?

rob*_*nst 35

您必须使用setCreateBranch创建分支:

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

你的第一个命令相当于git checkout origin/mybranch.

(编辑:我向JGit提交了一个补丁,以改进CheckoutCommand的文档:https://git.eclipse.org/r/8259)


Jas*_*ler 5

无论出于什么原因,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();
Run Code Online (Sandbox Code Playgroud)