使用前提
当你在一个Git 项目上工作时,你需要在其中使用另外一个Git 项目。
也许它是一个第三方开发的Git 库或者是你独立开发和并在多个父项目中使用的。
这个情况下一个常见的问题产生了:你想将两个项目单独处理但是又需要在其中一个中使用另外一个。
在Git 中你可以用子模块submodule来管理这些项目,submodule允许你将一个Git 仓库当作另外一个Git 仓库的子目录。
这允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。
一、添加git管理的子模块到你的主项目中
例如:将远程项目git@github.com:username/MainProject.git
克隆到当前项目目录。
首先进入到当前目录下:
cd MainProject
然后:
git submodule add git@github.com:username/MainProject.git
此时就会在当前目录下有一个目录MainProject
;
注意:如果你指定将子仓库放到主目录的某个文件夹dirName
下,则需要:
git submodule add git@github.com:username/subProject.git dirName
此时你会发现你已经把subProject项目clone到subProject文件夹下面。
当添加子模块后运行git status
, 可以看到目录有增加1个文件.gitmodules, 这个文件用来保存子模块的信息。
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitmodules
new file: subProject
然后执行以下命令,将文件push到远程仓库
git add .
git push
二、clone一个带有子项目或者第三方库的项目代码时:
首先clone主项目;
然后
git submodule init
git submodule update
此时我们进入到子仓库,查看子仓库分支,发现是默认git submodule update并不会将submodule切到任何branch,所以,默认下submodule的HEAD是处于游离状态的(‘detached HEAD’ state)。
所以在修改前,记得一定要用git checkout main
将当前的submodule分支切换到main分支。
网友评论