当前位置: 首页 > 知识库问答 >
问题:

JGit:签出远程分支

徐欣德
2023-03-14

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

文件已签出,但头部未指向分支。下面是git状态的输出,

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

同样的操作也可以在git命令行中执行,非常简单,而且非常有效,

git checkout -t origin/mybranch

如何做到这一点?

共有3个答案

宰父玄天
2023-03-14

checkout命令的代码所示,您需要将布尔值createBranch设置为true,以创建本地分支。

您可以在CheckoutCommandTest-testCreateBranchOnCheckout()

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

闽朝
2023-03-14

不管出于什么原因,罗宾斯特发布的代码对我来说并不适用。特别是,创建的本地分支没有跟踪远程分支。这就是我使用的对我有用的东西(使用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();
姚麒
2023-03-14

必须使用setCreateBranch创建分支:

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

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

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

 类似资料:
  • 我正在使用JGit创建一个新的git存储库,文件夹中已经存在的所有内容都另存为new branch。 我正在用 (默认情况下,master分支是在上面的语句之后创建的,所以我将其重命名为Backup分支)。 问题是当我推后支时,它被推了,但我无法建立远程跟踪。 从终端:如果我使用结果是 根据链接,让现有的Git分支跟踪远程分支?我可以使用终端中的来指定推送backupbranch后的任何时间。 如

  • 有没有一种方法可以使用JGit API从远程URL进行克隆,我可以在某个地方更改默认的来源,并将其设置为,就像在中配置了另一个远程URL一样?

  • 有没有办法使用JGit确定一个分支是远程分支还是本地分支(或两者都是)?我有: 它给出: 因此,newFeatureBranch既是本地分支,也是远程分支。目前我检查ref.getName()是否包含“remotes/origin”。但是,有没有更好的方法来确定分支是远程的还是本地的?

  • 在Java中,我与JGit合作,在远程存储库中执行一些操作。但是,当我依次在版本之间执行稀疏签出时: 它保留最后一个签出文件并添加新的签出文件。只有当目录中的文件名不相同时才会发生这种情况。以这种方式使用checkout命令时,如何避免这种情况? 我考虑过删除正在签出的文件夹中的文件(本例中是脚本),但我不知道当“下载”的文件具有相同的名称时,是否会带来冲突。

  • 远程引用是对远程仓库的引用(指针),包括分支、标签等等。 你可以通过 git ls-remote (remote) 来显式地获得远程引用的完整列表,或者通过 git remote show (remote) 获得远程分支的更多信息。 然而,一个更常见的做法是利用远程跟踪分支 {#2}。 远程跟踪分支 {#2}是远程分支状态的引用。 它们是你不能移动的本地引用,当你做任何网络通信操作时,它们会自动移

  • 远程引用是对远程仓库的引用(指针),包括分支、标签等等。 你可以通过 git ls-remote (remote) 来显式地获得远程引用的完整列表,或者通过 git remote show (remote) 获得远程分支的更多信息。 然而,一个更常见的做法是利用远程跟踪分支。 远程跟踪分支是远程分支状态的引用。 它们是你不能移动的本地引用,当你做任何网络通信操作时,它们会自动移动。 远程跟踪分支像