我有一个git存储库,其中包含一个子模块,并且已加载到我的本地沙箱中。
在将子模块更新为远程存储库也指向的最新提交之后,我想找到其最新提交SHA1和子模块分支名称。
在尝试获取已加载子模块的branchName时,代码始终返回其SHA1而不是名称。
// Method to find the localHeadCommit
public RevCommit fetchLocalHeadCommit(final String gitSubmoduleRootFolderPath) throws IOException {
try (Git gitSubmodule = Git.open(new File(resolveRootFolderPath(gitSubmoduleRootFolderPath)))) {
Repository repository = gitSubmodule.getRepository();
ObjectId localHeadObjId = repository.resolve("HEAD");
try (RevWalk revWalk = new RevWalk(repository, 0)) {
return revWalk.parseCommit(localHeadObjId);
}
}
// Method to find the submoduleBranchName
public String fetchBranchNameOfSubmodule(final String gitRootFolderPath) throws IOException {
return fetchLocalHeadCommit(gitRootFolderPath).getName();
}
I expect the output of fetchBranchNameOfSubmodule() to be
feature/SubmodulebrachName , but the actual output is
4f8664429af63c0309c0f063436b911845e3d3a43
1)我们还有其他选择可以找到本地加载的子模块的branchName吗?
2)另外,如果多个分支指向同一个commitId,如何查找branchName?
答案 0 :(得分:0)
在尝试获取已加载子模块的分支名称时,代码始终返回其SHA1而不是名称
在使用子模块时,git签出SHA-1,您所处的模式称为detached HEAD
有几种方法可以跟踪子模块当前指向哪个分支,最简单的方法是使用给定的分支创建子模块(告诉子模块跟踪所需的分支)
### Track specific branch
git submodule add -b <branch name> <url>
此外,如果多个分支指向同一提交,如何查找分支名称?
基本上,您在detached HEAD
中(建议阅读此答案以了解什么是detached HEAD
:How to move HEAD back to a previous location? (Detached head) & Undo commits)
在分离式HEAD中,提交是来自分支还是来自标记都无所谓,因为git只关心内容。
不会有太大帮助,但是您可以使用git contains <SHA-1>
来获取包含此提交的分支列表。