fra*_*ans 7 git git-pull git-config git-checkout git-submodules
StackOverflow 上提出了很多关于自动更新子模块的问题,包括:
git checkout自动执行git submodule update --recursive?但在我看来,对于 git 子模块,还没有单一的方法可以像svn up关于 svn-externals 一样工作。
所以既然git每天都在变化,我又敢再问:
有没有一种(方便的)方法来初始化和自动更新checkout 和 pull(即merge和rebase)的子模块检出(即与其相应的子模块提交 ID 保持同步)?
目前我有两种方法:
#1: 创建一个post-checkout,post-merge并post-rewrite钩住以下内容
#!/bin/sh
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
正如您已经看到的那样,这种方法有几个缺点:
#2: 为pulland配置别名checkout
git config --global alias.up 'pull --recurse-submodules'
git config --global alias.co 'checkout --recurse-submodules'
Run Code Online (Sandbox Code Playgroud)
但这也不好:
--init是子模块(可以通过运行pull/checkout和submodule update分开来解决)up/co而不是pull/checkout如果你可以做一些类似的事情,这种方法会更像我想要的
git config --global pull.recurseSubmodules true
git config --global pull.initSubmodules true
git config --global checkout.recurseSubmodules true
git config --global checkout.initSubmodules true
Run Code Online (Sandbox Code Playgroud)
.. 但你不能,是吗?
从Git 2.13开始,您可以git checkout --recurse-submodules <ref>这样做,以确保活动子模块的工作树与超级项目中记录的子模块提交同步<ref>。
从Git 2.14开始,您可以执行git pull --recurse-submodules,这将执行正常的拉取,然后调用git submodule update --init --recursive(--rebase如果您用 拉取--rebase),保持活动子模块工作树与超级项目中记录的子模块提交同步。
从Git 2.15开始,设置git config submodule.recurse true将使其成为所有接受该--recurse-submodules标志的命令的默认行为,除了clone和ls-files。
如果不更改配置或使用这些选项,则无法将此行为设置为默认行为。
请注意,在Git 2.27git checkout --recurse-submodules <branch>之前,当前分支没有子模块且<branch>已初始化嵌套子模块时执行的操作会失败。
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |