我有一个 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_MERGE
或 ConfigConstants.CONFIG_KEY_REBASE
,以便在执行 ParentGit.submoduleUpdateCommand().call()
,子模块将指向其最新的远程 HEAD。
我是否缺少任何存储库配置?
最佳答案
SubmoduleWalk::getConfigUpdate
准确返回存储库配置键 submodule.<name of module>.update
中设置的内容.
如果未设置任何内容,该方法将返回 null
和 SubmoduleUpdateCommand
确实将父存储库索引中引用的提交作为分离的 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/