【问题标题】:git submodule foreach not workinggit子模块foreach不工作
【发布时间】:2012-01-08 14:27:27
【问题描述】:

我想弄清楚为什么git submodule foreach 命令对我不起作用。我已经克隆了一个包含多个子模块的 git 存储库。我想一次初始化并更新所有子模块以下拉子模块源。但是无论我尝试什么 git submodule foreach 都不适合我......我尝试了几件事:

git submodule foreach init
git submodule foreach update
git submodule foreach update --init
git submodule foreach --recursive git submodule update --init

每个命令都会执行但没有任何输出...如果我去分别初始化/更新每个模块(不使用 foreach)那么没问题。

有什么想法吗?

【问题讨论】:

    标签: git git-submodules


    【解决方案1】:

    git submodule initgit submodule update 应该适用于在.gitmodules 中注册的所有子模块,因此为每个子模块执行它们没有意义。

    如果子模块中有子模块,git submodule update --recursive 会递归处理所有个子模块。

    【讨论】:

    • 好的,这确实有效......所以什么时候适合使用 foreach 命令?
    • @PrimozRome:对于您要在每个子模块上使用的任何命令,例如在此外部脚本示例中:stackoverflow.com/questions/5889246/…
    【解决方案2】:

    克隆后你通常需要做的就是:

    git submodule update --init --recursive
    

    最初完成此操作后,删除 --init 选项。

    init 选项是将 .gitmodules 文件中指定的 url 复制到子模块 repo 配置中的命令的一部分。如果您正在使用选择的特定遥控器并且项目已移动到您不想使用的遥控器,您可能不想这样做。一个典型的例子是当你宁愿使用你在 GitHub 上的一个项目的 fork 并且顶级 repo 指向主要的 repo。

    【讨论】:

      【解决方案3】:

      你必须跑:

      git submodule init
      git submodule update
      

      --

      你需要一个 .gitmodules 文件在你的树的根目录,它看起来像这样。

      [submodule "LiveReload/Compilers"]
              path = LiveReload/Compilers
              url = git://github.com/livereload/livereload-plugins.git
      [submodule "Shared/libs/fsmonitor"]
              path = Shared/libs/fsmonitor
              url = git://github.com/andreyvit/fsmonitor.c.git
      [submodule "js"]
              path = js
              url = git://github.com/livereload/livereload-js.git
      

      以下是基于上述内容的输出外观:

      Nicks-MacBook:LiveReload2 admin$ git submodule init
      Submodule 'LiveReload/Compilers' (git://github.com/livereload/livereload-plugins.git) registered for path 'LiveReload/Compilers'
      Submodule 'Shared/libs/fsmonitor' (git://github.com/andreyvit/fsmonitor.c.git) registered for path 'Shared/libs/fsmonitor'
      Submodule 'js' (git://github.com/livereload/livereload-js.git) registered for path 'js'
      Nicks-MacBook:LiveReload2 admin$ git submodule update
      Cloning into 'LiveReload/Compilers'...
      remote: Counting objects: 7571, done.
      remote: Compressing objects: 100% (5446/5446), done.
      remote: Total 7571 (delta 2326), reused 6733 (delta 1488)
      Receiving objects: 100% (7571/7571), 7.80 MiB | 2.73 MiB/s, done.
      Resolving deltas: 100% (2326/2326), done.
      Submodule path 'LiveReload/Compilers': checked out 'd770710edc2362caf4ed9adf303da1edc9e6e494'
      Cloning into 'Shared/libs/fsmonitor'...
      remote: Counting objects: 132, done.
      remote: Compressing objects: 100% (79/79), done.
      remote: Total 132 (delta 73), reused 112 (delta 53)
      Receiving objects: 100% (132/132), 23.29 KiB, done.
      Resolving deltas: 100% (73/73), done.
      Submodule path 'Shared/libs/fsmonitor': checked out '1290027aea3a8e3f7fe06e3c228a16240c0fc17f'
      Cloning into 'js'...
      remote: Counting objects: 745, done.
      remote: Compressing objects: 100% (413/413), done.
      remote: Total 745 (delta 301), reused 703 (delta 259)
      Receiving objects: 100% (745/745), 864.22 KiB | 820 KiB/s, done.
      Resolving deltas: 100% (301/301), done.
      Submodule path 'js': checked out '6aa86b01479c3aad785e9623f39cfcde2b8615f
      

      【讨论】:

        猜你喜欢
        • 2010-12-08
        • 2012-03-13
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 2011-08-19
        相关资源
        最近更新 更多