ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Git 分布式版本控制系统

2021-07-16 20:02:05  阅读:134  来源: 互联网

标签:协议 git 仓库 控制系统 Git 本地 分支 分布式


由于本人公司用的SVN,时间长了对Git的操作有些陌生了,所以写一篇博客来复习并记录一下Git的使用。

一、聊聊什么是版本控制?

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

简单来说就是用于管理多人协同开发项目的技术,一个开发团队有很多人,这些人在共同开发一个项目,那肯定要有一个软件来记录每个人开发的进度之类的,这就是版本控制。

常见的版本控制工具有SVNGit、CVS、VSS、TFS等。其中目前最常用的两种是SVN与Git。

SVN属于 集中式版本控制
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改

在这里插入图片描述
SVN,所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。

Git属于 分布式版本控制
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。
在这里插入图片描述
SVN与Git的区别:
SVN是集中式版本控制系统,版本库是放在中央服务器上的,工作时候的流程就是,首先要将自己本地的项目先update更新到最新的服务器版本,然后工作(敲代码),最后(下班的时候)把自己敲好的代码commit提交到中央服务器。集中式版本控制系统必须联网才能操作,不然就没办法update commit 或者查看历史提交记录,仓库信息之类的,这一系列动作都必须联网才能操作。

Git是分布式版本控制系统,它没有中央服务器这一说,每个人的电脑就是一个完整的版本库,因为仓库信息都在你本地了,所以当你commit或者查看历史版本提交记录时就不需要联网了。但是如果你要pull拉取最新远程仓库到本地,或者将本地仓库push到远程仓库时,还是要联网的!

二、Git安装及常用命令

下载地址:git官网淘宝镜像 两种方式都可以下载,使用淘宝镜像会快一点。
这里示例使用淘宝镜像下载:
打开下载链接,页面如下,拉到最下面就是git最新的版本:
在这里插入图片描述
然后选择适合自己系统的版本,这里选择的是window64位对应的版本:
在这里插入图片描述
下载完成后打开,傻瓜式安装下一步即可,安装路径可以改一下。

安装完成后,在桌面或者其他位置,右键点击就可以看到git:
在这里插入图片描述
Git CMD:Windows风格的命令行
Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令
Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多

上面这3个都可以操作git,但是使用最多的是Git Bash。Git Bash打开后是以下界面:
在这里插入图片描述

Git Bash是采用的Linux风格的命令行,所以要首先对Linux命令有一定的掌握哦~

安装Git后第一件事就是要设置自己的用户名和邮箱:

git config --global user.name "hhl" #名称 
git config --global user.email 123456@qq.com #邮箱

设置用户名和邮箱的目的是当你提交代码到远程仓库的时候,历史记录上会显示是谁提交的代码
但是注意,这里配置的用户名和邮箱只是单纯的为了让远程仓库记录每一次的操作是谁提交的这里的用户名邮箱和push到远程仓库时身份验证没啥关系(身份验证是ssh协议公钥私钥,或者使用https协议直接在github对应的仓库上添加用户,下面再解释)。

查看Git配置命令:

git config --system --list # 查看系统config
git config --global --list # 查看当前用户(global)配置

配置文件位置:
Git\mingw64\etc\gitconfig Git相关配置
C:\Users\Administrator\ .gitconfig 当前用户的配置,也就是上面用户名和邮箱的配置存储的地方,也可以直接在这个文件中写入配置。

三、Git中的https协议和ssh协议

我们需要从github或者gitee上下载代码,那必然会有传输协议,git中主要有四种协议:本地协议(Local),HTTPS 协议SSH(Secure Shell)协议及 git 协议。其中,本地协议由于目前大都是进行远程开发和共享代码所以一般不常用,而git协议由于缺乏授权机制且较难架设所以也不常用。

所以最常用的就是https协议和ssh协议。上面提到的身份验证,也就是说的这两种的协议对应的身份验证。

Https协议:
先来说一说https协议:
https协议最大的一个好处就是可以使用用户名/密码的形式授权,相较于ssh协议要生成私钥公钥再将公钥上传到服务器简单的很多。缺点是https协议相较于ssh协议速度会较慢
在这里插入图片描述

