【问题标题】:JGit branch checkout IssueJGit 分支结帐问题
【发布时间】:2012-09-27 05:26:37
【问题描述】:

我正在使用以下代码从 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");

它检查了 kalees 分支。但是当我做拉操作

git.pull().call(); 

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

【问题讨论】:

    标签: java api github jgit


    【解决方案1】:

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

    • 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(); 
    

    【讨论】:

    • @kaleeswaran14 不确定。也许.setForce(true) 在这里很重要?
    • @kaleeswaran14 我已经编辑了答案以包含一个更精确的示例。
    • @kaleeswaran14 您可以签出远程分支,前提是您基于该签出创建本地分支(否则您处于 DETACHED HEAD 模式,这是您的情况)。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 2015-06-12
        • 2016-12-22
        • 2016-11-03
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 2014-02-12
        • 2014-06-13
        相关资源
        最近更新 更多