唱吧客戶端團隊的的Git實踐

jopen 9年前發布 | 18K 次閱讀 Git 版本控制系統

 唱吧客戶端團隊的的Git實踐

寫在前面:我對Git的理解實在有限,也無力全方位的比較SVN和Git的優缺點。只是從Git初級使用者的角度,分享一下過去一年使用Git的感受和經驗。更希望得到更多的指導和反饋,請各位讀者不吝賜教。

唱吧一直使用SVN作為SCM,在經歷了幾次絕望的merge和混亂的版本迭代后,Git作為更適合我們開發模式的SCM工具開始被提及。

使用Git作為SCM工具基于以下的考慮:

  • SVN真的太慢了,repo太大了,而且越來越糟糕
  • SVN的提交太不靈活,導致很多commit的粒度過大且不明確
  • Branching的成本實在太高,Merge的過程太痛苦
  • Git的配套工具甩開SVN一個段位,至少Mac平臺上是這樣兒

之前做IndieBros Studio這個二人團隊時,由于只有我一個工程師,Git對我來說就是單機游戲。作為推動者自己一定要盡可能把所有的情況和風險考慮清楚,并隨時充當救火隊員的角色,放好Buff是關鍵。

我們從SVN切換到Git的過程是這樣兒的:

  • 最開始一個月,我自己使用git-svn,單機玩得爽
  • 接著號召大家用git-svn一起玩,基本無效
  • 后來開始威逼利誘manager一起玩,有點效果
  • 一起玩了2個月之后,借著6.0大改版的時機,找了個VM做了個bare repo,把iOS SVN倉庫遷移了過去
  • 4個半月后,6.0 release,Android團隊進來玩
  • 1個月后,Gitlab的使用提上日程,目前正在進行中

介紹下唱吧客戶端團隊的branching model:

  • Git-flow的簡化版
  • Master分支作發布,每個release打一個tag
  • 日常開發在dev分支進行,
  • 與業務無關的重構和改進單獨開feature branch
  • 使用feature branch作code review
  • 線上問題及小版本使用hotfix分支,再merge回master和dev
  • 同一分支內,建議使用git-rebase以保持線性提交歷史
  • 使用Gitlab后,保持現有的模型并加大code review的比重;避免folk模型以保持簡單

再來看看我們遇到過的問題:

  • 本地repo丟了很多commit(事后發現是rebase掉了),后經過git-reflog找回
  • Branch model使用混亂,導致一個release缺少了一個feature branch的部分commit,重新發版
  • 本地未提交就使用了git checkout .,無力回天
  • 誤刪掉了所有remote repo,從本地重新push
  • 粒度過大的commit,commit log是Fix bugorBug fix

下面是我個人使用Git的經驗,即使在團隊內部也只是作為建議,歡迎大家討論:

  • 保持較小的提交粒度,一個提交只做一件事情
  • 提交記錄一定要明確,避免大量重復及語焉不詳
  • 多開本地分支,多使用git stash,開remote branch需要跟大家說明
  • 確保團隊所有成員對branch model有相同的理解
  • Merge feature branch時請不要使用fast forward
  • git rebase有助于保持線性的提交歷史,建議適當使用
  • 對于未提交的本地commits,可以使用rebase -i重寫提交歷史,以保證提交合適的提交粒度與清晰的提交記錄
  • 永遠不要改變已經推送到remote的提交歷史,這會給團隊造成很大麻煩(不要使用rebase及reset)
  • 慎用git-cherry-pick,但有時這是最好的選擇
  • 在本地倉庫多嘗試,只要提交過的記錄,基本就沒有任何風險
  • 遇到困難時,man git、git reflog是好幫手

Git的好處和壞處都是靈活:Git帶給我們更靈活更合理的開發模型和節奏,也帶來了更高的學習和使用成本。隨著時間的推移,好處是遞增的,成本是 遞減的,總體還是獲得了很大的效率提升。在我看來,使用Git最重要的就是搞清楚并找到最適合團隊的branching model,推薦一個我認為最好的教程:Git Tutorial from Atlassian

各位也來分享一下,你的團隊如何使用Git?

來自:http://www.iwangke.me/2015/02/08/Git-in-action-at-ChangBa/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!