【发布时间】:2017-10-26 07:22:53
【问题描述】:
我想在现有存储库中创建一个分支,然后跟踪该分支。创建分支成功,新创建的分支还在跟踪master。我尝试了几种不同的解决方案,但结果相同 - 创建了分支,但跟踪了 master。
首先我克隆存储库:
Git.cloneRepository()./*set creds*/.setURI(..).setDirectory(...).call
到目前为止一切顺利。
接下来,从克隆生成的 git 文件构建存储库。
FileRepositoryBuilder builder = new FileRepositoryBuilder();
Repository repo = builder.setGitDir(gitFile).readEnvironment().findGitDir()
.build();
此时,我已尝试将 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
- 在创建步骤中将起点设置为分支名称
- 不单独结帐,而是在结帐时设置
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 实例。
标签: git-branch jgit