再来看ssh协议:
ssh协议,需要用户在本地电脑生成一对公钥和私钥(如何生成看下面),公钥是需要给服务器的
在这里插入图片描述
服务器添加完我们给的公钥后,我们在自己的电脑上clone 代码时,服务器就会通过它添加的公钥来匹配我们电脑上对应的私钥,若匹配成功,则就可以正常的clone、pull、push代码了,而且使用ssh协议就省略了像https协议每次还要输入用户名密码验证的这个步骤。

注意:你clone代码时用的哪种协议,就要用哪种协议的验证方法,且后续的pull、push都是用的对应的协议。

https协议和ssh协议总结:

  1. HTTPS利于匿名访问,适合开源项目,可以方便被别人克隆和读取。(因为开源项目使用https协议clone代码时,是不需要验证的,但是push是要验证的)
  2. SSH不利于匿名访问,比较适合内部项目,只要配置了SSH公钥极可自由实现clone和push操作

如何在本地电脑生成公钥和私钥?

  1. 进入C:\Users\Administrator.ssh 该目录下,若改目录下已经有了公钥id_rsa.pub和私钥id_rsa了,那就不用生成了,把公钥的内容直接给到服务器即可。若没有就按照以下步骤生成
  2. 在该目录下打开命令窗口,输入ssh-keygen -t rsa 此命令,之后按照提示完成三次回车即可
    在这里插入图片描述
  3. 然后该目录下就生成公钥和私钥了,之后把公钥给到服务器即可
    在这里插入图片描述

四、Git基本理论和操作

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
在这里插入图片描述
相较于SVN不同的是,Git多了一个暂存区,暂存区就是临时存放你的改动,事实上它只是一个文件用来记录你的修改内容。

在这里插入图片描述
上面这个图就是我们经常会用到的操作

  1. 首先我们要先clone远程仓库到本地:git clone url (本地创建仓库是 git init)
  2. 修改本地代码
  3. 添加本地修改代码到暂存区: git add .
  4. 提交到本地仓库:git commit -m "第一次提交代码啊"
  5. 将本地仓库的修改推送到远程仓库: git push
  6. 如果要更新本地仓库的话是:git pull

五、IDEA中使用Git(重点)

在我们开发中肯定是用工具来操作git的,git bush我们熟悉掌握基本的git命令即可,重点还是在对应的开发工具中如果使用Git,作为一个java开发者,当然是在IDEA中使用Git了。

  1. 由于idea不自带git,所以首先要设置git安装路径:
    在这里插入图片描述

  2. 在本地工作目录打开git bush clone下来远程仓库
    在这里插入图片描述

  3. 通过IDEA打开此项目
    在这里插入图片描述
    下面来演示修改代码后如何提交

  4. 修改代码
    在这里插入图片描述

  5. 点击上面的commit按钮
    在这里插入图片描述

  6. 将本地仓库push到远程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

如何指定忽略文件?

有一些文件比如.idea这是idea自动生成的,或者targer这些文件,我们不需要加到版本控制中,那么就可以忽略这些文件,这样在提交时就不会提交这些文件了。

首先要先安装一个.ignore插件
在这里插入图片描述
然后在项目根目录下创建.gitignore文件,里面输入我们要忽略的文件即可
在这里插入图片描述

六、Git中的分支及在IDEA中操作分支合并代码(重点)

首先先来理解一下分支这个概念,分支就像科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!
在这里插入图片描述
可直接在远程仓库创建分支,然后可以看到当前项目有两个分支:master和test
在这里插入图片描述
在这里插入图片描述
由上图可以看到我们本地只有master分支,现在我们需要把test分支拉取下来:
点击idea右下角git,选择远程test分支,checkout到本地
在这里插入图片描述
然后就可以看到本地test分支了:
在这里插入图片描述
接下来我们修改test分支上的代码,并将test代码合并到master分支上:

  1. 修改test分支代码,并完成add commit push一系列动作
    在这里插入图片描述

  2. 本地项目切换分支,切换到master分支上
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  3. 将远程test分支合并到本地master分支上,合并有两种方式,一种是将test分支上所有的提交记录一起合并到master
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. 还有一种就是,我们在test分支上提交了很多次记录,我只想合并其中的某一条或几条记录的内容到master分支上,而并不想让test分支上的所有内容合并到master上,这时候我们可以选择某几条特定的来合并
    在这里插入图片描述
    注意:Cherry-Pick只能单条单条记录的合并,且每合并一条后,需要commit后才能再合并第二条

标签:协议,git,仓库,控制系统,Git,本地,分支,分布式
来源: https://blog.csdn.net/hl404/article/details/118726819

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有