1 如何理解版本控制
在理解版本控制之前,我们先来举个简单的例子。
1.1 第一阶段
场景如下: 学校老师要求上交 C 语言实验报告。性子比较急的张三匆匆写完就上交了,老师不满意让修改;反复四五次后,老师说交第一版上来。张三傻眼了,因为没有保留第一个版本。 优等生李四也去上交,同样被要求修改。李四想到万一要回退怎么办,于是将每次修改前的报告备份成 v1、v2...直到 v5。最后老师要第一版时,李四顺利拿出 v1 版本。
李四对每一个版本都进行了备份,这就是版本控制!我们可以把代码多版本控制起来。进行版本控制主要是为了应对需求变更,随时可以进行回滚/回退。
1.2 第二阶段
李四手动 Ctrl+C/Ctrl+V 太麻烦,便写了一个工具自动化完成版本备份回退等工作,这个工具叫做版本控制器。 李四通过校园墙告知大家可以免费帮忙进行版本控制,给王五、赵六等人建立文件夹维护版本。我们把建立的文件夹叫做仓库,仓库本质就是文件夹。
1.3 第三阶段
随着人数增多,李四购买云服务器存储大家的实验报告,让大家都能访问。又开发了一个客户端软件,可以获取当前用户报告目录,方便查看版本、下载和上传。
考虑到没网的情况,李四开发了应用程序,可以在当前账号指定目录下新建仓库,添加报告并获取本地仓库任何版本。该应用程序命名为 git。这样即使没有网,也可以在本地自动进行版本控制。
我们将每个人自己新建的文件夹称为本地仓库。
1.4 第四阶段
如果电脑坏掉,本地仓库丢失怎么办?需要保护数据安全。仅本地控制无法满足要求。 利用之前的云服务器,运行每个用户将本地仓库 push 到云服务器对应平台,平台上会有每个人的本地仓库备份,称为远端仓库。远端仓库的内容和本地仓库的内容是完全一样的。
新需求:用户需要创建不同仓库管理不同学科报告(如 C 语言、物理、化学)。用户可以通过客户端将所有仓库推送到远端。 云服务器需要进行用户身份识别(登录注册),每个用户可以将多个本地仓库推送到自己远端服务器账号下。
为了让 git 在客户端和服务器两端都能跑(Windows 和 Linux),实现两端同步,即客户端和服务器下的两个 git 互相同步。后来,李四将这个云服务器平台命名为 gitee/github。
最终结论:git 是一个版本控制器,gitee/github 是基于 git 的网站平台。
2 Linux 上 git 操作
2.1 创建仓库并克隆到本地
指令:git clone 仓库链接
注:如未安装「git」可输入指令:sudo apt install -y git 或 sudo yum install -y git
仓库 test 中有一个 .git 目录,严格意义上讲真正的仓库是这个 .git,我们将其称为隐藏的本地仓库。
.git 中包含着我们所有的修改记录。未来提交代码后,它会将各种对应的版本 v1、v2 等的具体修改数据保存在 .git 的特定目录下。
git 进行版本控制时,不需要记录不变的,只会记录变化的部分。例如 100 行代码删除了第 10 行,git 只需记录'删除第 10 行',未来回退时反向添加即可。
2.2 git 的提交(三板斧)
先在本地仓库创建一份代码。现在我们在本地仓库创建了 test.c,那 test.c 当前有没有在我的仓库里被管理起来呢?

并没有。
我们往往将 .git 称作仓库,而当前的目录称为工作区。此时的 test.c 在工作区中,即只在自己的 Linux 中存在。
2.2.1 add
将 test.c 添加到本地仓库。
使用指令:git add 文件名 或 git add .


