【Linux系统编程】开源的分布式版本控制系统——git的基本使用

Git/版本控制
31
0
0
2024-05-01
这篇文章我们继续学习开发工具,今天要学的是开源的分布式版本控制系统——git

在这里插入图片描述

1. git的历史

Git 是一个分布式版本控制系统,它由Linus Torvalds 于2005年创建。下面是 Git 发展的主要历史里程碑:

创建中心化版本控制系统(CVS、Subversion等):

在 Git 出现之前,许多开发者使用中心化的版本控制系统(如 CVS、Subversion)来协同开发项目。这些系统将代码存储在中央服务器上,用户通过从服务器上检出代码并提交更改来工作。

Linus Torvalds 创建 Git:

2005 年,Linus Torvalds 创建了 Git。他最初的目标是用于 Linux 内核的开发,因为当时的版本控制系统对于内核这样的大型项目来说并不理想。

Git 的分布式特性:

与中心化的版本控制系统不同,Git 是分布式的。这意味着每个开发者都可以在本地拥有完整的代码仓库,并且可以在没有网络连接的情况下进行工作。开发者可以通过克隆远程仓库来获取完整的历史记录和代码版本。

Git 的速度和效率:

Git 被设计成非常快速和高效的版本控制系统。它使用了一种称为“快照”的技术,只存储文件的变化部分,而不是整个文件的副本。这使得 Git 在处理大型项目时非常高效。

Git 的分支和合并:

Git 提供了强大的分支和合并功能,使得开发者可以轻松地创建新的分支,并在不同的分支上进行独立的工作。开发者可以在合适的时候将分支合并到主线上,从而整合各种修改和功能。

Git 的开源和广泛应用:

Git 是一个开源项目,并逐渐成为开发者们的首选版本控制系统。众多的软件开发团队、开源社区以及个人开发者都在使用 Git 来管理他们的代码。

总结起来,Git 是由 Linus Torvalds 创建的分布式版本控制系统,它具有速度快、效率高、支持分支和合并等特点。通过提供强大的版本控制功能,Git 成为了广泛应用于各种软件开发项目的行业标准。

2. 什么是版本控制,怎么理解?

我们说git是一个版本控制系统,那么该自己理解版本控制这个概念呢?

版本控制(Version Control)是一种记录和管理文件或项目的不同版本的系统。它可以追踪文件的变化,并允许开发者在不同的时间点回溯、比较和恢复文件的特定版本。

举个栗子:

就好比我们在学校给老师交实验报告或者论文,你第一次交上去,老师说不行,你再修改修改;然后你把修改之后的第二个版本交上去,老师说还有一些小问题,再去修改;然后你又修改,修改之后把第三个版本交上去;老师看了看说,怎么越改越差了,再去修改;你又改了改,然后拿着第四个版本交上去,老师一看说:不行啊,时间快截止了,我看你第二次写的还差不多,要不你把第二次写的交上来吧。 这时,如果你每次都是直接修改,没有保存之前的旧版本,那你就难办了,第二个版本,这可怎么找啊; 但是,如果你每次修改之前都保持了上一次的版本,这时,不管老师想要那一次的版本,你都有,可以直接获取。

理解版本控制的重要性和好处有以下几个方面:

历史记录:

版本控制系统可以记录每个文件的修改历史,包括谁做了什么修改、何时进行的修改等。这样开发者可以轻松地查看项目的演变历程,了解每个版本的变化和改进。

回溯和恢复:

版本控制系统可以让开发者在需要时轻松回退到旧版本,恢复之前的状态。如果出现错误或问题,可以快速找到引入问题的版本,并还原到没有问题的版本。

并行开发:

使用版本控制系统,多个开发者可以并行地在同一个项目上工作,而不会互相干扰或覆盖对方的工作。每个开发者可以在自己的分支上独立工作,并在合适的时机将更改合并到主线上。

冲突解决:

当多个开发者同时修改同一文件时,版本控制系统可以自动检测并提醒冲突的存在。开发者可以通过合并(Merge)或解决冲突(Conflict Resolution)来处理这些问题。

团队协作:

版本控制系统促进团队内的协作,开发者可以共享和讨论代码修改,并进行审查和反馈。团队成员可以更好地了解彼此的工作,并确保项目的一致性和质量。

总之,版本控制是一种非常重要的工具,它提供了记录、管理和追踪文件或项目不同版本的能力。通过使用版本控制系统,开发者可以更好地组织和管理项目,提高团队的协作效率,并控制代码的质量和稳定性。

