Git Submodule 是一种功能,可以将一个 Git 仓库作为另一个 Git 仓库的子模块集成在其中
由于每次使用Git Submodule时都要进行搜索,所以将各个命令及其意思整理在一起。
如果您想了解Git Submodule的概述并找到了这篇文章,那么请查看Git submodule的基础知识,它非常清晰明了。
参考文献请参照以下链接:https://git-scm.com/docs/git-submodule/2.36.0
添加
.gitmodulesに新しいサブモジュールを追加する。
デフォルトで後述するinitも同時に行われる。
命令的基本形式如下。
git submodule add <repository> [<path>]
初始化
.gitmodulesに書かれたサブモジュールを.git/configに登録する。
.git/configを変更するコマンドなので、ローカルリポジトリごとに行う必要がある。
以下是命令的基本形式。
git submodule init [<path>…]
更新
.git/config に登録されたサブモジュールをチェックアウトする。
どのコミットがチェックアウトされるかは git ls-tree […]で確認できる。
E.g. git ls-tree main mySubmoduleA
現在チェックアウトされているコミットはgit submodule statusで確認できる。
もちろん、サブモジュール内で git log -n 1をしてもよい。
updateは.git/config に基づいて実行されるので、予めinitを行っておく必要がある。
–initオプションを付けると、updateの実行前にinitをやってくれて便利。
updateを行うと、.git/modules/が作成あるいは更新される。
中にはサブモジュール用の.gitフォルダが入っている。
基本命令的形式如下所示。
git submodule update --init [<path>…]
销毁
.git/configのサブモジュールの登録を削除する。
リポジトリからサブモジュールを削除するわけではない。
よって.git/modules/の中身は削除されない。
删除子模块
要删除子模块,可以像删除普通文件一样使用git rm。
git rm <submodule-path>
需要根据需要手动清除垃圾,例如,如果想要在相同的路径下重新添加子模块,这样才能避免在.git文件夹下留下垃圾。
参考:[git] 关于删除和重新添加子模块的说明
要完全从本地存储库中删除子模块,请执行以下命令。
git submodule deinit <path>
git rm <path>
rm -rf .git/modules/<path>
在执行deinit之前不小心删除了子模块。
如果在执行deinit之前使用git rm或git revert删除了子模块,那么deinit将无法成功进行。
要删除本地存储库中子模块的痕迹,需要手动执行deinit所做的操作。
可以通过打开文本编辑器并删除对应的[submodule “”]条目来具体进行操作。