经常有这样的事情,当你在一个项目上工作时,你需要在其中使用另外一个项目。也许它是一个第三方开发的库或者是你独立开发和并在多个父项目中使用的。这个场景下一个常见的问题产生了:你想将两个项目单独处理但是又需要在其中一个中使用另外一个。

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. 删除暂存的子模块路径
1
$ git rm --cached [path]
  1. 编辑.gitmodules文件,将子模块的相关配置节点删除掉;
  2. 编辑.git/config文件,将子模块的相关配置节点删除掉;
  3. 手动删除子模块残留的目录。

Comments