3. git的主要功能

Git 是一个功能强大的版本控制系统,具有以下几种主要功能:

版本控制:

Git 可以跟踪文件和目录的更改,并记录每次提交的历史。它可以帮助您了解文件的修改情况,包括何时进行的修改、谁进行的修改等。

分支管理:

Git 支持创建和管理多个分支。分支是独立的开发路径,您可以在不影响主线(主分支)的同时,创建和切换到其他分支进行并行开发。这对于多人协作和同时开发多个功能非常有用。

合并与冲突解决:

在 Git 中,您可以将一个分支的更改合并到另一个分支中。当两个分支同时修改同一部分代码时,可能会发生冲突。Git 提供了冲突解决的功能,允许您手动解决冲突或使用合并工具来自动解决冲突。

回滚与恢复:

Git 允许您回滚到历史提交的版本,无论是回退到之前的版本还是撤销最新的提交。这对于恢复意外删除的文件或修复错误非常有用。

远程仓库与协作:

Git 可以与远程仓库进行交互,例如 GitHub、GitLab 或 Bitbucket。您可以将本地仓库推送到远程仓库,与其他开发者共享代码,并进行团队协作。

暂存区:

Git 提供了一个暂存区(Staging Area),用于暂时存储修改的文件,然后一次性提交这些修改。这样可以精确地选择要包含在提交中的文件,为提交的内容提供更好的控制。

查看历史与比较:

Git 允许您查看提交历史记录,比较不同版本之间的差异,并查看特定文件或目录的修改历史。

除了以上功能,Git 还提供了其他一些有用的功能,例如标签管理、忽略文件、子模块等。Git 的强大和灵活性使其成为广泛使用的版本控制系统,并被众多开发者和开源项目所采用。

4. git与Gitee/GitHub的关系与区别

大家平时比较常用的代码托管平台应该就是Gitee/GitHub,那么Gitee/GitHub与git之间是什么样的一个关系呢?

Git 是一个版本控制系统,而 Gitee 和 GitHub 都是基于 Git 的在线代码托管平台。

下面是 Git、Gitee和GitHub的关系和区别:

Git: Git 是一个开源的分布式版本控制系统,用于管理项目的代码版本。它可以在本地计算机上创建和管理 Git 仓库,记录文件的修改历史,并提供分支管理、合并、回滚等功能。 Gitee: Gitee 是一个类似于 GitHub 的在线代码托管平台,在中国很受欢迎。它提供了将 Git 仓库托管在云端的服务,可以方便地与他人共享代码,并进行团队协作。Gitee 提供了 Web 界面和其他工具,使用户能够更方便地管理和使用 Git 仓库。 GitHub: GitHub 是全球最大的基于 Git 的在线代码托管平台,广泛应用于全球开源社区和企业。类似于 Gitee,GitHub 也提供了将 Git 仓库托管在云端的服务,并提供了强大的协作功能。

关系:

Gitee 和 GitHub 都是基于 Git 的在线代码托管平台,使用 Git 作为其底层的版本控制系统,因此它们完全兼容 Git,支持 Git 的所有功能。 用户可以在 Gitee 或 GitHub 上创建和管理自己的 Git 仓库,并与他人分享代码。

区别:

Gitee 和 GitHub 在地域上有一定的差异。Gitee 是为中国用户提供的服务,而 GitHub 是全球服务。 用户界面和功能方面略有不同。Gitee 在一些功能上有一些特色,如集成码云 Pages、Gitee CI/CD 等。GitHub 则更注重开源社区和全球开发者的协作。

总之,Git 是一个版本控制系统,而 Gitee 和 GitHub 是基于 Git 的在线代码托管平台。通过 Gitee 或 GitHub,您可以将 Git 仓库托管在云端,并使用其他提供的功能来实现更好的团队协作和代码管理。

5. git 的基本使用

接下来我以Gitee为例,给大家演示一下如何在Linux上使用Gitee进行代码托管。

5.1 git的安装

首先大家确认一下自己的Linux上有没有安装git,没安装的可以安装一下:

输入git --version,如果出现了版本号,就表明安装了

在这里插入图片描述

如果没有的话,安一下就行:sudo yum install -y git

5.2 创建仓库

建议大家现在Gitee上面创建远端的仓库,然后再克隆到本地

具体怎么做呢?


在这里插入图片描述

大家在自己的主页,点击+,然后点击新建仓库

在这里插入图片描述

