为什么我的JGit checkout会返回null ref?

时间:2018-02-08 07:51:30

标签: java git kotlin jgit

我有以下代码:

fun checkoutBranch(path: Path, name: String) {
    Git.open(path.toFile()).use { git ->
        val branchExists = git
                .branchList()
                .setListMode(ListBranchCommand.ListMode.ALL)
                .call()
                .filterNot { it.name.startsWith("refs/remotes/") }
                .map { it.name }
                .any { it.endsWith(name) }
        val ref = git
                .checkout()
                .setCreateBranch(!branchExists)
                .setName(name)
                .setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK)
                .call()
    }
}

当我用name = master调用它时,一切都按预期工作。使用name = test的后续调用会导致创建新分支,但refnull。查看CheckoutCommand#L285ref.name = refs/heads/master似乎master,但testref.name = refs/tags/testref设置为{{1} }}

null

这里发生了什么?这是新分支的预期行为吗?通过进入回购,我可以看到它处于分离的HEAD状态,可能导致这个问题。

1 个答案:

答案 0 :(得分:0)

感谢@ElpieKay的线索。问题是由于存在名为test的标记引起的。显然,在寻找引用时,JGit更喜欢分支上的标签。

我通过明确指定分支名称为refs/heads/testsetName)解决了这个问题。