【发布时间】:2013-07-08 10:11:02
【问题描述】:
我有一个包含其他 git 存储库的 git 存储库。是否有递归地推送和/或拉取元存储库和子存储库的命令?
【问题讨论】:
我有一个包含其他 git 存储库的 git 存储库。是否有递归地推送和/或拉取元存储库和子存储库的命令?
【问题讨论】:
每当我想更新我的 llvm/clang 存储库时,我发现自己处于相同的情况,并且通过一些 bash 帮助,我可以像这样“git pull”它们中的每一个:
$> for dir in $(find . -name ".git"); do cd ${dir%/*}; git pull ; cd -; done
这将“git pull”在你当前目录下找到的所有 git 存储库,如果它们是裸存储库,则可能无法工作。
【讨论】:
不完全是git pull,但很接近:
git fetch --recurse-submodules
来自the Git docs:
--recurse-submodules[=yes|on-demand|no]此选项控制是否以及在什么条件下也应获取已填充子模块的新提交。它可以用作布尔选项以在设置为 no 时完全禁用递归,或在设置为 yes 时无条件地递归到所有填充的子模块,这是在没有任何值的情况下使用此选项时的默认值。仅当超级项目检索到更新子模块对本地子模块克隆中不存在的提交的引用的提交时,才使用按需递归到填充的子模块。
【讨论】:
如果您在谈论子模块,请参阅纸杯蛋糕答案。
如果你在谈论一些包含 git repos 的文件夹层次结构,你可以签出 clustergit,我编写的一个工具:https://github.com/mnagel/clustergit
【讨论】:
.)以查找.git 目录,以决定 git 存储库所在的位置。然后它在这些上运行git status。如果状态为干净并且指定了-p,它将执行git pull,只有在设置了远程时才会成功,否则会出现警告(但clustergit将继续使用其他存储库)。
clustergit --recursive --remote origin:master --push 您可以添加 --verbose 以查看实际发出的 git 命令。通常我会省略--remote ... 部分,所以它只是git push。 ps:请从github更新,我只是推送了push/verbose组合的修复。 pps:我会更新文档以包含一些示例,如果您对此有一些建议,我会很感兴趣。
push 到origin master,递归pull 从origin master,举例说明-v 打开和关闭。另外,有没有办法在每个目录中add或commit?
我刚刚编写了一个脚本以在多个 git 存储库上递归执行。您可以从这里获取它:
https://github.com/DariuszOstolski/rgit
思路和clustergit完全一样,只是实现方式不同。
【讨论】:
不久前我需要这个,并通过 npm 提供了一个 cli。 https://github.com/kenglxn/gitr/blob/master/README.md
只需执行“npm install -g gitr”,然后您就可以使用 gitr 递归地执行任何 git 命令。
【讨论】: