学习地址:http://www.kafeitu.me/git/2012/03/27/git-submodule.html
文章内全是命令,我对应照着做了下,并上了图方便理解。
一、我们切换到桌面执行mkdir -p submd/repos
这里 mkdir
带上 -p
就是递归创建目录
的意思,即桌面上是没有submd
和repos
这两个文件夹的,执行命令后会创建这两个文件夹,如图

二、
cd ~/submd/repos
git --git-dir=lib1.git init --bare
git --git-dir=lib2.git init --bare
git --git-dir=project1.git init --bare
git --git-dir=project2.git init --bare
执行命令git --git-dir=lib1.git init --bare
后,

剩余三条命令

三、
mkdir ~/submd/ws
cd ~/submd/ws
这里我是手动创建的,然后从这个创建的ws
文件夹启动

实践证明原文还是不对,有些地方不对
这里 我们执行
git clone ../repos/project1.git
执行效果可以看到是从之前的
repos
文件夹中clone
了project1

然后执行echo "project1" > project-infos.txt
生成了一个文件

然后我们就提交代码到仓库了,只不过这个关联的仓库不像我们日常开发中的公司的gitlab而是本地的一个仓库
我们就不像原文中那样敲命令行,我们使用
Sourcetree
已经提交成功

三、重复工作,切换到submd/ws
我们处理proj2
git clone ../repos/project2.git
cd project2
echo "project2" > project-infos.txt

然后我们提交

四、类似 的执行
git clone ../repos/lib1.git
cd lib1
echo "I'm lib1." > lib1-features
cd ../
git clone ../repos/lib2.git
cd lib2
decho "I'm lib2." > lib2-features
最后的效果


最近的效果是这样的

操作了这么多实际 上看起来有点复杂,其实也就是创建了四个仓库,而这四个仓库关联的是本地的repos里的四个仓库
四、为project1添加lib1和lib2
老实说,我看到了这个

算了,还是先跟着原文走一下吧,懂了原理再来操作Sourcetree
切换到目录project1
cd ../project1
然后
git submodule add ~/submd/repos/lib1.git libs/lib1
然后文件夹变了,多了两个东西

再执行
git submodule add ~/submd/repos/lib2.git libs/lib2

可以看到此时仓库有三处变更

至少貌似就差提交,就完成了子模块的添加 ,接下来我再从Sourcetree上来添加试试
这里我直接重置刚才用命令提交的子模块,为了明晚接着练习,我得备份一下,这里

并且我们还得存下.gitmodules里的的内容,可参考 里面,关于路径 的写法

然后我们直接右键 添加子模块

这里我们选择这个资源路径,很奇怪这里居然是个省字,看来Sourcetree的汉字没处理好啊

接着我们来添加这个本地路径 ,手动新建好两个目录


接着来lib2
创建文件夹

加入子模块

可以看到现在的效果和用命令行的效果是一样的

对比之前用命令行创建的.gitsubmoduel文件内容发现,是一样的

原文已看到,### 2.3 修改Submodule
网友评论