一、什么是Git?
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git是Linus Torvalds为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
二、分布式VS集中式
VisualSVN、TortoiseSVN、Bazzar为集中式版本控制系统,而Mercurial、Git、Bitkeeper为分布式版本控制系统。
1. 集中式版本控制
优点:可以对具体的文件或目录进行权限控制,有全局的版本号。
缺点:所有操作都需要联网中心服务器。
2. 分布式版本控制
优点:
i. 分支管理。
ii. 完整性和安全性更高,各客户端保留有完整的版本库。
iii. 绝大部分操作都是本地化的,支持离线。
缺点:
i. 对版本库的目录和文件无法做到精细化的权限控制。
ii. 无全局性的版本号。
通过以上分析的集中式和分布式版本控制的优缺点,我们就能总结出以Git为代表的分布式版本控制和以SVN为代表的集中式版本控制之间的区别。
3. Git和SVN的区别
- 最核心的区别当然是分布式和集中式。
- 处理数据的方式不同,Git以元数据方式存储数据,SVN按照文件存储,对应的取出数据方式也不一样。
- 分支管理或分支模型(下文会详解)。
- 全局性的版本号。
- 数据的完整性和安全性,分布式的更好。
三、常用的Git解决方案和代码托管平台
1.开源软件解决方案:Gitea、GitLab
2.代码托管平台:码云(Gitee)、码市(Coding)、GitHub、GitLab、Bitbucket
四、Git的基石SHA-1
In cryptography, SHA-1 (Secure Hash Algorithm 1) is a cryptographichash function which takes an input and produces a 160-bit (20-byte) hash value known as a message digest – typically rendered as ahexadecimal number, 40 digits long. It was designed by the UnitedStates National Security Agency, and is a U.S. Federal InformationProcessing Standard.
以上摘自维基百科,主要说明了SHA是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。SHA-1长度为20字节,160位,熟悉网络编程的都知道,4位可以转换成一个十六进制的数字,所以一个SHA-1散列可以展示为40长度的十六进制的数字。
SHA-1的计算方法为代码:
1 //Note: All variables are unsigned 32 bits and wrap modulo 232 when calculating
2
3 //Initial variables:
4 h0 := 0x67452301
5 h1 := 0xEFCDAB89
6 h2 := 0x98BADCFE
7 h3 := 0x10325476
8 h4 := 0xC3D2E1F0
9
10 //Pre-processing:
11 append the bit '1' to the message
12 append k bits '0', where k is the minimum number >= 0 such that the resulting message
13 length (in bits) is congruent to 448(mod 512)
14 append length of message (before pre-processing), in bits, as 64-bit big-endian integer
15
16 //Process the message in successive 512-bit chunks:
17 break message into 512-bit chunks
18 for each chunk
19 break chunk into sixteen