在JGIT中创建分支时出现RefNotFoundException

问题描述 投票:0回答:2

我遇到无法创建本地分支的问题。

Error: org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/sideMerge cannot be resolved

我已经检查了以下主题和Stackoverflow中的其他一些内容,但似乎有些可疑的事情发生或者我还不明白。

有人可以指出我对参考文献不理解的方向吗? 据我所知,本地参考从 origin/"other_branch" 开始

代码片段:

Git git;
    CreateBranchCommand tmpCreateBranch;
    git = new Git(existingRepo);
    tmpCreateBranch = git.branchCreate();

    try {
        tmpCreateBranch.setName(tmpBranchName).setStartPoint("origin/" + tmpBranchName).setForce(true).call();
    } catch (Exception e) {
        System.out.println("Error in Branch creation");
        System.out.println(e);
    }
java branch jgit
2个回答
2
投票

根据Git手册,您可以使用以下语法创建分支。它创建一个名为

<branchname>
的新分支头,它指向当前 HEAD,或者
<start-point>
(如果给定):

git branch [--track | --no-track] [-l] [-f] <branchname> [<start-point>]

因此,您可以按照 JGit 中的类似语法创建本地分支 “topic”(请参阅下一个代码块)。在这种情况下,您没有显式配置起点。 JGit 将使用 HEAD 作为起点。所以一切正常:

git.branchCreate().setName("topic").call();

但是,如果您创建一个以

origin/topic
为起点的本地分支,JGit 将尝试在 Git References 中查找此引用。在这种情况下,
origin
是远程的名称,
topic
是分支的名称。如果未找到,则会引发异常:

git.branchCreate().setName("topic").setStartPoint("origin/topic").call();

您还需要注意:

    如果分支名称已经存在,
  • setForce(true)
    会将目标分支名称重置为起点。如果没有
    -f,--force
    git 分支将拒绝更改现有分支。

0
投票

Szilágyi István,我创建分支如下:

try (Git git = new Git(repository)) {
   Ref ref = git.branchCreate().setName("Name_Branch").setStartPoint("origin/develop").call();
   git.checkout().setName(branch).call();
   git.push().setCredentialsProvider(userService.getCredencialsProvider()).call();
   logger.info("Branch created: " + ref + " - " + ref.getName() + " - " + ref.getObjectId().getName());
}
© www.soinside.com 2019 - 2024. All rights reserved.