使用JGit以编程方式获取所有Git分支

4

我正在一个项目中使用JGit,我希望实现程序等效于git --fetch allJGit API 文档提供了三种替代的 fetch 操作,称为setRefSpecs(...)。所有的替代方案都需要开发人员定义具体的RefSpecs来进行更新。

我预计我需要查询存储库以获取所有可用的RefSpecs并将它们合并为一次组合的 fetch 调用(类似于使用 JGit 获取所有分支)。然而,我不明白如何将Ref转换为RefSpec。在这方面,我将非常感谢任何指导。

非常相关的是,我也不确定如何修剪已从远程删除的本地分支(`fetch --prune`)。我是否可以假设将`setRemoveDeletedRefs`设置为`true`可以实现这一点?
1个回答

7
根据git fetch文档,--all会从所有(配置的)远程获取分支。
JGit的RemoteListCommand可用于获取所有配置的远程列表。对于每个远程,您需要获取分支。我假设,获取这些分支的refspec是从各自远程的配置中派生出来的。
使用JGit API,可以这样实现:
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


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