如何在不使用jgit签出的情况下在远程存储库中创建git分支

时间:2014-07-24 04:23:56

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

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

3 个答案:

答案 0 :(得分:3)

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

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

让我们看看我的例子:

// 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 :(得分:2)

您需要在本地仓库中至少有一个分支“bar”,才能使用其他名称“foo”进行推送。
但您不必首先签出本地分支“bar”。

请参阅此JGit push test example

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

答案 2 :(得分:0)

我能够使用rest api curl命令

创建一个远程分支

/rest/branch-utils/1.0/projects/ {projectKey} /回购/ {repositorySlug} /分支

Rest api and curl command