代码之家  ›  专栏  ›  技术社区  ›  Petah

Git从现有回购协议向超级项目添加子模块

  •  4
  • Petah  · 技术社区  · 14 年前

    我在一个目录中有几个(大约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 ..
    

    我如何设置任意一个子模块来用1个命令拉取所有存储库,

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

    相同的注释:

    • 所有回购的密码相同
    • 远程服务器是相同的repos(显然在单独的repos/目录中)
    • 我只想输入一次密码
    • 我只想键入一个命令来执行所有重新定位
    • 公钥/私钥不是一个选项
    • 我通过ssh连接到远程
    3 回复  |  直到 14 年前
        1
  •  2
  •   Pat O    14 年前

    像git一样使用perl。假设您拥有每个的密码:

    #!/usr/bin/perl
    
    @dirs = ("admin", "editor", "etc" );
    foreach(@dirs)
    {
      chdir($_);
      exec( "git pull origin master" );
      chdir("..");
    }
    

    再加上一点润色,你就可以增加更好的错误处理和读取密码一次,而不是每次。

        2
  •  9
  •   Evgen Bodunov    14 年前
    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将被添加到索引中。

        3
  •  0
  •   Andrii Danyleiko    7 年前

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

    现在,您可以使用git子模块foreach执行此类任务。

    也许git pull git pull--recurse submodules=yes也可以帮助您