然后出现这样的界面,我们输入仓库名称(自己起),输入对仓库的介绍。 Gitee现在创建仓库的是时候无法之间设置成开源,默认私有,不过创建好之后我们可以设置成开源(后面会说) 接着:

在这里插入图片描述

初始化仓库大家可以选一下,语言就按你自己的实际情况选择,许可证随便选一个就行了 然后设置模板

在这里插入图片描述

我们一般选择Readme文件 最后分支模型的话我们现在可以不选

在这里插入图片描述

然后点创建

在这里插入图片描述

在这里插入图片描述

我们的仓库就创建好了。

5.3 开源设置

那现在我们就可以把它设置成开源了


在这里插入图片描述

点击管理,往下拉

在这里插入图片描述

选择开源

在这里插入图片描述

都勾选上,点保存

在这里插入图片描述

它就变成公开了。 不过如果你创建一个空仓库啥也没提交好像不能设置成开源,仓库里面必须有点内容。

5.4 克隆到本地

那然后我们怎么把远端的仓库克隆到本地,使得我本地写的代码可以上传到gitee上进行托管呢?

首先我创建一个目录


在这里插入图片描述

比如我创建一个名为system_programming,作为我学习Linux系统编程的代码仓库

那我们怎么把远端的仓库克隆到这个目录下呢?


在这里插入图片描述

点击克隆,把Https的链接复制一下

在这里插入图片描述

然后在对应的目录下,输入git clone 链接,回车

在这里插入图片描述

然后我们在Gitee上创建的远端仓库就克隆到本地了 然后我们cd进去 会发现远端仓库里面已经有的文件在本地仓库里面就也有了

在这里插入图片描述

然后我们后面在这个目录下面写的代码就可以通过一些指令上传到Gitee上进行托管了,那怎么操作呢? 演示一下:

比如我现在把之前写的那个进度条的代码,拷贝过来:

在这里插入图片描述

但是现在这些文件实际并不在真正的git仓库里面 真正的仓库其实是这个:

在这里插入图片描述

隐藏文件里面的这个.git

5.5 如何上传到仓库并推送到远端

如果想让你的这些文件被git仓库管理,怎么做呢?

add
git add 文件名将文件添加到暂存区(staging area) 当然直接git add .,就可以把当前目录中所有没添加到暂存区里面的文件添加进去

在这里插入图片描述

commit

然后呢?

git commit -m "提交的内容信息或修改信息"(不要随便写) git commit 会将暂存区的文件更改提交到本地版本库。

在这里插入图片描述

但是我们看到这里报错了

在这里插入图片描述

看第一条Please tell me who you are,🆗,我们第一次提交需要进行一个身份验证

在这里插入图片描述

执行这两条命令就行了,把双引号里面的内容分别替换成自己的姓名(昵称)和邮箱 执行之后再commit

在这里插入图片描述

就可以了,此时我们就将对应的文件提交到本地的git仓库了

push

然后我要推送到远端呢?

git push:将本地版本库中的提交推送到远程仓库需要填入用户名密码(可以配置免密码,这里就不说了),同步成功后, 刷新 Gitee/Github 页面就能看到代码改动了

在这里插入图片描述

在这里插入图片描述

就可以了。 不过我这里弄的不是太好,应该把proc那个目录拷过来上传的,这个里面的文件都分开了。

另外我们还可以查看提交日志:

git log

在这里插入图片描述

我们每次提交的详细信息都会在这里展示。

5.6 删除文件

那如果我们想删除某个提交的文件,怎么做呢?

比如我要把Makefile删掉

在这里插入图片描述

首先第一步 git rm 文件名:将指定的文件从工作目录和版本控制中删除。

在这里插入图片描述

再补充一个命令 git status 是一个用于查看 Git 仓库当前状态的命令。通过执行 git status,您可以了解当前工作目录中的文件状态以及与上次提交之间的差异。

在这里插入图片描述

但是此时只是在本地删除了,我想要远端也发生变化,怎么做? 再次进行commit和push

在这里插入图片描述

在这里插入图片描述

然后,看远端就变化了

在这里插入图片描述

就没有Makefile这个文件了 日志也可以查到相关记录

在这里插入图片描述

5.7 删除仓库

那我想删除一个仓库呢?

首先远端的删除,以Gitee为例:


在这里插入图片描述

直接在管理里面找删除仓库的操作就行了。

那本地的呢?


在这里插入图片描述

.git这个文件删除就行了

在这里插入图片描述