美文网首页
git submodule

git submodule

作者: 不进则退 | 来源:发表于2022-03-31 22:00 被阅读0次

使用前提

当你在一个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分支。

三、如果子仓库有更新了,可以直接进入到子仓库,使用git pull更新子仓库

相关文章

网友评论

      本文标题:git submodule

      本文链接:https://www.haomeiwen.com/subject/mmjnjrtx.html