我有一个Jenkins Maven构建,git客户端发出以下命令:
git rev-parse --is-inside-work-tree
git config remote.origin.url ssh://git@HOST:PORT/Project/main.git
git --version
git fetch --tags --progress ssh://git@HOST:PORT/Project/main.git +refs/heads/*:refs/remotes/origin/*
git rev-parse refs/remotes/origin/BRANCH_1^{commit}
git rev-parse refs/remotes/origin/origin/BRANCH_1^{commit}
git config core.sparsecheckout
git checkout -f f60bbb84ae0189b766a357a7d589b14c360f9c03
git rev-list 0caaf02f6a5789e54c6562f4d34632eb8e0a7e89
并检出所请求的BRANCH_1
分支。在其工作空间中,Git配置文件仅包含以下行:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = ssh://HOST:PORT/Project/main.git
fetch = +refs/heads/*:refs/remotes/origin/*
prune = true
在这些情况下,JGit仅列出
HEAD
repository.eaxctRef(Constants.HEAD).getLeaf().getName()
和origin
git.remoteList().call().get(i).getName()
如何使用JGit检索分支名称,在本例中为BRANCH_1
?
使用过的JGit版本是4.9.0.201710071750-r。
答案 0 :(得分:0)
命令git checkout -f
将您的存储库置于名为detached head的状态。因此,JGit exactRef()
的结果是正确的。
为了找到指向您签出的提交的分支,JGit提供了git name-rev --refs=refs/heads/* <commit id>
的实现。
例如:
git.nameRev().add( ObjectId.fromString( "abc123..." ).addPrefix( "refs/heads" ).call();
会将提交ID的映射返回给名称。但请注意,如果多个分支指向给定的提交,JGit将返回任意匹配的分支名称。