# 為什么選擇 Git
雖然市場上有幾十種不同的版本控制系統,一些世界上最著名的項目(例如 Linux 內核, Ruby on Rails,或是jQuery)都選擇了使用 Git 作為它們的版本控制系統。為什么它們都選擇 Git 呢?
## 節省時間
Git 運行快速。盡管我們在這里討論的只是運行一個命令所需要的幾秒鐘,但是把它累積在你的日常工作中就是一個不小的飛躍了。它可以節省那些不必要的等待時間,并且去完成其它一些有意義的工作。
## 離線工作
當你不能聯機遠程中央倉庫時你該怎么工作呢?對于一個像 Subversion 或者 CVS 的集中式版本控制系統來說,如果你沒有連接到中央倉庫,你就不能很好的工作。如果使用 Git ,幾乎所有的東西都可以簡單地在你的本地機器上完成。例如進行提交,查看你的項目歷史,合并或者創建分支等等。至于在哪里工作?什么時候工作? Git 不會給你施加任何限制。
## 撤銷錯誤操作
每個人都會犯錯,而使用 Git 的最大好處就在于,幾乎在所有的情況下你都能 “撤消” 你的錯誤操作。比如如果你忘記了把一個小小的改動包含進來,因此你要改正你的上個提交。又或者你想要撤銷一個完整的提交,因為這個功能有可能是不必要的。當發生了很嚴重的錯誤時,你甚至可以通過恢復引用日志來讓一個提交不可見。你可以放心,Git 幾乎很少真正地刪除數據。
## 可靠性高
不用擔憂,你不會在 Git 中搞砸任何東西,這種感覺是不是非常好?在你的 Git 項目中的每一個團隊成員都克隆了整個項目在他們的本地計算機,這個本地克隆也可以看作一個完整的項目備份。除此之外, Git 上的操作幾乎都是進行數據添加,幾乎從不刪除數據。這意味著丟失數據或是倉庫損壞的情況幾乎不可能發生。
## 讓提交更有意義
只有包含了相關的改動的提交才有意義。想象一下,如果一個提交中包括一個新添加的功能 A ,還包括功能 B 的一部分改動,并且還存在一個對錯誤 C 的修復。這樣其他的團隊成員就很難理解這個提交的意圖,而且當其中的一個改動出現了錯誤,撤銷起來也非常麻煩。利用它獨一無二的 “暫存區(staging area)” 概念,Git 可以幫助你打造很細微和精準的提交。你可以準確地判斷哪些更改將被包含在你的下一個提交中,即使只是一行改動。Git 真正提高了對版本控制的實用性。
## 更高的自由度
當使用 Git 工作時,你可以定義一個對項目和團隊有意義的工作流程。使用 Git 也不需要其它的要求。你可以連接多個遠程倉庫,使用 rebase 來替代合并,或者在需要時可以使用子模塊。當然,你也可以簡單地像 Subversion 那樣僅僅使用一個遠程的集中式倉庫。無論你使用什么樣的工作流程,它都有各種各樣的優點。
## 避免混亂
關注點分離可以更明確地了解事情的進程。當你工作在功能 A 上時,不應該有任何人受到你未完成的代碼的影響。如果那個功能是完全沒有必要的話呢?或是完成了對它的一些改動提交后,你注意到你完全錯了呢?分支功能就可以解決這些問題。當然其他版本控制系統也都有分支,但是 Git 真正的把它改進地更快速,更簡單了。
## 順應潮流
聰明的開發人員應該順應潮流。Git 正在被越來越多的知名公司和開源項目所使用,如 Ruby On Rails,jQuery,Perl,Debian,Linux 內核等等。擁有一個大型的用戶群體是一個很大優勢,因為往往會存在很多系統去推動他的發展。大量的教程,工具和服務,這讓Git更加具有吸引力。
- Learn Version Control with Git 中文版
- 前言
- Part 1 - 基礎知識
- 什么是版本控制?
- 為什么要使用版本控制系統?
- 準備工作
- 版本控制的基本工作流程
- 從一個未被納入版本控制的項目開始
- 從一個已被納入版本控制的項目開始
- 工作在你的項目上
- Part 2 - 分支與合并
- 分支可以改變你的生命
- 在分支上工作
- 暫時保存更改
- 切換一個本地分支
- 合并改動
- 分支的工作流程
- Part 3 - 遠程倉庫
- 關于遠程倉庫
- 連接一個遠程倉庫
- 查看遠程數據
- 整合遠程的改動
- 發布一個本地分支
- 刪除分支
- Part 4 - 高級應用
- 撤銷操作
- 用 diff 來檢查改動
- 處理合并沖突
- Rebase 代替合并
- 子模塊
- git-flow 的工作流程
- 使用 SSH 公鑰驗證
- Part 5 - 工具與服務
- 桌面應用程序
- 比較和整合工具
- 代碼托管服務
- 更多學習資源
- 附錄
- 版本控制的最佳實踐
- 命令 101
- 從 Subversion 過渡到 Git
- 為什么選擇 Git