2017-05-25 64 views
1

我想在现有的存储库中创建分支,然后跟踪该分支。创建分支成功,新创建的分支仍然跟踪主分支。我尝试了几种不同的解决方案,但结果相同 - 创建分支,但跟踪主分支。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

+0

所以,你要跟踪尚不遥控器上存在的一个分支(谢谢吕迪格赫尔曼)? –

+1

请注意,'Git.cloneRepository()'返回一个'Git'实例,您可以通过'getRepository()'获取存储库,不需要使用'FileRepositoryBuilder'。另外,完成后请不要忘记关闭返回的Git实例。 –

回答

1

我认为你不能跟踪与JGit的CreateBranchCommand一个不存在的分支。 setStartPoint()仅用于指定新分支最初应指向的位置。

但是,您可以直接操作与

StoredConfig config = repository.getConfig(); 
config.setString("branch", "newbranch", "remote", "origin"); 
config.setString("branch", "newbranch", "merge", "refs/heads/newbranch"); 
config.save(); 

库配置这是否解决问题了吗?

0

这里是最后的工作代码:

Git git = Git.cloneRepository... 

git.checkout().setCreateBranch(true).setName(branchName).call(); 

pushCmd.setRemote("origin") 
    .setRefSpecs(new RefSpec(branchName+":"+branchName)).call(); 

StoredConfig config = git.getRepository().getConfig(); 
config.setString("branch", branchName, "remote", "origin"); 
config.setString("branch", branchName, "merge", "refs/heads/" + branchName); 
config.save();