我正在一个项目中使用JGit,我希望实现程序等效于git --fetch all
。JGit API 文档提供了三种替代的 fetch 操作,称为setRefSpecs(...)
。所有的替代方案都需要开发人员定义具体的RefSpecs
来进行更新。
我预计我需要查询存储库以获取所有可用的RefSpecs
并将它们合并为一次组合的 fetch 调用(类似于使用 JGit 获取所有分支)。然而,我不明白如何将Ref
转换为RefSpec
。在这方面,我将非常感谢任何指导。
我正在一个项目中使用JGit,我希望实现程序等效于git --fetch all
。JGit API 文档提供了三种替代的 fetch 操作,称为setRefSpecs(...)
。所有的替代方案都需要开发人员定义具体的RefSpecs
来进行更新。
我预计我需要查询存储库以获取所有可用的RefSpecs
并将它们合并为一次组合的 fetch 调用(类似于使用 JGit 获取所有分支)。然而,我不明白如何将Ref
转换为RefSpec
。在这方面,我将非常感谢任何指导。
--all
会从所有(配置的)远程获取分支。RemoteListCommand
可用于获取所有配置的远程列表。对于每个远程,您需要获取分支。我假设,获取这些分支的refspec是从各自远程的配置中派生出来的。Git git = ...
List<RemoteConfig> remotes = git.remoteList().call();
for(RemoteConfig remote : remotes) {
git.fetch()
.setRemote(remote.getName())
.setRefSpecs(remote.getFetchRefSpecs())
.call();
}
当然,您可以使用自己的refspec,例如 refs/heads/*:refs/remotes/<remote-name>/*
,以同步所有分支。
回答您的第二个问题:是的,FetchCommand :: setRemoveDeletedRefs
用于修剪本地分支,相当于--prune
。