Luna Tech

Tutorials For Dummies.

版本控制系统

2019-04-30



0. 前言

本文是我关于 Version Control 的一些基本概念的认识和总结,主要内容如下:

1. 理解 Repository 到底是什么,Remote repo 和 local repo 是什么意思;

2. 如何在本地创建一个 Repo;

3. 集中式版本控制系统和分布式版本控制系统的区别;


1. 关于 Folder,Repository,Git,GitHub

假设有一天,我们在电脑里面创建了一个文件夹(ABC),这个文件夹里面有很多文件。

我们一直在对文件夹 ABC 里面的文件做修改,增加新文件,修改已有文件的内容,删除文件等等。

因为一直在改动文件,我们就产生了一个想法,想要保留对于这个文件夹 ABC 内部文件的所有改动历史,这样如果某天改错了什么东西,还可以 Ctrl-Z 撤销操作。

这个想法可以实现吗?当然可以。只不过,我们需要先在文件夹 ABC 里面加一个 Repository (简称 Repo,仓库),在这个仓库里面,储存着我们对 ABC 的所有操作历史。

怎么在 ABC 里面增加一个 Repo 呢?我们可以用不同的版本控制工具来做,比如 Git 或者 SVN。假设我们决定用 Git 做版本控制,那只要打开 terminal,进入到 ABC 这个文件夹中,然后敲一行命令:

git init

img-1

img-2

PS:想要显示隐藏文件夹可以使用快捷键 cmd+shift+.

这时,我们的 ABC 中就**有了一个新的隐藏文件夹,叫做.git。**在.git 里面,保存着我们对于文件夹 ABC 里面所有文件的操作历史(从 git init 的那个时候开始,之前的操作历史 git 是不知道的哦~那时候它还没出生呢!)。

需要注意的是,.git 是一个非常被动的孩子,你不能指望他自己很勤快地去主动记录你的操作。唯一能让他干活的方式就是,我们改完东西之后告诉他,我们现在改过东西啦,你赶紧来看一下我们改过什么,然后记下来这些改动(通过使用 git add 和 git commit)。

而且,如果你把.git 这个文件夹删了,那么关于 ABC 的记忆就全部丢失了,你再也无法找回 ABC 的操作历史了(嘤嘤嘤),所以大家千万别去修改.git 文件夹里面的任何东西。

现在我们知道了,其实 Repo 就是这个新加的.git 的文件夹。既然是个文件夹,那么我们可以选择把这个 Repo 放在本地电脑里,这样的 repo 叫做local repo;也可以选择把这个 Repo 放在服务器上,放在服务器上的 Repo 就成了remote repo

既然 remote repo 是放在服务器上的,我们可以选择在自己搭一个服务器,也可以选择现成的服务器来储存 repo,比如 Github,Gitbucket等等。

References:

https://www.jianshu.com/p/8cf7fa473028

https://en.wikipedia.org/wiki/Software_repository


2. 版本控制系统

由于大部分的开发工作都需要多人协作,我们就需要 Version control system (版本控制系统)来帮忙管理项目的历史记录。

有些版本控制系统是集中化的(Centralized Version Control Systems,CVCS),比如 SVN;还有一些版本控制系统是分布式的(Distributed/Decentralized Version Control System, DVCS),比如 Git。

集中式版本控制系统和分布式版本控制系统的最大区别在于 Repo(历史记录)存放的位置。


3. 总结

由此看来,集中式版本控制系统对于中央服务器的稳定性要求更高,而且大家要联网才能干活;而分布式版本控制系统把中央服务器的概念弱化了,大家在自己电脑上就可以提交修改,进行 merge,服务器只是起到方便大家同步 Repo 的作用,就算服务器出问题了也可以快速复制一个 Repo。

References:

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374027586935cf69c53637d8458c9aec27dd546a6cd6000

https://www.lynda.com/Git-tutorials/What-repository/601791/629515-4.html