学习地址: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