# 为什么选择 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