【问题标题】:how to create git branch in remote repository without checking out using jgit如何在不使用 jgit 签出的情况下在远程存储库中创建 git 分支
【发布时间】:2014-09-15 12:00:48
【问题描述】:

我们可以在不签出的情况下使用 jgit 在 git 中创建一个远程分支吗?例如,我想从远程存储库中名为 bar 的分支创建一个名为 foo 的分支,而不需要在本地签出分支 bar

【问题讨论】:

    标签: git branch git-remote jgit git-checkout


    【解决方案1】:

    我能够使用 rest api curl 命令创建一个远程分支

    /rest/branch-utils/1.0/projects/{projectKey}/repos/{repositorySlug}/branches

    Rest api and curl command

    【讨论】:

      【解决方案2】:

      不克隆就无法创建远程分支
      但是您可以在不签出的情况下创建远程分支

      具体来说,你可以用“setNoCheckout(true)”只克隆“.git”目录(不是工作目录),然后创建远程分支并推送。

      让我们看看我的例子:

      // clone repository. Like to 'git clone -n repository'
      Git.cloneRepository().setURI(projectURL).setDirectory(repositoryFile)
        .setCredentialsProvider(credentials).setCloneAllBranches(true).setNoCheckout(true)
        .call();
      
      // create branch locally
      git.branchCreate().setName(targetBranch).setForce(true)
        .setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK).setStartPoint(startPoint)
        .call();
      
      // push created branch to remote repository
      // This matches to 'git push targetBranch:targetBranch'
      RefSpec refSpec = new RefSpec().setSourceDestination(targetBranch, targetBranch);   
      git.push().setRefSpecs(refSpec).setCredentialsProvider(credentials).call();
      

      我使用 jgit 版本 3.3.0.201403021825-r。这对我来说很好。

      【讨论】:

      • 我的回答很有趣,跳过结帐步骤可能很有趣。 +1
      • 我正在尝试使用您的代码,但收到“无法解析 Ref HEAD”(我的分支名称是 master)
      【解决方案3】:

      您需要在本地仓库中至少有一个分支“bar”才能以不同的名称“foo”推送它。
      但是您不必先签出本地分支“bar”。

      看到这个JGit push test example

      RefSpec spec = new RefSpec("refs/heads/bar:refs/heads/foo");
      git1.push().setRemote("test").setRefSpecs(spec).call();
      

      【讨论】:

      • 按照您提到的,我必须克隆存储库。我想要做的是远程创建一个分支而不在本地克隆它。 jgit 是否提供该功能?
      • @Buddy 不,jgit 不会提供该功能。也不会。或任何其他库(libgit2,...)。您所描述的内容只有在您可以访问远程服务器,直接在裸仓库中添加一个新分支时才有可能。不过你只能克隆一个分支。
      • @VovC Okey 明白了。非常感谢。
      猜你喜欢
      • 2018-01-17
      • 2013-12-13
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 2020-09-23
      • 2011-08-09
      • 1970-01-01
      • 2011-03-03
      相关资源
      最近更新 更多