这篇文章我们继续学习开发工具,今天要学的是开源的分布式版本控制系统——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
这个文件删除就行了