共計 2043 個字符,預計需要花費 6 分鐘才能閱讀完成。
Git 的研發(fā)應用場景是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Git 誕生于 2002 年,由 Linux 之父 Linus Torvalds 和他的團隊開發(fā)并不斷完善,它秉承了 Linux 的開源精神,為廣大研發(fā)團隊帶來了非常棒的版本控制體驗。下面立足 Git 的工作原理,深入探討各種研發(fā)場景中工作流等問題。
Git 工作模式
代碼提交過程
一次修改被成功提交到遠端倉庫會歷經四個階段,1 本地工作區(qū) - 2 緩存區(qū) - 3 版本庫 - 4 遠端版本庫,通過執(zhí)行相應的 Git 命令,文件在這四個區(qū)域跳轉,并呈現不同的狀態(tài):
1. 已修改(modified):包括三種文件,新增文件,被修改的文件,被刪除的文件
2. 已暫存(staged):對已修改的文件執(zhí)行 git add 或 git rm 操作,文件就變成已暫存狀態(tài),進入暫存區(qū)。暫存區(qū)實際上就是一個文件索引目錄樹,記錄了所有文件名、文件狀態(tài)信息,它已索引的方式建立了文件名和文件內容(在對象庫.git/objects 中保存)的對應關系。
3. 已提交(committed):對已暫存的文件執(zhí)行 git commit 操作,文件就變成已提交狀態(tài),進入本地版本倉庫。
4. 已上傳:對已提交的文件執(zhí)行 git push 操作,文件就變成已上傳狀態(tài),進入遠端版本倉庫。
Git 如何記錄每次提交
我們思考一下,版本控制系統(tǒng)應該如何記錄每次提交呢?正常的思維肯定是記錄“差異”(delta),也就是前后兩個版本中文件內容的不同,確實大多數版本控制系統(tǒng)是這么做的,比如我們所熟悉的 CVS,SVN。但是,Git 卻不這樣!每次提交更新時,Git 會對全部文件作一個快照(snapshot),并保存指向這次快照的索引。
這種保存方式帶來很多好處,切換版本時,直接引用指向目標版本的索引即可,不需要像差異存儲那樣,需要版本之間的 merge,速度會快很多,更重要的是,為后文所講到的輕量級分支切換提供了前提條件。
Git 分支
Git 新建分支的本質就是創(chuàng)建一個指向最后一次提交的可變指針,所以,Git 分支的創(chuàng)建不是復制版本庫的內容,僅僅是新建了一個指針,它以 40 個字符長度 SHA- 1 字串形式保存在文件中,這難以想象的輕量級就是源于“快照”保存的版本設計理念。
Git 工作流
什么是 Git 工作流?你可以理解為代碼管理的分支策略。這里從典型的 GitFlow 工作流出發(fā),配合我正在使用的代碼托管平臺 (華為軟件開發(fā)云),給大家詳細講解工作流是如何服務于項目流程管理和團隊協同開發(fā)。
?master:主線分支,版本有較強穩(wěn)定性,供生產環(huán)境部署使用,這個分支只能從其它分支合并,不能在這個分支上直接提交修改。
新建分支:
在開發(fā)云界面輸入新分支名,并選擇從哪個分支檢出即可。
?develop:主開發(fā)分支,用來集成測試最新合入的開發(fā)成果,包含要發(fā)布到下一個 Release 的代碼。
?feature:特性分支,每個特性一個分支,用于開發(fā)人員提交代碼并進行自測。一旦開發(fā)完成,我們合并回 Develop 分支進入下一個 Release。
?hotfix:補丁分支,生產環(huán)境發(fā)現新 Bug 時創(chuàng)建的臨時分支,問題驗證后,合并到 Master 和 Develop 分支,所以 Hotfix 的改動會進入下一個 Release
?release:發(fā)布分支,發(fā)布新版本時,基于 Develop 分支創(chuàng)建,發(fā)布完成后,合并到 master 和 develop 分支。
各個分支之間的關系可以從開發(fā)云的“倉庫網絡”中查看:
優(yōu)點:項目管理流程明確
缺點:相對復雜,需要同時維護兩個長期分支,不適合網站項目。
分支合并
無論哪種工作流都會涉及到分支合并(把一個分支中的修改整合到當前分支),主要有兩種方法:三方合并(merge)和衍合(rebase)。我們通過對同一種場景進行不同操作體會兩種合并方法的區(qū)別。
場景:master 分支新增了 C4 節(jié)點,hotfix 分支新增了 C3 節(jié)點,現將 hotfix 分支合并到 master 分支:
1. 三方包括 hotfix 新增節(jié)點 C3,master 新增節(jié)點 C4,以及兩者的共同祖先節(jié)點 C2。這種合并操作簡單,但新增合并節(jié)點 C5,形成了環(huán)形,版本記錄可讀性差。
a)PC 端命令操作方式:
#git checkout master
#git merge hotfix
b) 開發(fā)云平臺頁面操作:
第一步:
第二步:
2. 衍合先將 master 分支新增節(jié)點 C4 以補丁形式保存在.git/rebase 目錄中,然后同步 hotfix 分支最新代碼,再應用補丁 C4’。
#git checkout master
#git rebase hotfix
沖突解決
類型一:兩個合并分支修改了同一行代碼
解決方法:
1. 分析哪種修改方法正確,手動合并;
2. 提交修改。
類型二:文件被重命名為不同的名字
解決方法:
1. 確認哪個名字是正確的,刪除錯誤的;
2. 提交修改。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業(yè)資訊頻道,感謝您對丸趣 TV 的支持。