使用 jgit 创建远程和本地分支
Create remote and local branch with jgit
我正在尝试使用 jgit 创建一个远程分支,它完全执行以下 git 命令:
- git 克隆 git@gitlab.com:my-project/test.git
- git checkout -b superBranch
- git push --set-upstream origin superBranch
执行完这些后,我可以在没有合并请求的情况下更改和推送分支的文件。
jGit:
不幸的是 jgit 不知道命令“push -u”(上游)。所以我找到了一些可能的解决方案。但并非所有解决方案都有效。
第一名:
// git clone done, than:
git.branchCreate()
.setName("superBranch")
.setForce(true)
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK)
.setStartPoint("origin/superBranch").call(); // <-- Ref not found
RefSpec refSpec = new RefSpec().setSourceDestination("superBranch", "superBranch");
git.push()
.setRefSpecs(refSpec)
.setCredentialsProvider(provider).call();
git.checkout().setName("superBranch").call();
异常:
org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/superBranch cannot be resolved
我在这里找到的另一个解决方案 Eclipse Forum:
git.branchCreate().setName("superBranch").call();
git.push()
.setRemote("origin")
.setRefSpecs(new RefSpec("superBranch" + ":" + "superBranch")) //<-- Ref not found
.setCredentialsProvider(provider).call();
git.branchCreate()
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.SET_UPSTREAM)
.setStartPoint("origin/" + "superBranch")
.setForce(true).call();
git.checkout().setName("superBranch").call();
异常:
org.eclipse.jgit.api.errors.InvalidRefNameException: Branch name <null> is not allowed
有谁知道如何创建远程和本地分支,而不调用 api 或像我在顶部的 git 示例那样发出合并请求?
以下代码适用于我:
Git git = Git.cloneRepository()
.setURI("https://gitlab.com/my-project/test.git")
.setDirectory(new File("scratch/test"))
.setCloneAllBranches(true)
.setCredentialsProvider(provider).call();
git.checkout()
.setCreateBranch(true)
.setName(BRANCH).call();
git.push()
.setRemote("origin")
.setRefSpecs(new RefSpec(BRANCH + ":" + BRANCH))
.setCredentialsProvider(provider).call();
所以我克隆存储库,签出分支或创建分支(如果不存在),然后将新分支推送到远程存储库。
最后,我试了这个,对我有用。
git.branchCreate().setName(localBranchName).call();
git.push().setRemote("origin")
.setCredentialsProvider(createCredential(name, password))
.setRefSpecs(new RefSpec(localBranchName + ":" + localBranchName)).call();
//delete is necessary
git.branchDelete().setBranchNames(localBranchName).call();
git.checkout().setCreateBranch(true).setName(localBranchName)
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK)
.setStartPoint("origin/" + localBranchName)
.call();
我正在尝试使用 jgit 创建一个远程分支,它完全执行以下 git 命令:
- git 克隆 git@gitlab.com:my-project/test.git
- git checkout -b superBranch
- git push --set-upstream origin superBranch
执行完这些后,我可以在没有合并请求的情况下更改和推送分支的文件。
jGit:
不幸的是 jgit 不知道命令“push -u”(上游)。所以我找到了一些可能的解决方案。但并非所有解决方案都有效。
// git clone done, than:
git.branchCreate()
.setName("superBranch")
.setForce(true)
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK)
.setStartPoint("origin/superBranch").call(); // <-- Ref not found
RefSpec refSpec = new RefSpec().setSourceDestination("superBranch", "superBranch");
git.push()
.setRefSpecs(refSpec)
.setCredentialsProvider(provider).call();
git.checkout().setName("superBranch").call();
异常:
org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/superBranch cannot be resolved
我在这里找到的另一个解决方案 Eclipse Forum:
git.branchCreate().setName("superBranch").call();
git.push()
.setRemote("origin")
.setRefSpecs(new RefSpec("superBranch" + ":" + "superBranch")) //<-- Ref not found
.setCredentialsProvider(provider).call();
git.branchCreate()
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.SET_UPSTREAM)
.setStartPoint("origin/" + "superBranch")
.setForce(true).call();
git.checkout().setName("superBranch").call();
异常:
org.eclipse.jgit.api.errors.InvalidRefNameException: Branch name <null> is not allowed
有谁知道如何创建远程和本地分支,而不调用 api 或像我在顶部的 git 示例那样发出合并请求?
以下代码适用于我:
Git git = Git.cloneRepository()
.setURI("https://gitlab.com/my-project/test.git")
.setDirectory(new File("scratch/test"))
.setCloneAllBranches(true)
.setCredentialsProvider(provider).call();
git.checkout()
.setCreateBranch(true)
.setName(BRANCH).call();
git.push()
.setRemote("origin")
.setRefSpecs(new RefSpec(BRANCH + ":" + BRANCH))
.setCredentialsProvider(provider).call();
所以我克隆存储库,签出分支或创建分支(如果不存在),然后将新分支推送到远程存储库。
最后,我试了这个,对我有用。
git.branchCreate().setName(localBranchName).call();
git.push().setRemote("origin")
.setCredentialsProvider(createCredential(name, password))
.setRefSpecs(new RefSpec(localBranchName + ":" + localBranchName)).call();
//delete is necessary
git.branchDelete().setBranchNames(localBranchName).call();
git.checkout().setCreateBranch(true).setName(localBranchName)
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK)
.setStartPoint("origin/" + localBranchName)
.call();