Git 是什么
Git 是一種分布式版本控制系統(tǒng)唐断。每個(gè)團(tuán)隊(duì)成員在本地都有一份整個(gè)代碼倉庫的鏡像盟榴。
為什么用 Git
- 節(jié)省時(shí)間:Git 命令運(yùn)行快速
- 離線工作:即使沒有網(wǎng)絡(luò)或是遠(yuǎn)程服務(wù)器宕機(jī)究孕,也可以在本地進(jìn)行幾乎所有的操作
- 撤銷錯(cuò)誤操作:改正上一個(gè)提交史辙,撤銷一個(gè)完整的提交...
- 可靠性高:每個(gè)成員都有一個(gè)鏡像份氧,意味著丟失數(shù)據(jù)貨倉庫損壞的概率很低
- 更高的自由度:強(qiáng)大的分支功能亮航,打造合適的工作流
- 順應(yīng)潮流:看看有多少知名的開源項(xiàng)目使用 Git 就知道了
Git 基本工作流程
- 更改本地倉庫中的某個(gè)文件
- 使用
git add
命令將改動(dòng)照添加到暫存區(qū) - 使用
git commit
命令提交改動(dòng) - 使用
git push
命令將改動(dòng)提交到遠(yuǎn)端倉庫
更多的操作參考:
工具和服務(wù)
- 桌面應(yīng)用程序
- Tower
- SourceTree(免費(fèi),推薦)
- 比較工具
- Xcode 自帶了簡單的比較工具
- Kaleidoscope
- 代碼托管服務(wù)
工作流
基于 Git 強(qiáng)大的分支特性,可以靈活的打造工作流惭载。比如 Atlassian Git Tutorial 的 Comparing Workflows 章節(jié)中提到的以下四種:
- Centralized Workflow
- Feature Branch Workflow
- Gitflow Workflow
- Forking Workflow
每一種工作流都有對(duì)應(yīng)適合的使用場景旱函。每個(gè)團(tuán)隊(duì)商定一個(gè)統(tǒng)一的工作流是至關(guān)重要的,可以自己定義一個(gè)完全適合自己項(xiàng)目的工作流描滔,或者使用一個(gè)別人定義好的棒妨。在我以往所待過的團(tuán)隊(duì)中都默認(rèn)使用了一個(gè)當(dāng)前流行的工作流 git-flow。
實(shí)際開發(fā)過程中流程可能如下:
- 初始化得到預(yù)設(shè)的 master 和 develop 分支
- 從 develop 分支開 feature 分支開發(fā)新功能含长,完成后合并到 develop 分支
- 功能點(diǎn)都開發(fā)完并經(jīng)過測試后券腔,從 develop 分支上開 release 分支,主要用來做最后的檢查拘泞。等準(zhǔn)備好上架后纷纫,再合并到 master 和 develop,并打上 tag
- 從 master 分支上打包提交到 App Store
- 如果發(fā)現(xiàn) master 上的版本有 bug陪腌,從 master 開 hotfix 分支论泛,修復(fù)后再合并到 master 和 develop
SourceTree 也已對(duì)這種工作流提供了支持现恼。
最佳實(shí)踐
- 正確使用 .gitignore 文件篮奄,避免提交不必要的文件到代碼倉庫兔综,可參考這里燕刻。
- 提交前充分測試自己的改動(dòng)只泼,這當(dāng)然是最基本的。
- 每次提交粒度要小卵洗,比如一個(gè)提交只修復(fù)一個(gè)問題请唱,或完成一個(gè)小功能。對(duì)于非常復(fù)雜的新功能过蹂,應(yīng)該將其分割成多個(gè)有意義的邏輯模塊來進(jìn)行提交十绑。精簡的提交可以讓其他的開發(fā)團(tuán)隊(duì)人員更簡單地明白其改動(dòng)的用義。
- 頻繁地提交改動(dòng)酷勺,便于其他成員共享你的改動(dòng)本橙,減少整合代碼時(shí)的沖突。
- 提交信息(commit message)規(guī)范化脆诉,加快 code review 進(jìn)度甚亭,便于編寫 release note,便于以后快速回憶起每個(gè)提交的變化击胜。另可參考這里亏狰。
- 第一行作為標(biāo)題,用少于 50 個(gè)字符來簡短說明偶摔。
- 在一個(gè)空白分割行后要對(duì)改動(dòng)做一個(gè)詳細(xì)的描述暇唾,比如為什么要進(jìn)行這次修改,具體改動(dòng)了什么。
- 一定要使用現(xiàn)在時(shí)祈使句策州,動(dòng)詞要用比如 fix瘸味,add,change抽活,而不是 fixed硫戈,added,changed下硕。
- 靈活使用分支功能丁逝,比如添加新功能,修復(fù)錯(cuò)誤梭姓,嘗試新的想法等等都可以新開一個(gè)分支進(jìn)行霜幼。
- 遵循一個(gè)工作流程,可根據(jù)項(xiàng)目開發(fā)的類型誉尖,部署模式和團(tuán)隊(duì)成員的個(gè)人習(xí)慣等罪既,商定一個(gè)工作流并一直遵循它。