-
Notifications
You must be signed in to change notification settings - Fork 3.5k
1.1 果壳中的 Git
BY houkensjtu(houkensjtu@github)
这是一篇在原文(BY atlassian)基础上演绎的译文。除非另行注明,页面上所有内容采用知识共享-署名(CC BY 2.5 AU)协议共享。
Git 是目前世界上被最广泛使用的现代软件版本管理系统。Git 本身亦是一个成熟并处于活跃开发状态的开源项目,它最初是由 Linux 操作系统内核的创造者 Linus Torvalds 在 2005 年创造。今天惊人数量的软件项目依赖 Git 进行版本管理,这些项目包括开源以及各种商业软件。Git 在职业软件开发者中拥有良好的声誉,Git 目前支持绝大多数的操作系统以及 IDE(Integrated Development Environments)。
Git 使用分散式架构,是分散式版本管理 DVCS(Distributed Version Control System)的代表。相较于例如 CVS 或者 Subversion 等集中式版本管理软件,Git 并不是将代码的所有修改历史保存在中心服务器中。在 Git 中取而代之的是,所有参与项目的开发者都拥有各自的代码完全拷贝,并在自己的拷贝上进行软件开发。
除了分散式的特点之外,Git 的设计也针对性能,安全性和柔软性作了特别优化。
Git 的底层性能相较于其他版本管理软件有强大的优势。在 Git 中所有的操作包括提交修改,创建分支,融合分支,以及求取差分都经过了性能优化。这些优化来自于 Git 的开发者对实际一般代码开发模式的深度认识和广泛知识。
不同于某些版本管理软件,Git 在决定代码修改历史以及保存形式的时候不会被文件名的变化所愚弄,Git 关注的是文件的内容本身。在实际操作中,代码文件经历频繁的再命名,分解和合并。Git 使用一种混合了差分编码(delta encoding,仅保存代码修改的差分),压缩,直接保存,以及版本元数据(version metadata objects)的管理方式。
分散式的架构也给 Git 带来了极大的性能优势。
比如说,现有一名开发成员 Alice 对代码进行了一些改动,添加了一些在2.0版本中准备公开的功能,然后将这些修改以及一份简单的说明进行了提交。随后她又增加了一些另外的新功能,并又作了一次新提交。显然这两次修改在版本历史中被分开各自进行了保存。在这之后 Alice 把代码切换到了 1.3 版本,修复了一些旧版本中的 Bug(这和她新添加的功能没有关系)。这次修复的目的是为了让团队可以在公开 2.0 版本之前,释放一个 1.3.1 版本来解决 1.3 版本中的 Bug 问题。Alice 马上又可以回到她之前进行的 2.0 版本功能开发之中(通过切换代码分支),这些操作由于 Git 的分散属性,都不需要通过网络来连接到中央服务器进行,她甚至可以在飞机中完成这一切。当她完成所有工作,只需要向远程的代码库推送(Push)自己的修改即可。
Git 将保持所管理代码的整合性作为首要要务。所有的文件内容,文件相互关系,以及文件目录结构,版本,标签以及修改,都经过加密哈希校验算法(SHA1)的保护。这可以防止各种意外的代码修改失误,或者是第三者的恶意修改,使得代码修改历史完全可追迹。
使用 Git 你可以确信你拥有代码的完整修改历史。
某些其他的版本管理软件对发布后的代码不进行任何保护。这对于完全依赖于软件开发的团队来说可以是一种非常严重的安全脆弱性问题。
Git 的关键设计目标之一就是保持柔软性。Git 在以下方面都展现出了其柔软性:支持各种非线性的开发工作流程,对或大或小的软件项目都可以良好支持,以及兼容各种操作系统和协议。
Git 支持将分支和标签作为一级基本对象(不同于 SVN),所以所有对分支和标签的操作也都会被保存到修改历史中。并不是所有的版本管理软件支持这一层面的追迹。
Git 对今天绝大多数软件开发团队来说都是最佳的选择。虽然每个团队都有各自的特点和目标,但是这里我们依然可以列举一些对他们来说Git优于其他选择的理由:
Git 兼备了功能性,高性能,安全性和柔软性,这些是很多软件开发团队以及个人所需要的要素。我们已经在上面详细讨论了这些特性。对很多软件开发团队来说,以以上标准货比三家的最终结果都是选择Git。
Git 是受到最广泛使用和支持的版本管理软件。这使得 Git 在以下这些方面具有极大的吸引力。我们在 Atlassian(此 Tutorial 作者所处的公司)的大多数代码都是用 Git 来进行管理的。
绝大多数的软件开发者都有过 Git 的使用经历,很大一部分在校或者刚刚毕业的学生甚至只用过 Git 进行版本管理。虽然在一些公司开发成员可能在从其他版本管理软件迁移到 Git 的过程中要经历比较陡峭的学习曲线,但是大多数开发者以及他们未来的潜在开发者(学生)都已经具备了使用 Git 的基本技能,这就意味着他们不再需要额外的培训。
Git 的普及还带来很多其他的好处,Git 的市场占有率意味着很多第三方的服务和 IDE 都开始默认支持 Git。比如我们的 DVCS 客户端 Source Tree,项目开发管理软件 JIRA,以及代码托管服务 Bitbucket。
如果你是一个开发新手并期待在未来构建自己的专业开发技能,Git 毫无疑问是你在版本管理上的第一选择。
Git 本身是一个拥有良好支持和管理的开源软件项目。Git 的开发者在过去的十年中展现了良好的公平性,成熟的开发手段以保障其用户将来的需求,以及定期的更新以保持其可用性和功能性。开源的特性使得项目代码本身受到无微不至的检查,现在有无数的企业都依赖于 Git 的超高软件开发质量。
Git 同时享有极好的社区支持和庞大的用户群体。你可以找到各种内容深入浅出的学习资料,包括书籍,教程,以及专题网站。甚至还有广播以及视频教程存在。
保持开源降低了编程爱好者的投入成本因为他们不需要花一分钱来使用 Git。在开源项目中,Git 无疑扮演了前一世代版本管理软件,比如 SVN 和 CVS,的成功接班人。
对于 Git 的一个常见批评是它非常难以掌握。Git 中的某些术语对刚上手的朋友或者是使用其他系统的朋友可能会比较陌生,比如说,revert
这个命令在 Git 中和在 SVN 或者 CVS 中具有不同的含义。不过尽管如此,Git 依然向用户提供了非常强大的功能。学习掌握这些功能也许会花一些时间,但是一旦你学会了这些技能,它们会帮助你大大提高团队的开发效率。
对于曾经使用非分散式版本管理的团队来说,保存代码的中央服务器可能是他们所不想舍去的。不过,虽然 Git 的确是分散式的架构设计,但是你依然可以设立一个「官方」的代码库来强制保存所有的修改。使用 Git 时,由于所有的开发者都拥有完整的代码库拷贝,所以他们的工作不会被中央服务器的性能甚至有无左右。即便他们下线或者在外,他们依然可以随时查看代码库的修改历史。得益于 Git 的分散式特性,你可以保持自己原有的工作方式但得到 Git 带来的额外好处,有时候你甚至会发现自己不曾意识到有些事居然还可以这样干。
现在你明白了什么是版本管理,什么是 Git 以及为什么我们要选择使用 Git ,接下来你可以选择阅读下一篇文章,在那里我们将解释 Git 给团队和业务所带来的好处。
这篇文章是「git-recipes」的一部分,点击 目录 查看所有章节。
如果你觉得文章对你有帮助,欢迎点击右上角的 Star 🌟 或 Fork 🍴。
如果你发现了错误,或是想要加入协作,请参阅 Wiki 协作说明。