我想在现有的存储库中创建分支,然后跟踪该分支。创建分支成功,新创建的分支仍然跟踪主分支。我尝试了几种不同的解决方案,但结果相同 - 创建分支,但跟踪主分支。JGit - 无法跟踪新创建的分支
首先我会克隆库:
Git.cloneRepository()./*set creds*/.setURI(..).setDirectory(...).call
到目前为止好。
接下来,从克隆产生的git文件构建存储库。
FileRepositoryBuilder builder = new FileRepositoryBuilder();
Repository repo = builder.setGitDir(gitFile).readEnvironment().findGitDir()
.build();
在这一点上,我曾经尝试都checkingOut的分支createBranch
设置为true,并在两个步骤做 - 创建,然后检查。这里是两步法:
git.branchCreate()
.setForce(true)
.setName(branchName)
.setStartPoint("origin/master")
.call();
git.checkout()
.setName(branchName)
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK)
.setStartPoint("origin/"+branchName)
.call();
我曾尝试其他的事情:
- 设置上游模式SeetupUpstreamMode.SET_UPSTREAM
- 设置起点BRANCHNAME上创建步
- 没有做单独结帐,但在结帐时设置为
creatBranch(true)
- 在创建和结帐之间进行推送
结果始终的.git/config文件看起来像:
[remote "origin"]
url = ssh://..
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[branch "newbranch1"]
remote = origin
merge = refs/heads/master << TRACKING master, not newbranch1
在我与普通的git创建分支(不jgit)配置文件看起来像:
[remote "origin"]
url = ssh:...
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
[branch "newbranch2"]
remote = origin
merge = refs/heads/newbranch2 << WANT THIS
任何我想如何让我的新分支跟踪分支而不是主分支?
使用jgit-4.6.0.201612231935
所以,你要跟踪尚不遥控器上存在的一个分支(谢谢吕迪格赫尔曼)? –
请注意,'Git.cloneRepository()'返回一个'Git'实例,您可以通过'getRepository()'获取存储库,不需要使用'FileRepositoryBuilder'。另外,完成后请不要忘记关闭返回的Git实例。 –