Git分布式工作流程
Git官網給出了三種分布式工作流程:
- 集中式工作流程
- 集成管理者工作流
- 司令官與副官工作流
這裏以私有gitserver服務器上的git-test項目為例,簡單說明集中式工作流程。
基於分支的開發策略
分支簡介
參考Git Pro
使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。
使用Git開發的過程中,鼓勵使用分支進行叠代開發,分支的創建、刪除、合並非常簡單,任何主題(新特性,bug,test,idea...)都可以在單獨的分支上存在。
本地分支策略
參考Git Pro
Git管理的項目,有一個默認分支master,可以理解為項目的主分支,其他分支可以根據需要創建。
一般來說,master分支只負責版本發布,實際開發過程在類似於dev分支或develop的分支上完成。而每個新特性或每次叠代都在各自獨立的分支上開發,最後合並到dev分支。
從服務器克隆項目
cd <work dir>
git clone git@gitserver:/git/git-test
cd git-test
設置跟蹤分支並拉取內容
從遠程克隆的項目只有master分支的內容,本地master分支默認跟蹤遠程的master分支,即origin/master。而本地dev分支跟蹤遠程dev分支需要手動設置。可以使用以下方式:
git checkout --track origin/dev
或
git checkout -b dev origin/dev
這樣以來,本地dev分支和origin/dev就建立了聯系,可以直接push或pull,可以用git branch -vv
本地開發
為了降低開發復雜度,強烈建議本地開發使用分支,每個新特性和叠代都可以建立新的分支,完成後合並到本地dev分支。
同步倉庫
註意:
只能推送本地dev分支到遠程dev分支,master分支只用於版本發布,可以定期從服務器拉取master分支以同步倉庫內容。
由於是分布式開發,推送前一定要將其他人提交到庫的內容合並到本地,這也可以避免推送時的沖突。有兩種合並方式,一種是使用pull命令,一種是先fetch然後合並,pull直接合並遠程分支的內容到本地,有一定的風險,推薦使用第二種。
fetch
git fetch origin
該命令會拉取origin的所有分支到本地,可以通過一個特殊的名字FETCH_HEAD來顯示遠程和本地的差異:
git log -p HEAD..FETCH_HEAD
也可以
git diff dev origin/dev
該命令會顯示遠程倉庫內最新的內容,合並遠程dev分支到本地可以使用merge。
merge
git checkout dev
git merge origin/dev
解決合並沖突可以參考Git Pro。
rebase可以避免將開發的細節過程推送到服務器,提交信息顯得比較清爽幹凈。但是,rebase只可以用於本地的分支合並,不要對在你的倉庫外有副本的分支執行變基。這樣會使其他人強制rebase自己的分支,最終會導致很多問題。
如果你遵循這條金科玉律,就不會出差錯。 否則,人民群眾會仇恨你,你的朋友和家人也會嘲笑你,唾棄你。
更多內容可以參考Git Pro的變基部分。
推送dev分支
git push origin dev
Git分布式工作流程