经常有这样的事情,当你在一个项目上工作时,你需要在其中使用另外一个项目。也许它是一个第三方开发的库或者是你独立开发和并在多个父项目中使用的。这个场景下一个常见的问题产生了:你想将两个项目单独处理但是又需要在其中一个中使用另外一个。
Git 通过子模块处理这个问题。子模块允许你将一个 Git仓库当作另外一个Git仓库的子目录。这允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。
1 | $ git submodule add <url> <path> |
例如
1 | $ git submodule add git://github.com/chneukirchen/rack.git rack |
你将会注意到有一个.gitmodules文件。这是一个配置文件,保存了项目的本地子目录。如果你有多个子模块,这个文件里会有多个条目。很重要的一点是这个文件跟其他文件一样也是处于版本控制之下的,就像你的.gitignore文件一样。它跟项目里的其他文件一样可以被推送和拉取。这是其他克隆此项目的人获知子模块项目来源的途径。
1 | $ git submodule |
1 | $ git submodule init |
只在首次检出仓库时运行一次就行
1 | $ git submodule update |
每次更新或切换分支后都需要运行一下
这一步比较麻烦,只是简单rm的话,可能会出现难以定位的bug
1 | $ git rm --cached [path] |