Git local repo不显示分支的名称

时间:2017-10-24 06:25:53

标签: git jenkins jgit

我有一个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。

1 个答案:

答案 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将返回任意匹配的分支名称。