使用 JGit 以编程方式获取所有 Git 分支
Fetching all Git branches programmatically with JGit
我正在使用名为 setRefSpecs(...)
的 JGit in a project and I would like to achieve the programmatic equivalent of a git --fetch all
. The JGit API Documentation provides three alternative fetch operations。所有备选方案都需要开发人员定义要更新的具体 RefSpecs
。
我希望我必须查询所有可用的存储库 RefSpecs
并将它们聚合以进行一次组合提取调用(类似于 Getting all branches with JGit
)。但是,我不明白如何将 Ref
转换为 RefSpec
。如果有任何指点,我将不胜感激。
与此非常相关,我也不确定如何修剪已远程删除的本地分支(fetch --prune
)。我是否正确地认为将 setRemoveDeletedRefs
设置为 true
可以实现这一点?
根据 git 获取文档,--all
将从所有(已配置的)远程获取分支。
JGit 的 RemoteListCommand
可用于获取所有已配置遥控器的列表。对于每个遥控器,您需要获取分支。我假设,refspec fetch 所述分支是从各自的远程配置派生的。
使用 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
.
我正在使用名为 setRefSpecs(...)
的 JGit in a project and I would like to achieve the programmatic equivalent of a git --fetch all
. The JGit API Documentation provides three alternative fetch operations。所有备选方案都需要开发人员定义要更新的具体 RefSpecs
。
我希望我必须查询所有可用的存储库 RefSpecs
并将它们聚合以进行一次组合提取调用(类似于 Getting all branches with JGit
)。但是,我不明白如何将 Ref
转换为 RefSpec
。如果有任何指点,我将不胜感激。
与此非常相关,我也不确定如何修剪已远程删除的本地分支(fetch --prune
)。我是否正确地认为将 setRemoveDeletedRefs
设置为 true
可以实现这一点?
根据 git 获取文档,--all
将从所有(已配置的)远程获取分支。
JGit 的 RemoteListCommand
可用于获取所有已配置遥控器的列表。对于每个遥控器,您需要获取分支。我假设,refspec fetch 所述分支是从各自的远程配置派生的。
使用 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
.