我 正在 使用 .gitmodules 文件 为 我 的 主 存储 库 指定 一 个 git 子 模块 :
.gitmodules
[submodule "SUBMODULE"] path = ... url = ...
中 的 每 一 个然后 在 命令 行 中 :git clone MAINREPO --recursive .是否 可以 在 克隆 命令 * * 中 指定 要 检出 * * 子 模块 的 哪个 提交 ?
git clone MAINREPO --recursive
4uqofj5v1#
您问题的简短答案是:不可能。信息被写在超级项目的提交中,它存储了关于子模块更改的信息。每次运行一个
git clone --recursive superproject-url
或
git checkout --recursive some-old-commit
Git会在HEAD中查找子模块的提交,或者查找被 checkout 的旧提交,并 checkout 已存储的子模块提交。如果要更改HEAD中存储的提交内容:转到本地克隆的子模块, checkout 提交,返回到超级项目,添加并提交子模块中的更改,推送:
cd subdir git checkout branch-tag-or-ID cd .. # back to the superproject git add subdir git commit -m "Change in subdir" subdir
如果要更改到的子模块中的提交是HEAD,则可以在超级项目中执行
git submodule update --remote subdir git commit -m "Change in subdir" subdir
除了命令行选项,你还可以(用shell脚本或git别名)使用git clone --recursive && cd subdir && git checkout commit-ID。这是唯一的方法。
git clone --recursive && cd subdir && git checkout commit-ID
# .gitconfig [alias] clone-sub = "!f() { git clone --recursive \"$1\" && cd \"$2\" && git checkout \"$3\"; }; f"
用法:git clone-sub superproject-url submodule-path commit-ID
git clone-sub superproject-url submodule-path commit-ID
1条答案
按热度按时间4uqofj5v1#
您问题的简短答案是:不可能。信息被写在超级项目的提交中,它存储了关于子模块更改的信息。每次运行一个
或
Git会在HEAD中查找子模块的提交,或者查找被 checkout 的旧提交,并 checkout 已存储的子模块提交。
如果要更改HEAD中存储的提交内容:转到本地克隆的子模块, checkout 提交,返回到超级项目,添加并提交子模块中的更改,推送:
如果要更改到的子模块中的提交是HEAD,则可以在超级项目中执行
除了命令行选项,你还可以(用shell脚本或git别名)使用
git clone --recursive && cd subdir && git checkout commit-ID
。这是唯一的方法。用法:
git clone-sub superproject-url submodule-path commit-ID