我有一个包含其他 git 存储库的 git 存储库。有没有递归地推送和/或拉取元存储库和子存储库的命令?
5 回答
每当我想更新我的 llvm/clang 存储库时,我都会发现自己处于同样的情况,并且通过一些 bash 帮助,我可以像这样“git pull”它们中的每一个:
$> for dir in $(find . -name ".git"); do cd ${dir%/*}; git pull ; cd -; done
这将“git pull”在您当前目录下找到的所有 git 存储库,如果它们是裸存储库,则可能无法工作。
如果您在谈论子模块,请参阅纸杯蛋糕答案。
如果您正在谈论一些包含 git repos 的文件夹层次结构,您可以 checkout clustergit
,我编写的一个工具:https ://github.com/mnagel/clustergit
不完全git pull
,但接近:
git fetch --recurse-submodules
来自Git 文档:
--recurse-submodules[=yes|on-demand|no]
此选项控制是否以及在什么条件下也应该获取填充的子模块的新提交。它可以用作布尔选项以在设置为 no 时完全禁用递归,或在设置为 yes 时无条件地递归到所有填充的子模块,这是在没有任何值的情况下使用此选项时的默认值。当超级项目检索到更新子模块对本地子模块克隆中尚未存在的提交的引用的提交时,按需使用仅递归到填充的子模块。
我刚刚编写了一个脚本以在多个 git 存储库上递归执行。你可以从这里获取它:
https://github.com/DariuszOstolski/rgit
这个想法与 clustergit 中的想法完全相同,但实现方式不同。
不久前我需要这个,并通过 npm 提供了一个 cli。https://github.com/kenglxn/gitr/blob/master/README.md
只需执行“npm install -g gitr”,然后您就可以使用 gitr 递归地执行任何 git 命令。