【问题标题】:JGit - Can't track newly created branchJGit - 无法跟踪新创建的分支
【发布时间】: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


【解决方案1】:

这是最终的工作代码:(感谢 Rüdiger Herrmann)

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();

【讨论】:

    【解决方案2】:

    我认为您无法使用 JGit 的 CreateBranchCommand 跟踪不存在的分支。 setStartPoint() 仅用于指定新分支最初应指向的位置。

    但是,您可以使用

    直接操作存储库配置
    StoredConfig config = repository.getConfig();
    config.setString( "branch", "newbranch", "remote", "origin" );
    config.setString( "branch", "newbranch", "merge", "refs/heads/newbranch" );
    config.save();
    

    这能解决你的问题吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-04
      • 2015-02-25
      • 2012-07-01
      • 2023-01-14
      • 2016-04-04
      • 2019-08-14
      • 2016-09-12
      • 2014-02-04
      相关资源
      最近更新 更多