JGit分支结账问题

时间:2012-09-27 05:26:37

标签: java api github jgit

我正在使用以下代码从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:无法解析引用的kalees。

这里有什么问题,如果我指定" master" 而不是" kalees" 它的工作原理细即可。我应该做什么改变来结账一个特定的分支?

如果我使用代码

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

检查 kalees 分支。但当我拉动操作

git.pull().call(); 

它抛出 org.eclipse.jgit.api.errors.DetachedHeadException:HEAD已分离。可能是什么,这是一个结账问题还是拉动问题?

3 个答案:

答案 0 :(得分:3)

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

  • kalees不是现有分支(或编写错误,不良案例)
  • kalees是您尚未跟踪的远程分支,但是本地分支

如果是这样,您可能需要先创建它(有点像this example

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

关注“JGit: Cannot find a tutorial or simple example”,我宁愿使用:

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

答案 1 :(得分:1)

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

当我向存储库提交内容时,它已得到解决。希望它对你有所帮助:))

答案 2 :(得分:0)

Muthu你的代码工作你只需要将这样的origin / branch添加到分支调用

Ref call = checkout.setName("origin/kalees").call();