Git是一款开源的分布式版本控制系统,以其分布式架构、轻量级分支、强大的协作能力而闻名。
- 不同于传统的基于差异的版本控制系统,Git 保存文件系统的完整快照,并在文件未修改时仅保留链接,提高了效率。其本地执行操作的特性使得大部分操作无需联网即可完成,例如浏览项目历史和对比版本差异,这对于离线环境下的工作非常便捷。
- Git 的数据完整性由 SHA-1 校验和保证,可以及时发现数据传输过程中的丢失或损坏。此外,Git 仅执行添加数据的操作,确保提交后的数据难以丢失。
- Git 的核心是一个键值对数据库,通过唯一的键值可以随时取回数据。它使用三种对象类型:数据对象(blob)存储文件内容,树对象(tree)组织文件,提交对象(commit)保存快照信息,包括指向树对象的指针、作者信息、提交信息和父对象指针。
- Git 的分支是指向提交对象的可变指针,默认分支为 Master。创建分支实际上是在提交对象上创建一个新的指针。HEAD 指针指向当前所在的本地分支。通过
git checkout 命令可以在不同分支之间切换,并最终合并它们。
Git 常用命令如下,全部命令的中文资料参见https://git-scm.com/book/zh/v2。

下面设置一个代码库,实际看看其如何实现的。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| (base) sj@SunJiandeMacBook-Air testgit % tree -a . ├── .git │ ├── COMMIT_EDITMSG │ ├── HEAD │ ├── config │ ├── description │ ├── hooks │ │ ├── applypatch-msg.sample │ │ ├── commit-msg.sample │ │ ├── fsmonitor-watchman.sample │ │ ├── post-update.sample │ │ ├── pre-applypatch.sample │ │ ├── pre-commit.sample │ │ ├── pre-merge-commit.sample │ │ ├── pre-push.sample │ │ ├── pre-rebase.sample │ │ ├── pre-receive.sample │ │ ├── prepare-commit-msg.sample │ │ ├── push-to-checkout.sample │ │ └── update.sample │ ├── index │ ├── info │ │ └── exclude │ ├── logs │ │ ├── HEAD │ │ └── refs │ │ └── heads │ │ └── main │ ├── objects │ │ ├── 00 │ │ │ └── 3be49801ac2c840691131d41da7c76336463d1 │ │ ├── 2e │ │ │ └── 5ada8bdd7e2df4f2e0a34e11915c132a2fcffd │ │ ├── b6 │ │ │ └── 16fa8948e6b76d03540255015558f097de2954 │ │ ├── ea │ │ │ └── dbfaedada5368037f66b3a4ce65d67e4d5db28 │ │ ├── info │ │ └── pack │ └── refs │ ├── heads │ │ └── main │ └── tags ├── a1.txt └── a2.txt
17 directories, 28 files
|
注意:git的默认设置是对文件名的大小写不敏感,因此有时修改文件不会触发修改!
参考文献
官方文档