JGit:git submodule foreach 命令

4

我知道JGit对于git子模块的支持有限,但仍然想知道如何实现以下操作:

git submodule foreach git checkout <branchName>

以及类似的命令使用JGit。

或者是否有其他更好的基于Java的Git API?

1个回答

5
在JGit中,有一个名为SubmoduleWalk的函数可以帮助你解决问题。如果要在所有子模块上运行检出命令,只需按以下方式编写:

try (SubmoduleWalk walk = SubmoduleWalk.forIndex(repository)) {
  while(walk.next()) {
    try (Repository submoduleRepository = walk.getRepository()) {
      Git.wrap(submoduleRepository).checkout().call();
    }
  }
}

1
我看到了这个错误信息:"org.eclipse.jgit.api.errors.InvalidRefNameException: Branch name <null> is not allowed"。你有什么想法吗? - Srinivas
1
@Srinivas 你目前为解决问题做了什么?如果需要帮助,请发布一个带有最小、完整和可验证的示例的问题。 - Rüdiger Herrmann
1
https://github.com/srinivasupadhya/git-cmd/blob/master/src/com/tw/go/plugin/jgit/JGitHelper.java - cloneOrFetch() - checkoutSubmodule() 抛出了那个异常。 - Srinivas
问题在于子模块遍历不会从.gitsubmodules文件中拉取子模块的分支,以允许正确地进行此检出。 - Doug
@Doug 你说得对,在JGit中,似乎需要手动从.gitsubmodules文件中读取(例如使用StoredConfig),并将分支名称传递给CheckoutCommand。关于这个话题,我在这篇帖子中找到了有用的信息,它解释了在本地git中该怎么做。 - Rüdiger Herrmann
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接