Git从现有的repos向超级项目添加子模块

时间:2010-09-16 15:03:06

标签: git bash batch-file cross-platform git-submodules

我在目录中有几个(大约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子模块以使用1个命令拉出所有存储库

或者为Windows,Linux和Mac编写脚本(因为我使用所有3个操作系统)来有效地执行相同的操作。请记住,回购可以在不同的分支上,并且不一定有跟踪分支设置。

相同的说明:

  • 所有回购的密码都相同
  • 远程服务器是相同的存储库(显然在单独的存储库/目录中)
  • 我只想一次输入密码
  • 我只想输入一个命令来拉回所有回购
  • 公钥/私钥不是一个选项
  • 我通过ssh连接到遥控器

3 个答案:

答案 0 :(得分: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 repo的地方添加子模块时,此repo将添加到索引中。

答案 1 :(得分:2)

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

#!/usr/bin/perl

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

通过一些额外的润色,您可以添加更好的错误处理和一次读取密码,而不是每次。

答案 2 :(得分:0)

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

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

也许git pull git pull --recurse-submodules = yes也可以帮到你