我们能否在不检出的情况下使用jgit在git中创建远程分支。例如,我想在远程存储库中从名为bar的分支创建一个名为foo的分支,而无需在本地检出bar分支。
我们能否在不检出的情况下使用jgit在git中创建远程分支。例如,我想在远程存储库中从名为bar的分支创建一个名为foo的分支,而无需在本地检出bar分支。
你无法在不克隆的情况下创建远程分支。
但你可以在不检出的情况下创建远程分支。
具体来说,你可以通过设置“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,对我来说很好用。
bar
'的分支,才能将其推送到另一个名称'foo
'下。bar
'。请参考此JGit推送测试示例:RefSpec spec = new RefSpec("refs/heads/bar:refs/heads/foo");
git1.push().setRemote("test").setRefSpecs(spec).call();
我能够使用rest api curl命令创建远程分支
/rest/branch-utils/1.0/projects/{projectKey}/repos/{repositorySlug}/branches