Git 以其開(kāi)源、簡(jiǎn)單乃摹、快捷云茸、分布式、高效等特點(diǎn)成為當(dāng)前最流行的源代碼管理工具, 我們來(lái)通過(guò)以下三張圖來(lái)認(rèn)識(shí)一下Git及其在項(xiàng)目中使用思路妹萨。
分布式
Git作為分布式版本控制系統(tǒng)的代表年枕,客戶端并不僅僅獲得最新版本的文件快照,而是把原始的代碼倉(cāng)庫(kù)完整地鏡像下來(lái)乎完。
這樣一來(lái)熏兄,Git在本地磁盤(pán)上就保存著所有有關(guān)當(dāng)前項(xiàng)目的歷史更新,并且Git中的絕大多數(shù)操作都只需要訪問(wèn)本地文件和資源,不用連網(wǎng)摩桶,開(kāi)發(fā)者都可以非常輕快地頻繁提交更新桥状,等到了有網(wǎng)絡(luò)的時(shí)候再上傳到遠(yuǎn)程的鏡像倉(cāng)庫(kù)。用SVN/CVS等集中式管理工具硝清,沒(méi)有網(wǎng)絡(luò)開(kāi)發(fā)者就無(wú)法做任何事情辅斟,或者很難。
Git 常見(jiàn)命令
Git系統(tǒng)中分本地和遠(yuǎn)程倉(cāng)庫(kù)(remote repository)芦拿。
其中本地分三個(gè)區(qū)士飒,工作區(qū)(workspace)、暫存區(qū)(index)和本地倉(cāng)庫(kù)(local repository蔗崎。這就是為什么沒(méi)有網(wǎng)絡(luò)我們依然可以提交代碼更新(commit)酵幕,因?yàn)樘峤粌H是提交到本地倉(cāng)庫(kù),待有網(wǎng)絡(luò)之后可以再推送(push)到遠(yuǎn)程倉(cāng)庫(kù)缓苛。
而遠(yuǎn)程倉(cāng)庫(kù)(remote repository)永遠(yuǎn)為我們保存一份代碼拷貝芳撒。
git fetch VS git pull
git fetch是將遠(yuǎn)程倉(cāng)庫(kù)的更新獲取到本地倉(cāng)庫(kù),不影響其他區(qū)域他嫡。
git pull則是一次性將遠(yuǎn)程倉(cāng)庫(kù)的代碼更新到工作區(qū)(同時(shí)也會(huì)更新本地倉(cāng)庫(kù))番官。
Git Flow
在熟悉了Git的常用命令以后,我們來(lái)看看如果在真實(shí)的項(xiàng)目開(kāi)發(fā)中如何使用Git钢属。
一般而言徘熔,軟件開(kāi)發(fā)模型有常見(jiàn)的瀑布模型、迭代開(kāi)發(fā)模型淆党、以及互聯(lián)網(wǎng)公司推薦的敏捷開(kāi)發(fā)等不同的模型酷师。每種模型有各自應(yīng)用場(chǎng)景。Git Flow重點(diǎn)解決的是由于源代碼在開(kāi)發(fā)過(guò)程中的各種沖突導(dǎo)致開(kāi)發(fā)活動(dòng)混亂的問(wèn)題染乌。
feature分支 :一些功能開(kāi)發(fā)過(guò)程中使用的分支山孔,通過(guò)代碼評(píng)審和測(cè)試后可以合并回develop分支, 注意從不與master交互荷憋。
develop分支:feature以及release交互台颠。開(kāi)發(fā)者不允許直接在develop上進(jìn)行開(kāi)發(fā)。
release分支:為了發(fā)布存在勒庄,總是基于develop串前,發(fā)布以后又合并回develop。當(dāng)然對(duì)應(yīng)的tag跑到master這邊去了实蔽。
hotfix分支:基于master荡碾,并最后合并到master和develop。生命周期較短局装,用了修復(fù)緊急bug或小粒度修改發(fā)布坛吁。注意養(yǎng)成清理一些不再使用的feature 和 hotfix的習(xí)慣劳殖,
master分支:僅是一些關(guān)聯(lián)的tag,不允許在master上開(kāi)發(fā)拨脉。
有興趣的可以拓展了解下GitHub Flow哆姻, 其也是基于分支的工作流,非常適合代碼部署非常頻繁的團(tuán)隊(duì)和項(xiàng)目女坑。
歡迎分享更多有意思顷锰,有知識(shí)的圖片咨堤。
更多
請(qǐng)關(guān)注豆志昂揚(yáng)微信公眾號(hào)獲取更多內(nèi)容:
- 直接添加公眾號(hào)豆志昂揚(yáng);
- 微信掃描下圖二維碼;