您的位置:首页 > 其它

使用submodule的正确姿势

2018-01-31 19:22 465 查看
1.submodule的基本使用方法
1.假如完整的工程目录如下:



说明:目录很简单,就是一个主工程MainProj,包含了别人写的一个子模块SubModule



2. 然后在另一台电脑上开始clone工程
mkdir mj
cd mj
git init
git submodule add https://gitee.com/jianan/MainProj.git
这行执行完后,本以为,所有的目录应该下来了,此时查看下目录结构:



SubModule这个子模块内容竟然没有被拉取下来?这是为什么呢? 这就涉及到子模块的更新问题,执行这个git submodule update --init,子模块才会跟着更新。
2.删除submodule的正确姿势
删除submodule
git rm SubModule 
对,只需要这一句话


此时查看下工作目录:


嗯...SubModule已经被我们干掉了,很干净...

后记:之前查资料说的SubModule的删除很麻烦,现在git版本,其实就这一句话,很简单。所以看到的都是假的,只有自己亲自实践了,那才是真的,越来越喜欢git了
3.最佳实践来了拉取别人的工程:
mkdir mj
cd mj
git init
git submodule add http://XXX/project.git git submodule add http://YYY.git git submodule add http://ZZZ.git git submodule foreach --recursive git submodule update --init --recursive
 配置如下快捷键:alias gsfl="sudo git submodule foreach git pull"
alias gsfp="sudo git submodule foreach --recursive git push"
alias gsfs="sudo git submodule foreach --recursive git status"
alias gsfr="sudo git submodule foreach --recursive"
alias gsfb="sudo git submodule foreach --recursive git branch" 以后操作的话,
1.每次打开电脑第一步,执行gsfl进行拉取,然后子模块之类的,都会更新了
2.切换分支的话,就gsfr git checkout master,这样所有的分支都会切换,从而避免子模块在游离commit上
华丽分割线(一点对git的思考)经过一些拉取之后,所有目录内容都下来了。如果此时在SubModule下面增加个文件1.txt,那么此时:
cd MainProj
gst
提示在SubModule下面有untracked content的内容,
git add
gst
我擦,发现咋什么都没add进来,这是为什么呢?懵逼了
解惑:
这是因为:
对于git来说,SubModule这个文件的hash值并没有变化,所以,是不能被add的,只是SubModule里面有未被追踪的文件而已,所以,要想查看这个修改,必须:
方法1: :
cd SubModue
gst
方法2(熟读最佳实践圣经后...):
gsfs

然后,就是最熟悉的操作了:
git add   
git commit
git push
所以,上面的最佳实践,就是一年的总结.

-----20180309-----再次理解submodule1.需要明白,子模块和父模块的关系的保持全部在于hash值
2.new commits产生的原因是:当clone下来工程后,假如某个子模块所在的分支是branch1, 前服务器上记录了一个hash值 hash1; 这个时候,你切换到master上,此时,又是一个hash值,如果此时这个hash值和之前那个hash1不相同,就会提示new commits.   你不管是:git status查看状态,发现是clean干净的。还是用stash恢复,都没用也恢复不了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: