从现有仓库将子模块添加到超级项目的 Git 中

4

我在一个目录下有几个(大约10-15个)Git仓库:

~/plugins/admin
~/plugins/editor
~/plugins/etc

每个都有自己独立的代码库和远程服务器。

问题是,要从所有代码库中拉取所有更改,我必须执行以下操作:

cd ~/plugins/admin
git pull origin master
password: ********
cd ..

cd ~/plugins/editor
git pull origin master
password: ********
cd ..

cd ~/plugins/etc
git pull origin master
password: ********
cd ..

我应该如何设置 Git 子模块来使用一个命令拉取所有存储库?
或者,我可以为 Windows、Linux 和 Mac 编写脚本(因为我使用这三个操作系统),以有效地完成相同的事情。请注意,存储库可以在不同的分支上,并且不一定设置了跟踪分支。
同样的注释:
- 所有存储库的密码相同 - 远程服务器是相同的存储库(显然是在单独的存储库/目录中) - 我只想输入一次密码 - 我只想输入一个命令来拉取所有存储库 - 公共/私人密钥不是可选项 - 我通过 ssh 连接到远程

首先,运行 git submodule --help 命令。其次,假设您正在通过 SSH 访问远程存储库,请设置公钥/私钥以进行无密码登录,还有其他方法。完成此操作后,您将能够使用 git submodule update 命令更新所有子模块。 - user229044
公钥/私钥不是一个选项,我已经阅读了帮助和一些教程,但都没有找到解决方法。因此我在这里请求帮助。 - Petah
3个回答

9
bash-3.2$ git submodule add git@repoUrl:SubmoduleName.git existing/submodule/path
Adding existing repo at 'existing/submodule/path' to the index

当您尝试从已存在某个Git仓库的地方添加子模块时,该仓库将被添加到索引中。

2

像 Git 一样使用 Perl。假设您拥有每个密码:

#!/usr/bin/perl

@dirs = ("admin", "editor", "etc" );
foreach(@dirs)
{
  chdir($_);
  exec( "git pull origin master" );
  chdir("..");
}

稍加改进,您可以添加更好的错误处理和一次性读取密码,而不是每次都读取。


我最终做了类似的事情,只不过是用PHP完成的,所以你可以打勾。 - Petah

0

我知道这个问题很老,但也许我的回复对某人有用。

现在你可以使用 git submodule foreach 来完成这样的任务。

而且也许 git pull git pull --recurse-submodules=yes 也能帮到你。


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