关于gitFlow的一些总结

关于gitFlow的一些总结

什么是submodule,主要的目的就是,希望将多个独立的项目,或者是第三方的项目嵌入到一个项目中进行统一的管理。抱着试试的态度,发现,还挺好玩的。

如果说要总结gitFlow的原理,这个说上半天我倒也说不明白,按照经验整理了以下步骤,算是看了就明白了吧。

步骤

1.创建一个项目
2.拉代码
  	git clone https://git.net/yuanshi/body.git
3.本地库添加leg
	git submodule add https://git.net/gaofeifps/leg.git

执行submodule后会自动生成一个.gitmodules的文件,这个配置文件可以忽略,不上传至项目中。

关于如何commit与push
查过资料后,发现直接cd去对应的目录就行了(主要是路径的问题,其他的和git pull与push没有差别)

clone有submodule的项目
如果要clone一个附带submodule的项目,submodule文件不会自动随父项目clone出来(其实只会clone出 .gitsubmodle 这个描述文件),通俗的说,如果一个项目带有submodule,即使你clone出来了也看不出什么效果,这时候应该怎么做呢?

 用来初始化本地配置文件
 git submodule init
  从该项目中抓取所有数据并检出父项目中列出的合适的提交(指定的提交)。
 git submodule update
 (以上两条命令也可以合并成一条组合命令:git submodule update --init --recursive)

------------------更好的方式---------------------
clone 父仓库的时候加上 --recursive,会自动初始化并更新仓库中的每一个子模块
git clone --recursive https://gitee.com/mm/SubModule_Test.git
更新submodule
父仓库目录git pull,立即执行git status
去观察子项目是否有更改,如果发现submodule有修改,那么需要执行
git submodule update --remote

在主仓库下执行git submodule update --remote、不加 --remote 会切换到 .submodule 里记录的 SHA1 所在的 commit 节点
更复杂一些,如果你的submodule又依赖了submodule,那么很可能你需要在git pull 和 git submodule update之后,再分别到每个submodule中再执行一次git submodule update,
这里可以使用 git submodule foreach命令来实现:
git submodule foreach git submodule update

修改Submodule
有些时候你需要对submodule做一些修改,很常见的做法就是切到submodule的目录,然后做修改,然后commit和push。

这里的坑在于,默认git submodule update并不会将submodule切到任何branch,
所以,默认下submodule的HEAD是处于游离状态的(‘detached HEAD’ state)。

所以在修改前,记得一定要用
git checkout master

如果你不慎忘记切换到master分支,又做了提交,可以用cherry-pick命令挽救。具体做法如下:

1.用 git checkout master 将HEAD从游离状态切换到 master 分支, 这时候,git会报Warning说有一个提交没有在branch上,记住这个提交的change-id(假如change-id为 aaaa)
2.用 git cherry-pick aaaa 来将刚刚的提交作用在master分支上
3.用 git push 将更新提交到远程版本库中

删除子仓库

1.删除.gitsubmodule里相关部分
2.删除.git/config 文件里相关字段
3.删除子仓库目录。
git rm --cached <本地路径>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章