java - SubmoduleUpdateCommand getConfigUpdate() 返回 null

标签 java git-submodules jgit

我有一个 git 存储库,其中包含一个子模块,它指向较旧的提交。我想使用 JGit API 将子模块更新到最新提交

parentGit.getRepository().submoduleUpdate().call();

虽然代码执行时没有任何错误,但我看不到我的子模块指向最新的远程提交

 SubmoduleWalk::getConfigUpdate

始终返回null

Please refer to org.eclipse.jgit.api -> SubmoduleUpdateCommand#call().

SubmoduleWalk walk = SubmoduleWalk.forIndex(parentGit.getRepository());
while(walk.next) {
    walk.getConfigUpdate(); // returns null;
    ...
}
parentGit.getRepository().submoduleUpdate().call(); // does nothing

walk.getConfigUpdate() 应将值返回为 ConfigConstants.CONFIG_KEY_MERGEConfigConstants.CONFIG_KEY_REBASE,以便在执行 ParentGit.submoduleUpdateCommand().call(),子模块将指向其最新的远程 HEAD。

我是否缺少任何存储库配置?

最佳答案

SubmoduleWalk::getConfigUpdate准确返回存储库配置键 submodule.<name of module>.update 中设置的内容.

如果未设置任何内容,该方法将返回 nullSubmoduleUpdateCommand确实将父存储库索引中引用的提交作为分离的 HEAD 进行 check out 。

确保父存储库的索引指向所需的子模块提交 ID。要选择不同的更新策略,您可以更改配置,如下所示:

StoredConfig config = repository.getConfig();
config.setString(CONFIG_SUBMODULE_SECTION, "my-module", CONFIG_KEY_UPDATE, CONFIG_KEY_REBASE); 
config.save();

常量均在 ConfigConstants 中声明.

关于java - SubmoduleUpdateCommand getConfigUpdate() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57799580/

相关文章:

java - 如何确定集合是否为空

git - git 子模块可以有自定义根吗?

Java (JGIT) Files.delete() 无法删除文件,但 file.delete() 成功

git - 在 Git 子模块中使用 editorconfig

git - 在 .gitmodule 中找不到非子模块路径的子模块映射

java - 干净地关闭 JGit

jgit - 防止 JGit 读取 native git 配置

java - Hibernate EntityManager findById : javax. ejb.EJBException : java. lang.NullPointerException

java - 单极编码的字符比较java

java - 有人可以指出我做错了什么吗?尝试使用 JNA 将 VB 映射到 Java 来访问该库