使用JGit使现有的Git分支跟踪一个远程分支?

时间:2015-10-13 11:29:40

标签: git github jgit

我正在使用JGit创建一个新的git存储库,以及该文件夹中已存在的所有东西,我保存为新的分支。

我正在使用

Git.init().setDirectory(workingDir).call();

(默认主分支是在上述语句之后创建的,因此我将其重命名为" backupBranch")。因为master我稍后会从远程主服务器克隆。

问题是当我按下backupbranch时,它被按下但没有我能够建立的远程跟踪。

来自终端的

:如果我使用git branch -vv结果是

master       5f1994c [origin/master] commitmsg
backupbranch 7a4d671 taking backup of file already in MyTests Folder..

根据我可以使用的链接Make an existing Git branch track a remote branch?     来自终端的git branch -u upstream/foo指定推送backupbranch之后的任何时间。

如何使用JGit实现它。

以下是我正在使用的代码

创建backupbranch

git.branchRename().setNewName(backUpName).call();
git.add().addFilepattern(".").call();
RevCommit commit = git.commit().setMessage("taking backup of file already in MyTests Folder..").call();

然后第一次推它。

Iterable<PushResult> pushResult = git.push().call();

请建议我为现有分支指定远程跟踪的方式。

1 个答案:

答案 0 :(得分:7)

您可以使用CreateBranchCommand as decribed in this post

CreateBranchCommand create = git.branchCreate();
create.setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM);
create.setName("develop");
create.setStartPoint("origin/develop");
create.setForce(true)
create.call();

请注意setForce(true)来电。由于您的本地分支已存在,因此您需要覆盖它。之后它将指向远程跟踪分支(origin/develop) - 无论如何它都会在之前完成。

或者,您可以直接修改配置文件。例如:

StoredConfig config = git.getRepository().getConfig();
String branchName = "develop"
String remoteName = "origin";
config.setString(ConfigConstants.CONFIG_BRANCH_SECTION, branchName,  ConfigConstants.CONFIG_KEY_REMOTE, remoteName);
config.setString(ConfigConstants.CONFIG_BRANCH_SECTION, branchName, ConfigConstants.CONFIG_KEY_MERGE, Constants.R_HEADS + branchName);
config.save();

这将产生如下配置部分:

[branch "develop"]
remote = origin
merge = refs/heads/develop