生命不息,奋斗不止/创造价值-传递价值-获得价值
所谓迷茫,就是才华配不上梦想 每一个让你难堪的现在,都有一个不够努力的曾经

git 详解,10分钟学会

图片

大家好,欢迎来到停止重构的频道。

本期我们讨论Git

Git是开源的版本控制系统常用于代码管理、文件管理等场景。

图片

需要提前说明的是,本期只讨论Git本身,至于实际项目中多人合作、多版本管理等问题。

实际上是团队工作流的问题,我们将在下一期展开。

提纲

我们按以下顺序展开讨论

1、Git介绍

2、Git工作原理

3、Git服务端、客户端安装

4、Git常用操作

Git介绍

首先介绍Git,Git是一个开源的版本控制系统,常用于代码管理等场景。

简单地说,可以将Git理解为存储文件的仓库,方便多个用户将文件集中存储到服务器中,或从服务器下载文件副本到本地磁盘。

文件的类型不受限制可以是代码等文本文件,也可以是图片、视频等媒体文件。

图片

当然,Git服务并不是简单地存储文件,它会记录每一次文件修改。用户可翻看历史版本的文件,或者删除某些历史修改以还原文件。

这也称为版本管理。

图片

虽然听上去版本管理没有太大的作用,但是在多人参与或长时间开发的软件项目下,版本管理是必要的

例如,在实际开发过程中,会经常出现一些功能回退。就是以前好用的,现在却出现BUG的情况。

通过翻看代码文件的历史版本,可较快速地定位哪次修改影响了这个功能,也能知道团队中哪个人做了这次修改。

图片

当然,能做文件版本管理的当然不只有Git。

SVN也可以,不过,一般都认为Git是优于SVN的。毕竟Git的作者是因为受不了SVN才编写了Git。

相对于SVN,Git允许分布式部署。另外,Git需要的存储空间也会相对少一些,Git是按元数据存储的,而SVN则是按文件存储。

最重要的,Git服务是一个系统核心,用户可选择功能更加丰富的平台服务,如GitHub、Gitlab。

图片

那么,Git、Gitlab、GitHub是什么关系呢

Git可以理解为系统核心是没有界面的。

Gitlab、GitHub是在Git基础上建设的平台里面包含Git服务,这些平台拥有更加完善的后台管理网站。也拥有更加丰富的功能,如项目管理、版本视图、权限管理等。

图片

所以我们一般不直接使用或部署Git服务,而是使用功能更加完善的Gitlab、GitHub平台服务,其中Gitlab支持私有化部署。

图片

Git工作原理

接下来是Git的工作原理。

Git是c/s(客户端-服务端)架构的服务整体结构分4个部分:远程服务、远程仓库、本地Git客户端软件、本地仓库副本。

图片

远程服务是Git的服务端,更具体的说,就是Gitlab、GitHub等平台,或者是自己在服务器安装的Gitlab。

远程服务接受文件获取、上传等请求,并记录每个文件的修改。用户可通过远程服务提供的管理网站管理仓库、历史修改等。

图片

远程服务端的文件是按仓库为单位存储的用户可创建多个仓库,一个仓库可以简单地理解为一个文件夹,一个仓库下允许存储多个文件、创建多级文件夹目录。

且文件的类型不受限制可以是代码等文本文件,也可以是图片、视频等媒体文件。

图片

本地Git客户端是安装在本地的软件,Git客户端是同步远程仓库与本地仓库副本的关键。

用户需要通过Git客户端,从远程服务端克隆、更新本地仓库副本。也需要通过Git客户端,才能将本地仓库副本的修改同步到远程仓库。

图片

本地仓库副本对应远程服务端中的一个仓库,实质上是根据远程仓库克隆到本地磁盘的一个文件夹。

文件夹内的文件对应远程仓库的文件,文件夹内的文件是可以自由操作的,跟普通的文件操作没有区别。

图片

本地仓库副本对比普通的文件夹只是多了一个.git的隐藏文件夹里面会记录远程仓库信息、日志、未提交远程仓库的记录等。

图片

Git服务端、客户端安装

接下来是Git服务端、客户端安装。

Git服务端的话,可以是GitHub、Gitlab等平台,如果希望私有化部署Git服务的话,推荐以docker的形式安装Gitlab。

安装命令如图所示,如果对docker不太熟悉,可以翻看往期内容。

图片

另外,如果担心私有化部署有磁盘损坏风险的话,Gitlab也支持集群化部署、第三方平台仓库备份等,这里不作展开。

Git客户端是每个用户都需要安装的,Git客户端通常是命令行工具。

图片

当然,也可以选择有图形界面的Git客户端软件,如GitHub desktop、Fork等。

图片

另外,一些代码编辑软件是集成Git客户端的,如Vscode。使用这些代码编辑软件的话,可以不安装额外的Git客户端。

图片

Git常用操作

接下来是Git的常用操作,我们将Git常用操作根据操作顺序分为:

1、新建项目、项目管理

2、克隆、更新项目

3、上传本地修改

操作:新建、管理远程仓库

首先是新建、管理远程仓库。

虽然Git客户端也可以完成这一操作,但是操作起来比较麻烦,所以一般新建、管理仓库都在服务端提供的管理网站完成

以Gitlab为例,在后台管理页面即可新建远程仓库。

图片

关于远程仓库管理,有几个点需要特别说明,分别是修改记录、分支、tag、权限

图片

修改记录是每次上传更新的记录,每个修改记录都有唯一的修改记录id,个修改记录可能包含多个文件的修改。

用户可以查看单次修改的具体内容,也可以对此次修改进行回滚操作。

