【发布时间】:2014-09-15 12:00:48
【问题描述】:
我们可以在不签出的情况下使用 jgit 在 git 中创建一个远程分支吗?例如,我想从远程存储库中名为 bar 的分支创建一个名为 foo 的分支,而不需要在本地签出分支 bar。
【问题讨论】:
标签: git branch git-remote jgit git-checkout
我们可以在不签出的情况下使用 jgit 在 git 中创建一个远程分支吗?例如,我想从远程存储库中名为 bar 的分支创建一个名为 foo 的分支,而不需要在本地签出分支 bar。
【问题讨论】:
标签: git branch git-remote jgit git-checkout
我能够使用 rest api curl 命令创建一个远程分支
/rest/branch-utils/1.0/projects/{projectKey}/repos/{repositorySlug}/branches
【讨论】:
不克隆就无法创建远程分支。
但是您可以在不签出的情况下创建远程分支。
具体来说,你可以用“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”。
RefSpec spec = new RefSpec("refs/heads/bar:refs/heads/foo");
git1.push().setRemote("test").setRefSpecs(spec).call();
【讨论】: