關於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 <本地路徑>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章