5

我正在使用以下代码从 github 签出一个存储库。

private String url = "https://github.com/organization/project.git";
    Git repo = Git.cloneRepository().setURI(url).setDirectory(directory).setCloneAllBranches(true).call();
    for (Ref b : repo.branchList().call()) {
        System.out.println("(standard): cloned branch " + b.getName());
    }

我正在使用代码

Git git = Git.open(checkout); //checkout is the folder with .git
git.pull().call(); //succeeds

如果我结账一个分支

Git git = Git.open(new File(checkout)); //checkout is the folder with .git
System.out.println(git.getRepository().getFullBranch());
CheckoutCommand checkout = git.checkout();
Ref call = checkout.setName("kalees").call();

它抛出 org.eclipse.jgit.api.errors.RefNotFoundException: Ref kalees can't be resolve。

这里有什么问题,如果我指定“master”而不是“kalees”它工作正常。我应该做些什么改变来检查一个特定的分支?

如果我使用代码

git.checkout().setCreateBranch(true).setName("refs/remotes/origin/kalees");

它检查了羽衣甘蓝分支。但是当我做拉操作时

git.pull().call(); 

它抛出org.eclipse.jgit.api.errors.DetachedHeadException: HEAD is detached。可能是什么,这是结帐问题还是拉问题?

4

3 回答 3

5

只有在以下情况下才会发生:

  • kalees不是现有的分支(或者写错了,不好的情况)
  • kalees是您已跟踪的远程分支,但仍是本地分支

如果是这样,您可能需要先创建它(有点像这个例子

git.branchCreate().setForce(true).setName("kalees").setStartPoint("origin/kalees").call();

在“ JGit:找不到教程或简单示例”之后,我宁愿使用:

git.branchCreate() 
       .setName("kalees")
       .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM)
       .setStartPoint("origin/kalees")
       .setForce(true)
       .call(); 
于 2012-09-27T07:28:15.833 回答
2

当我想创建一个带有空存储库的分支时,我遇到了这个问题,这个存储库中没有提交。

当我将某些内容提交到存储库时,它就解决了。希望它对你有帮助:)

于 2016-03-22T10:56:17.013 回答
1

Muthu 您的代码正在运行,您只需要像这样将 origin/branch 添加到分支调用中

Ref call = checkout.setName("origin/kalees").call();
于 2017-05-23T02:58:51.740 回答