是否可以指定哪些提交要用git子模块克隆?

zynd9foi  于 2022-11-20  发布在  Git
关注(0)|答案(1)|浏览(163)

我 正在 使用 .gitmodules 文件 为 我 的 主 存储 库 指定 一 个 git 子 模块 :

[submodule "SUBMODULE"]
    path = ...
    url = ...

中 的 每 一 个
然后 在 命令 行 中 :git clone MAINREPO --recursive .
是否 可以 在 克隆 命令 * * 中 指定 要 检出 * * 子 模块 的 哪个 提交 ?

4uqofj5v

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。这是唯一的方法。

# .gitconfig
[alias]
clone-sub = "!f() { git clone --recursive \"$1\" && cd \"$2\" && git checkout \"$3\"; }; f"

用法:git clone-sub superproject-url submodule-path commit-ID

相关问题