我有以下代码:
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
的后续调用会导致创建新分支,但ref
为null
。查看CheckoutCommand#L285,ref.name = refs/heads/master
似乎master
,但test
,ref.name = refs/tags/test
和ref
设置为{{1} }}
null
这里发生了什么?这是新分支的预期行为吗?通过进入回购,我可以看到它处于分离的HEAD状态,可能导致这个问题。
答案 0 :(得分:0)
感谢@ElpieKay的线索。问题是由于存在名为test
的标记引起的。显然,在寻找引用时,JGit更喜欢分支上的标签。
我通过明确指定分支名称为refs/heads/test
(setName
)解决了这个问题。