【问题标题】:Retrospectively add --recursive to a git repo回顾性地将 --recursive 添加到 git repo
【发布时间】:2011-05-14 05:01:42
【问题描述】:

如果你git clone--recursive,你也可以得到所有的 git 子模块。

如果我在克隆时忘记添加这个神奇的标志,我现在该如何去获取任何子模块?

此外,如何将递归标志设置为未来克隆的默认值?

【问题讨论】:

    标签: git version-control git-submodules git-clone


    【解决方案1】:

    你可以在一个简单的顶级克隆之后这样做:

    git submodule update --init --recursive
    

    我不建议让克隆默认这样做。如果您正在积极地使用子模块进行开发,而不仅仅是链接到 github 上的第 3 方 OSS 库,那么正确的方法是使用 git slavesubtree

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:
      1. 从你的 repo 的根目录:

        $ git submodule update --init --recursive
        

        这将更新所有已注册的子模块,如果需要将它们初始化为 .gitmodules 文件中的值,并且还递归到复杂的子模块(具有自己的子模块的子模块)并初始化和更新它们。

      2. 我知道的最简单的递归克隆方法是使用别名隐藏git clone

        $ git config --global alias.clone = 'clone --recursive'
        

        至于总是添加选项,我认为这是惯用的方法。

      【讨论】:

      • 我建议不要隐藏“克隆”命令,而是添加一个变体命令$ git config --global alias.cloner = 'clone --recursive'
      • 你们俩都需要去掉=标记:git config --global alias.clone 'clone --recursive'
      • 注意:这个答案完全错误。 git 不会让你“隐藏别名”现有的 git 命令。 alias.clone 将被完全忽略。
      【解决方案3】:

      IIRC, git submodule init, git submodule update

      不幸的是,我没有看到默认启用递归的选项。

      【讨论】:

      • 您总是可以创建一个执行递归克隆的 shell 或 git 别名。但是,在这里分两步执行此操作似乎更难,但这样您可以在配置文件中更改子模块存储库的 url 在init 之后但在update 之前。您需要为一些已使用私有存储库的 url 设置子模块的存储库执行此操作,并且您需要将这些更改为公共 url。
      【解决方案4】:

      看来您不能用别名“clone”覆盖“clone”,所以它是一个新别名(Abizern 的解决方案)或“--recursive”。

      Is it possible to override git command by git alias?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-27
        • 2012-09-12
        • 2017-07-18
        • 2014-04-23
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多