|
1 |
| -# 什么是Git |
| 1 | +# 什么是 Git |
2 | 2 |
|
3 |
| -> BY houkensjtu([houkensjtu@github](https://github.com/houkensjtu)) |
| 3 | +> ✍️ [houkensjtu](https://github.com/houkensjtu) | [Zhongyi Tong](https://github.com/geeeeeeeeek) |
4 | 4 | >
|
5 |
| -> 这是一篇在[原文(BY atlassian)](https://www.atlassian.com/git/tutorials/what-is-git)基础上演绎的译文。除非另行注明,页面上所有内容采用知识共享-署名([CC BY 2.5 AU](http://creativecommons.org/licenses/by/2.5/au/deed.zh))协议共享。 |
| 5 | +> ©️ 本文演绎自 Atlassian 编写的 [_What is Git_](https://www.atlassian.com/git/tutorials/what-is-git)。除非另行注明,页面上所有内容采用知识共享-署名([CC BY 2.5 AU](http://creativecommons.org/licenses/by/2.5/au/deed.zh))许可协议。 |
6 | 6 |
|
7 |
| -Git 是目前世界上被最广泛使用的现代软件版本管理系统。Git 本身亦是一个成熟并处于活跃开发状态的开源项目,它最初是由 Linux 操作系统内核的创造者 Linus Torvalds 在 2005 年创造。今天惊人数量的软件项目依赖 Git 进行版本管理,这些项目包括开源以及各种商业软件。Git 在职业软件开发者中拥有良好的声誉,Git 目前支持绝大多数的操作系统以及 IDE(Integrated Development Environments)。 |
| 7 | +到目前为止,Git 是世界上使用最为广泛的现代化版本控制系统。Git 最初由 Linux 系统内核的作者 Linus Torvalds 在 2005 年开始开发,目前是一个持续维护的成熟开源项目。如今,大量软件项目依赖 Git 进行版本管理,其中既有开源软件,也有商业软件。Git 在很多操作系统和集成开发环境(IDE)上都表现良好。绝大多数软件开发者或多或少都使用过 Git。 |
8 | 8 |
|
9 |
| -Git 使用分散式架构,是分散式版本管理 DVCS(Distributed Version Control System)的代表。相较于例如 CVS 或者 Subversion 等集中式版本管理软件,Git 并不是将代码的所有修改历史保存在中心服务器中。在 Git 中取而代之的是,所有参与项目的开发者都拥有各自的代码完全拷贝,并在自己的拷贝上进行软件开发。 |
| 9 | +Git 是分布式版本管理( DVCS)的一种。CVS 和 Subversion(SVN) 等集中式的版本管理软件将完整的版本历史存放在同一个地方。而在 Git 中,每个开发者的代码仓库都包含了所有变更历史。 |
10 | 10 |
|
11 |
| -除了分散式的特点之外,Git 的设计也针对性能,安全性和柔软性作了特别优化。 |
| 11 | +除了分布式之外,Git 在设计之初也考虑了性能、安全性和灵活性。 |
12 | 12 |
|
13 |
| -### 性能 |
| 13 | +### 高性能 |
14 | 14 |
|
15 |
| -Git 的底层性能相较于其他版本管理软件有强大的优势。在 Git 中所有的操作包括提交修改,创建分支,融合分支,以及求取差分都经过了性能优化。这些优化来自于 Git 的开发者对实际一般代码开发模式的深度认识和广泛知识。 |
| 15 | +Git 的底层性能相较于其他版本管理软件有强大的优势。提交修改、创建分支、合并分支和比较版本都针对性能进行了优化。Git 中实现的算法利用了现实中代码树的特点以及它们被修改和访问的常见模式。 |
16 | 16 |
|
17 |
| -不同于某些版本管理软件,Git 在决定代码修改历史以及保存形式的时候不会被文件名的变化所愚弄,Git 关注的是文件的内容本身。在实际操作中,代码文件经历频繁的再命名,分解和合并。Git 使用一种混合了差分编码(delta encoding,仅保存代码修改的差分),压缩,直接保存,以及版本元数据(version metadata objects)的管理方式。 |
| 17 | +不同于某些版本管理软件,Git 在决定文件树的储存和版本历史时,不会被文件名的变化所愚弄——Git 关注的是文件的内容本身。毕竟,代码文件经常会被重命名、拆分和重新编排。Git 仓库中的文件对象通过差分编码(delta encoding,仅保存代码修改的差分)和压缩技术储存,并且直接保存文件夹中的内容和版本控制元数据。 |
18 | 18 |
|
19 |
| -分散式的架构也给 Git 带来了极大的性能优势。 |
| 19 | +分布式架构也给 Git 带来了巨大的性能优势。 |
20 | 20 |
|
21 |
| -比如说,现有一名开发成员 Alice 对代码进行了一些改动,添加了一些在2.0版本中准备公开的功能,然后将这些修改以及一份简单的说明进行了提交。随后她又增加了一些另外的新功能,并又作了一次新提交。显然这两次修改在版本历史中被分开各自进行了保存。在这之后 Alice 把代码切换到了 1.3 版本,修复了一些旧版本中的 Bug(这和她新添加的功能没有关系)。这次修复的目的是为了让团队可以在公开 2.0 版本之前,释放一个 1.3.1 版本来解决 1.3 版本中的 Bug 问题。Alice 马上又可以回到她之前进行的 2.0 版本功能开发之中(通过切换代码分支),这些操作由于 Git 的分散属性,都不需要通过网络来连接到中央服务器进行,她甚至可以在飞机中完成这一切。当她完成所有工作,只需要向远程的代码库推送(Push)自己的修改即可。 |
| 21 | +比如说,有一名开发成员 Alice 修改了代码,添加了一些准备在 2.0 版本中发布的功能,然后提交了这些修改及其描述。随后,她又编写并提交了另一个新功能。很自然地,这两次修改是版本历史中两份独立的工作。Alice 又切换到了 1.3 版本的分支,修复了一个只影响这个旧版本的 bug。这次修复的目的是为了让团队在 2.0 版本还没有完成之前,发布一个 1.3.1 版本来解决旧版本中的一些 bug。Alice 可以立刻回到 2.0 版本分支,继续 2.0 版本的新功能开发。这一切都不需要网络连接,非常快速可靠,甚至可以在飞机中完成。当她准备好将这些单独提交的更改发送到远程仓库时,她只需要一个“推送”(push)命令。 |
22 | 22 |
|
23 |
| -### 安全性 |
| 23 | +### 安全 |
24 | 24 |
|
25 |
| -Git 将保持所管理代码的整合性作为首要要务。所有的文件内容,文件相互关系,以及文件目录结构,版本,标签以及修改,都经过加密哈希校验算法(SHA1)的保护。这可以防止各种意外的代码修改失误,或者是第三者的恶意修改,使得代码修改历史完全可追迹。 |
| 25 | +Git 设计时就把托管代码的完好性作为重中之重。文件内容以及文件、目录、版本、标签和提交的关联,都通过安全的加密哈希校验算法(SHA1)保护。这可以避免代码和修改历史被不小心或者恶意改变,并且保证修改历史完全可追迹。 |
26 | 26 |
|
27 |
| -使用 Git 你可以确信你拥有代码的完整修改历史。 |
| 27 | +你可以相信在 Git 中源代码的修改历史是真实可靠的。 |
28 | 28 |
|
29 |
| -某些其他的版本管理软件对发布后的代码不进行任何保护。这对于完全依赖于软件开发的团队来说可以是一种非常严重的安全脆弱性问题。 |
| 29 | +有一些版本管理软件无法防止版本历史之后被篡改。这对于任何依赖软件开发的团队来说都是严重的安全漏洞。 |
30 | 30 |
|
31 |
| -### 柔软性 |
| 31 | +### 灵活 |
32 | 32 |
|
33 |
| -Git 的关键设计目标之一就是保持柔软性。Git 在以下方面都展现出了其柔软性:支持各种非线性的开发工作流程,对或大或小的软件项目都可以良好支持,以及兼容各种操作系统和协议。 |
| 33 | +Git 的关键设计目标之一就是灵活。Git 在很多方面都展现出了其灵活性:支持多种非线性的工作流,对不同规模的项目来说都很高效,并且兼容多个操作系统和协议。 |
34 | 34 |
|
35 |
| -Git 支持将分支和标签作为一级基本对象(不同于 SVN),所以所有对分支和标签的操作也都会被保存到修改历史中。并不是所有的版本管理软件支持这一层面的追迹。 |
| 35 | +Git 在设计时最重要的功能便是分支和标签(不同于 SVN),因此所有影响分支和标签的操作也都会被保存到修改历史中。不是所有的版本管理软件关注的都是这个层面的版本追踪。 |
36 | 36 |
|
37 | 37 | ### 使用 Git 进行版本管理
|
38 | 38 |
|
39 |
| -Git 对今天绝大多数软件开发团队来说都是最佳的选择。虽然每个团队都有各自的特点和目标,但是这里我们依然可以列举一些对他们来说Git优于其他选择的理由: |
| 39 | +Git 对于绝大多数软件开发团队来说都是最好的选择。虽然每个团队都需要考虑自身的情况,但我们依然可以列举一些 Git 比其他版本控制系统更好的理由: |
40 | 40 |
|
41 |
| -#### Git 很棒 |
| 41 | +#### Git 很好用 |
42 | 42 |
|
43 |
| -Git 兼备了功能性,高性能,安全性和柔软性,这些是很多软件开发团队以及个人所需要的要素。我们已经在上面详细讨论了这些特性。对很多软件开发团队来说,以以上标准货比三家的最终结果都是选择Git。 |
| 43 | +Git 兼具大多数团队和个人开发者需要的功能、性能,安全性和灵活性。我们已经具体讨论过了这些特点。对很多团队来说,它们发现 Git 在这几点上都表现的更优秀。 |
44 | 44 |
|
45 | 45 | #### Git 已经成为了默认的行业标准
|
46 | 46 |
|
47 |
| -Git 是受到最广泛使用和支持的版本管理软件。这使得 Git 在以下这些方面具有极大的吸引力。我们在 Atlassian(此 Tutorial 作者所处的公司)的大多数代码都是用 Git 来进行管理的。 |
| 47 | +Git 使用最广泛的版本管理软件。这使得 Git 在以下这些方面具有极大的吸引力。在 Atlassian(作者所在的公司),大多数代码都是通过 Git 管理的。 |
48 | 48 |
|
49 |
| -绝大多数的软件开发者都有过 Git 的使用经历,很大一部分在校或者刚刚毕业的学生甚至只用过 Git 进行版本管理。虽然在一些公司开发成员可能在从其他版本管理软件迁移到 Git 的过程中要经历比较陡峭的学习曲线,但是大多数开发者以及他们未来的潜在开发者(学生)都已经具备了使用 Git 的基本技能,这就意味着他们不再需要额外的培训。 |
| 49 | +大量开发者都有过 Git 的使用经历,很大一部分大学毕业生甚至只用过 Git 进行版本管理。虽然迁移到 Git 的过程中要经历比较陡峭的学习曲线,但是大多数员工以及未来的员工都已经具备了使用 Git 的基本技能,这意味着他们不需要额外的培训。 |
50 | 50 |
|
51 |
| -Git 的普及还带来很多其他的好处,Git 的市场占有率意味着很多第三方的服务和 IDE 都开始默认支持 Git。比如我们的 DVCS 客户端 [Source |
52 |
| -Tree](https://www.atlassian.com/software/sourcetree),项目开发管理软件 [JIRA](https://www.atlassian.com/software/jira),以及代码托管服务 [Bitbucket](https://www.atlassian.com/software/bitbucket)。 |
| 51 | +除了拥有大量使用者之外,Git 的普及还意味着很多第三方的服务和 IDE 都已经集成了 Git。比如我们的 DVCS 桌面客户端 [Source Tree](https://www.atlassian.com/software/sourcetree)、项目开发管理软件 [JIRA](https://www.atlassian.com/software/jira) 和代码托管服务 [Bitbucket](https://www.atlassian.com/software/bitbucket)。 |
53 | 52 |
|
54 |
| -如果你是一个开发新手并期待在未来构建自己的专业开发技能,Git 毫无疑问是你在版本管理上的第一选择。 |
| 53 | +如果你是一个想要积累软件开发工具使用技能的新人,Git 毫无疑问是你在版本管理方面的第一选择。 |
55 | 54 |
|
56 | 55 | #### Git 是一个高质量的开源项目
|
57 | 56 |
|
58 |
| -Git 本身是一个拥有良好支持和管理的开源软件项目。Git 的开发者在过去的十年中展现了良好的公平性,成熟的开发手段以保障其用户将来的需求,以及定期的更新以保持其可用性和功能性。开源的特性使得项目代码本身受到无微不至的检查,现在有无数的企业都依赖于 Git 的超高软件开发质量。 |
| 57 | +Git 本身是一个经历多年良好支持和管理的开源软件项目。Git 的维护者很好地平衡了长远额用户需求,和改进可用性和功能性的例行更新。这个开源项目的质量久经考验,无数企业都极度依赖这个质量。 |
59 | 58 |
|
60 |
| -Git 同时享有极好的社区支持和庞大的用户群体。你可以找到各种内容深入浅出的学习资料,包括书籍,教程,以及专题网站。甚至还有广播以及视频教程存在。 |
| 59 | +Git 还拥有良好的社区支持和庞大的用户群体。你可以找到各种深入浅出的学习资料,包括书籍,教程,以及专题网站。你也可以找到相关的播客节目和视频教程。 |
61 | 60 |
|
62 |
| -保持开源降低了编程爱好者的投入成本因为他们不需要花一分钱来使用 Git。在开源项目中,Git 无疑扮演了前一世代版本管理软件,比如 SVN 和 CVS,的成功接班人。 |
| 61 | +开源降低了业余开发者的成本,因为他们不需要花一分钱来使用 Git。对于开源项目来说,Git 无疑是 SVN 和 CVS 等上一代成功的版本管理软件的接班人。 |
63 | 62 |
|
64 | 63 | #### 对于 Git 的批评意见
|
65 | 64 |
|
66 |
| -对于 Git 的一个常见批评是它非常难以掌握。Git 中的某些术语对刚上手的朋友或者是使用其他系统的朋友可能会比较陌生,比如说,`revert` 这个命令在 Git 中和在 SVN 或者 CVS 中具有不同的含义。不过尽管如此,Git 依然向用户提供了非常强大的功能。学习掌握这些功能也许会花一些时间,但是一旦你学会了这些技能,它们会帮助你大大提高团队的开发效率。 |
| 65 | +对于 Git 的一个常见批评是它学起来不那么容易。Git 中的某些术语对于新手或者是使用其他系统的朋友可能会比较陌生。比如说,`revert` 这个命令在 Git、SVN、CVS 中具有不同的含义。不过,Git 依然向用户提供了非常强大的功能。学习掌握这些功能也许会花一些时间,但是一旦你学会了这些技能,它们会帮助你大大提高团队的开发效率。 |
67 | 66 |
|
68 |
| -对于曾经使用非分散式版本管理的团队来说,保存代码的中央服务器可能是他们所不想舍去的。不过,虽然 Git 的确是分散式的架构设计,但是你依然可以设立一个「官方」的代码库来强制保存所有的修改。使用 Git 时,由于所有的开发者都拥有完整的代码库拷贝,所以他们的工作不会被中央服务器的性能甚至有无左右。即便他们下线或者在外,他们依然可以随时查看代码库的修改历史。得益于 Git 的分散式特性,你可以保持自己原有的工作方式但得到 Git 带来的额外好处,有时候你甚至会发现自己不曾意识到有些事居然还可以这样干。 |
| 67 | +对于曾经使用非分布式版本管理的团队来说,他们可能不想放弃中央服务器。不过,虽然 Git 被设计成分布式的架构,但是你依然可以建立一个“官方”的代码库来存放所有的修改。使用 Git 时,由于所有的开发者都拥有完整的代码库拷贝,所以他们的工作不会被中央服务器的状态和性能所影响。即使遇到故障,他们依然可以查看完整的项目历史。得益于 Git 的灵活性和分布式特点,你可以在保持原有工作方式的同时得到 Git 带来的额外好处,你以前甚至不会意识到这些好处。 |
69 | 68 |
|
70 |
| -现在你明白了什么是版本管理,什么是 Git 以及为什么我们要选择使用 Git ,接下来你可以选择阅读下一篇文章,在那里我们将解释 Git 给团队和业务所带来的好处。 |
| 69 | +现在你明白了什么是版本管理,什么是 Git 以及为什么要使用 Git ,你可以选择继续阅读下一节,了解 Git 在整个组织层面带来的好处。 |
71 | 70 |
|
72 | 71 |
|
73 |
| -> 这篇文章是[**「git-recipes」**](https://github.com/geeeeeeeeek/git-recipes/)的一部分,点击 [**目录**](https://github.com/geeeeeeeeek/git-recipes/wiki/) 查看所有章节。 |
| 72 | +> 这篇文章是[**「Git Recipes」**](https://github.com/geeeeeeeeek/git-recipes/)的一部分,点击 [**目录**](https://github.com/geeeeeeeeek/git-recipes/wiki/) 查看所有章节。 |
74 | 73 | >
|
75 | 74 | > 如果你觉得文章对你有帮助,欢迎点击右上角的 **Star** :star2: 或 **Fork** :fork_and_knife:。
|
76 | 75 | >
|
77 |
| -> 如果你发现了错误,或是想要加入协作,请参阅 [Wiki 协作说明](https://github.com/geeeeeeeeek/git-recipes/issues/1)。 |
| 76 | +> 如果你发现了错误,或是想要加入协作,请参阅 [协作说明](https://github.com/geeeeeeeeek/git-recipes/issues/1)。 |
0 commit comments