什么是 Git?#
✍️ houkensjtu | 童仲毅
©️ 本文演绎自 Atlassian 编写的 What is Git。页面上所有内容采用知识共享-署名(CC BY 2.5 AU)许可协议。
到目前为止,Git 是世界上使用最为广泛的现代化版本控制系统。Git 最初由 Linux 系统内核的作者 Linus Torvalds 在 2005 年开始开发,目前已经是一个持续维护的成熟开源项目。如今,大量软件项目依赖 Git 进行版本管理,其中既有开源软件,也有商业软件。Git 在很多操作系统和集成开发环境(IDE)上都表现良好。绝大多数软件开发者或多或少都使用过 Git。
Git 是分布式版本管理(DVCS)的一种。CVS 和 Subversion(SVN)等集中式的版本管理软件将完整的版本历史存放在同一个地方。而在 Git 中,每个开发者的代码仓库都包含了所有变更历史。
除了分布式之外,Git 在设计之初也考虑了性能、安全性和灵活性。
高性能#
Git 的底层性能相较于其他版本管理软件有强大的优势。提交修改、创建分支、合并分支和比较版本都针对性能进行了优化。Git 中实现的算法利用了现实中代码树的特点以及它们被修改和访问的常见模式。
不同于某些版本管理软件,Git 在决定文件树的储存和版本历史时,不会被文件名的变化所愚弄——Git 关注的是文件的内容本身。毕竟,代码文件经常会被重命名、拆分和重新编排。Git 仓库中的文件对象通过差分编码(delta encoding,仅保存代码修改的差分)和压缩技术储存,并且直接保存文件夹中的内容和版本控制元数据。
分布式架构也给 Git 带来了巨大的性能优势。
比如说,有一名开发成员 Alice 修改了代码,添加了一些准备在 2.0 版本中发布的功能,然后提交了这些修改及其描述。随后,她又编写并提交了另一个新功能。很自然地,这两次修改是版本历史中两份独立的工作。Alice 又切换到了 1.3 版本的分支,修复了一个只影响这个旧版本的 bug。这次修复的目的是为了让团队在 2.0 版本还没有完成之前,发布一个 1.3.1 版本来解决旧版本中的一些 bug。Alice 可以立刻回到 2.0 版本分支,继续新功能开发。这一切都不需要网络连接,非常快速可靠,甚至可以在飞机中完成。当她准备好将这些单独提交的更改发送到远程仓库时,她只需要一个“推送”(push)命令。
安全#
Git 设计时就把托管代码的完好性作为重中之重。文件内容以及文件、目录、版本、标签和提交的关联,都通过安全的加密哈希校验算法(SHA1)保护。这可以避免代码和修改历史被不小心或者恶意改变,并且保证修改历史完全可追迹。
你可以相信在 Git 中源代码的修改历史是真实可靠的。
