gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:45:52 26 4
gpt4 key购买 nike

我正在使用 JGit在一个项目中,我想实现与 git --fetch all 等效的程序化功能. JGit API Documentation提供三个alternative fetch operationssetRefSpecs(...) .所有替代方案都需要开发商定义具体RefSpecs更新。

我希望我必须查询所有可用的存储库 RefSpecs并将它们聚合为一个组合 fetch 调用(类似于 Getting all branches with JGit )。但是,我不明白如何转换 RefRefSpec .我很感激这里的任何指针。

与此非常相关,我也不知道如何修剪已远程删除的本地分支( fetch --prune )。我是否正确假设设置 setRemoveDeletedRefstrue完全达到这个目的?

最佳答案

根据 git fetch 文档,--all将从所有(配置的) Remote 获取分支。

JGit的RemoteListCommand可用于获取所有已配置 Remote 的列表。对于每个 Remote ,您需要获取分支。我假设,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 .

关于git - 使用 JGit 以编程方式获取所有 Git 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49590077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com