JGit创建新的本地分支并推送到远程(远程上不存在分支)

pth*_*tha 4 java git git-checkout jgit git-branch

我正在研究一个ANT任务,该任务调用一些使用JGit在git存储库上创建新分支并将其推送到远程的java.我正在使用JGit 2.1.0.

这是代码:

CreateBranchCommand bcc;
CheckoutCommand checkout;
Git git;

try {
    Repository repo = new FileRepositoryBuilder().readEnvironment().findGitDir(src).build();
    git = new Git(repo);

    bcc = git.branchCreate();
    checkout = git.checkout();
} catch (IOException e) {
    throw new BuildException("Could not access repository " + src, e);
}

try {
        bcc.setName(branch)
            .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM)
            .setStartPoint("origin/" + branch)
            .setForce(force)
            .call();

        checkout.setName(branch);
        checkout.call();
}
} catch (Exception e) {
    throw new BuildException("Could not checkout repository " + src, e);
}
Run Code Online (Sandbox Code Playgroud)

SRC变量被设置为git仓库的路径(其已经被克隆).该分支变量设置为:release_2_0_2变量设置为:假的(既我有这个问题).

之后有一个单独的ANT任务来完成推送.

运行上面的代码时,第二个catch捕获异常:

org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/release_2_0_2 can not be resolved
Run Code Online (Sandbox Code Playgroud)

问题似乎与setStartPoint("origin/" + branch)如果我硬编码这个"起源/主人"它的工作原理.新分支已创建.我只是尝试在本地创建一个新分支,然后将其推送到远程.我使用/sf/answers/904986211/作为示例.

也许我误解了应该如何使用CreateBranchCommand,我见过的所有例子都是设置起点"origin/" + branch.任何建议/澄清都会有所帮助.

Rüd*_*ann 7

使用setStartPoint()指定哪些新的分支应该在此烯类.setStartPoint指向的提交将是新分支的初始提交.

如果未明确指定起始点,则默认为HEAD.有关更多详细信息,请参阅Git文档:https://git-scm.com/docs/git-branch

因此,起点必须存在 - 您所指的远程分支显然不存在.

setUpstreamMode()如果您要创建新分支,则无用.它旨在为现有远程分支创建本地分支时配置跟踪.但由于你没有远程分支,所以没有必要打电话setUpstreamMode.

创建本地分支后,使用将PushCommand其发布到远程分支.

PushCommand pushCommand = git.push();
pushCommand.setRemote("origin");
pushCommand.setRefSpecs(new RefSpec("release_2_0_2:release_2_0_2"));
pushCommand.call();
Run Code Online (Sandbox Code Playgroud)

上面的行将release_2_0_2分支推送到已知的远程origin(您从中克隆的远程).

帖子我如何使用JGit进行git推送?有关如何推动JGit的更多细节.