1. 程式人生 > >Git分布式工作流程

Git分布式工作流程

TP 朋友 開發 -s 出差 server 管理者 分離 check

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分布式工作流程