图片

回滚操作实际上是新提交一次更新以复原修改,但是回滚的修改记录不是最新修改记录的话,则会可能由于修改冲突而失败这时候则需要人工修改再提交远程仓库。

图片

分支是一个远程仓库内的多个独立副本,每个分支都是完全独立互不影响的包括文件、修改记录等都是完全独立的。

一个远程仓库默认有一个主分支,默认情况下,文件会存储到主分支。

图片

用户创建新分支时,需要基于某个修改记录、某个分支、或者某个tag才能创建。

图片

一个分支的多次修改可一次全部更新到别的分支称为合并

合并操作实际上是对目标分支提交一次新修改,但是如果目标分支也修改过某个文件,则可能由于修改冲突而失败这时候也需要通过人工修改文件更新到目标分支。

图片

tag是一个标识用于标记某个修改记录。

便于归档对应分支下截止到此次修改的文件,防止因为修改记录太多而造成混乱,方便版本迭代管理

图片

tag与分支是不同的tag只是标记修改记录方便查看,是不允许更新操作的,而分支是一个独立的副本,允许更新文件。

图片

最后,管理员可对仓库进行用户权限管理包括查看、文件修改、仓库管理等权限。

图片

操作:克隆、更新本地副本

接下来是关于本地仓库副本的克隆、更新操作。

当需要拉取某个远程仓库的文件到本地时需要先在管理页面获取远程仓库的克隆地址然后使用git客户端将远程仓库克隆到本地。克隆命令如图所示。

图片

当然也可以使用Github desktop等软件进行操作,操作原理是一样的。

图片

顺便一提,如果仅仅是为了方便查看远程仓库的文件可以直接从管理页面下载文件压缩包

但是直接下载文件压缩包的话,不支持后续更新、上传操作的。

图片

默认情况下,克隆的是远程仓库的主分支,如果希望切换别的分支,可以通过git客户端切换分支。

切换分支后,本地仓库副本中的文件将会改变。

图片

值得注意的是,如果当前仓库副本中的文件被修改了且未提交不能切换分支。如果需要使用一个远程仓库的多个分支的代码,建议克隆多个本地仓库副本。

图片

如果远程仓库的文件被别的用户更新了,可通过更新操作更新本地仓库副本的文件。

图片

但是如果恰巧需要更新的文件本地也修改了则会发生更新冲突而更新失败。

图片

发生更新冲突时可以通过git stash命令暂存本地修改,新完毕后再恢复本地修改,git将会把更新冲突的内容标记出来。后续需要人工处理这些更新冲突的内容。

图片

当然,发生更新冲突时,也可以克隆一份新的本地仓库副本,再通过beyond compare等工具对比差异文件,再人工修改这些差异内容。

图片

这里顺便一提,随着多次提交、更新操作,本地仓库副本的.git文件夹会越来越大。

要是想对.git文件夹进行瘦身虽然有更官方的做法。但是我们更推荐,在确保修改已同步到远程仓库的前提下,除并重新克隆一个本地仓库副本。

图片

操作:上传修改

最后是上传操作对本地仓储副本中的文件修改完成后,需要手动上传到远程仓库才能同步

上传一般分为3步添加文件到暂存区、提交本地仓库、提交远程仓库。

图片

加文件到暂存区是选定哪些被修改的文件为此次上传的内容,github desktop等软件的话,直接勾选就可以了。

图片

Git命令行工具的话,则需要先通过git status命令查看被修改的文件列表,然后通过git add命令添加文件到暂存区。

图片

这里顺便一提,Git认为空文件夹是无效的也就是不会提交。

这种情况可以在空文件夹内创建.gitkeep文件当然其他名字也可以,仅是为了让这个文件夹不空。

图片

另外,Git对文件名的大小写不敏感所以如果将文件名从小写的config改成大写的CONIFG,Git并不会认为这是一次更新。

这种情况需要用户删除文件上传同步后,再重新添加文件再上传同步。

图片

添加文件到暂存区后,就可以提交本地仓库了。提交本地仓库是将暂存区的修改内容打包成一次更新,需要用户为此次更新填写更新日志。

图片

提交本地仓库后并不会同步远程仓库Git客户端仅仅将此次修改,记录在本地仓库副本的.git文件夹中。

用户可多次添加文件到暂存区并提交本地仓库,以根据不同修改目的,记录多个更新、填写多个更新日志。

图片

最后是上传远程仓库上传远程仓库可一次性将多次本地仓库修改同步到远程仓库。上传远程仓库后,本地仓库副本的修改才会真正同步到远程仓库。

图片

提交远程仓库时要求本地仓库副本为远程仓库的最新版本,如果没有更新冲突,则更新完本地仓库副本后再次提交即可。

但是如果发生更新冲突的话,就是恰巧本地修改的文件在远程仓库中也被修改了。

则需要先撤销之前提交的本地仓库修改,解决好更新冲突后,再重新提交上传。决更新冲突的方法请翻看前面内容。

图片

当然,也可以忽略更新冲突,制上传远程仓库,但这个非常不推荐这个操作会引起团队代码覆盖的问题,就是把别人代码弄没了。

图片

总结

本期介绍了Git与其常用的操作,关于Git更多的操作说明可以查看官网。

从本期不难发现,更新冲突是比较麻烦的事情,必须用户手动解决。

那么是否有规避的解决方案呢,我们将在下一期展开讨论,在多人参与、多版本管理的场景下,何用好Git。

赞(0)
未经允许不得转载:jack361博客 » git 详解,10分钟学会

如果你爱我或恨我,请↓

联系我