倾情力作-保姆级教程一文学会Git技术
本篇文章从Git的概述,到Git常用命令,到Git的整合远程仓库和IDEA编译器的手把手保姆教学,一个小时内让你看懂Git的所有操作。
注意:是为了给Git快速入门的朋友所制作,结合尚硅谷学习笔记以及自己的整理和心得所记录,如果有侵权问题,会立刻更改
博客地址:https://blog.csdn.net/qq_29843575?type=blog
文章目录
一、Git概述
1.什么是Git
Git 是一个免费的、开源的分布式版本控制系统,是[Linus Torvalds](https://baike.baidu.com/item/Linus Torvalds/9336769)为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件,可以快速高效地处理从小型到大型的各种项目。Git 易于学习,占地面积小,性能极快。
它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。
2.什么是版本控制
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
该图就是类似于版本控制思想。
3.为什么要用版本控制
小红要给代码增加一个222,小蓝要加一个444,如果不用版本控制的话就很容易把小红先改的222覆盖掉只有444
4.版本控制工具
集中式版本控制工具
CVS、SVN(Subversion)、VSS……
集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
好处:每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。
坏处:开发者想要签出代码、提交到仓库,或是对档案库做一些其他的操作,都必须在能够连网的环境下进行。这会大大降低开发效率。并且中央服务器的单点故障。不如服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
好处:服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的),每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
Git的结构:
二、Git的安装
1.Git下载
可以使用官网的下载,也可以用阿里云的镜像,这里因为作者网卡所以选择的是阿里云镜像
https://registry.npmmirror.com/binary.html?path=git-for-windows/v2.36.1.windows.1/
32位就选第一个红框,64位就选第二个下载红框
2.开始安装
直接点击Next
选择安装路径(所在路径无空格 无中文),然后点击next
选择以上几项,点击Next
叫你再次确认是否安装在Git该文件夹下(我这里是git,具体看你们前面的路径),直接next
选择默认编辑器,这里我们默认选择VIM,直接next
询问你是否对新的库的初始化分支进行命名,如果你选择上面,以后无论创建哪个库它默认的分支名字都是master,如果你自命名就在下面输入你想的名字然后next
询问你是否更改环境变量,这里我们选择第一个不修改,然后next
这两个都选择第一个,然后next
询问是否选择行末换行符,因为这里linux系统和windows系统不一样,所以选择第一个,它会自动识别你的系统,然后next
询问你选择哪个终端,这里默认第一个,点next
选择从远程库拉取代码时处理代码冲突的模式,默认第一,然后next
选择第一个,直接next
两个都勾选,然后下一步
不勾选,然后安装
然后右键桌面如果出现
表示安装成功。
3.用户签名设置
因为在首次使用git时要对用户签名进行设置以便于知道这次版本提交的人是谁,所以要设置用户签名
操作流程如下:
分别在git终端中输入如图两行命令,最后的用户名和邮箱由大家自己设置
验证设置正确的方法:
找到.gitconfig文件
然后选择打开方式(我选择的记事板)打开,前面设置的签名就会显示在这里
表示设置成功
三、Git的常用命令
1.创建版本库—git init
什么是版本库(仓库)?就是一个文件夹,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻还可以将文件”还原”。
2.版本提交
2.1查看状态—git status
(首次查看-工作区没有任何文件)
2.2创建新文件
现在我在这个文件夹下面创建一个hello.txt文件
2.2.1再次查看状态(再次查看-检测到未追踪的文件)
2.3添加暂存区—git add 文件名
告诉Git,把文件添加到暂存区
2.4提交文件到本地库—git commit -m " 日志信息 " 文件名
经过上述步骤,我们就把文件提交到本地库的操作学会了,下一章讲的是如何进行版本修改后的提交
3.版本控制
本次我们将用修改hello.txt这个文件,进行一次版本的控制
3.1修改hello.txt文件内容
3.2添加到暂存区和提交到本地库
工作区的修改添加到了暂存区
暂存区提交到了本地库,本次为secondcommit
3.3版本回溯
3.3.1 查看历史版本—git reflog/git log
git reflog 查看版本信息
git log 查看版本详细信息
3.3.2版本穿梭—git reset --hard 版本号
版本穿梭的意思是,比如我们现在是secondcommit,我们想要回到前面的firstcommit版本,我们就可以使用到版本穿梭
现在就回到了firstcommit版本
从查询历史版本也能看出来,head指针指到了firstcommit版本
4.Git的分支操作
4.1什么是分支操作
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。
4.2分支的命令
还是在hello.txt那个文件夹中做测试。
创建分支—git branch 分支名
查看分支—git branch -v
切换分支—git checkout 分支名
把指定的分支合并到当前分支上—git merge 分支名
4.3补充说明
**注意:**合并分支的时候有可能冲突产生的原因:
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。
这个最好是在后面Git整合Idea的时候查看,后面会提到
master、branch1.0 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。
HEAD 如果指向 master,那么我们现在就在 master 分支上。
HEAD 如果执行 branch1.0 ,那么我们现在就在 branch1.0 分支上。
四、Git的团队协作—整合Gitee和IDEA编译器
1.团队内协作和跨团队协作
1.1团队内协作
A程序员现在把代码写好了,push到远程库。B现在要去优化它的代码,只需要从远程库clone下来代码到自己的电脑上,进行修改,当B完成代码迭代后再次把代码push到远程库,注意:远程库的代码必须是最新的版本。
1.2跨团队协作
一个项目有个项目仓库,这个时候遇到了一个难题,A程序员有个挺厉害的朋友B想让他帮忙,怎么办呢?这个时候可以选择——跨团队协作。这个时候我的朋友B并不是直接作为项目参与者,而是将项目fork下来进行常规的代码修改,然后发送pull request请求,让A看看行不行合不合适,同意后进行合并操作,然后问题就解决了。
2.整合Gitee
2.1新建仓库
当我们登陆上Gitee后,我们先创建一个远程仓库
2.2远程仓库命令
查看当前所有远程地址别名—git remote -v
起别名—git remote add 别名 远程地址
推送本地分支上的内容到远程仓库—git push 别名 分支
将远程仓库的内容克隆到本地—git clone 远程地址
将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并 —git pull 远程库地址别名 远程分支名
2.3创建远程仓库别名
2.4推送本地分支到远程仓库
(切记)在推送之前先用git pull 远程库地址别名 远程分支名 将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并
然后再使用git push 别名 分支 推送本地分支上的内容到远程仓库
这样我们在本地也有了远程库里面的.gitignore,LICENSE,并且hello.txt文件也推送到了远程库
2.5将远程仓库的内容克隆到本地—git clone 远程地址
现在我在E盘下新创建了一个文件夹MyRepository2
进入文件夹后直接输入git clone 远程地址,即可把仓库克隆到本地
clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名
补充:通过ssh公钥来操作访问远程库
补充1.为什么要用ssh公钥
之前我们push、clone到远程库通过的是https的传输协议,他和ssh公钥的区别在于
1.clone项目:使用ssh方式时,需要配置个人的ssh key,并将生成的ssh公钥配置到git服务器中。下面会谈到如何生成并设置你的ssh key。而对于使用https方式来讲,就没有这些要求。
2.push:在使用ssh方式时,是不需要验证用户名和密码,如果你在配置ssh key时设置了密码,则需要验证密码。而对于使用https方式来讲,每次push都需要验证用户名和密码。
ssh:
- 一般使用22端口;
- 通过先在本地生成SSH密钥对再把公钥上传到服务器;
- 速度相较慢点
https:
- 一般使用443端口;
- 通过用户名/密码授权,可用性比较高;
- 速度相较快点
一般企业防火墙会打开80和443这两个http/https协议的端口,因此在架设了企业防火墙的时候使用http就可以很好的绕开安全限制使用git了,很方便;而对于ssh来说,企业防火墙很可能没打开22端口。
补充2.如何配置ssh公钥
1.配置用户签名
我们在二.3的时候已经进行过了用户签名设置,这里就不再赘述
2.生成添加ssh公匙
- 在GitBash界面按照如下命令生成公匙
MateBook@DESKTOP-EPMUJF3 MINGW64 /e/Myrepository3 (master)
$ ssh-keygen -t rsa -C "fattershady@126.com"
最后的邮箱填自己的就行
2.打开id_rsa.pub文件,复制其中的内容到gitee上的
复制到④即可
3.验证ssh公钥是否设置成功
MateBook@DESKTOP-EPMUJF3 MINGW64 /e/Myrepository3 (master)
$ ssh -T git@gitee.com
输入以下命令如果出现
则设置成功
补充3.使用ssh公钥进行push和clone操作
1.和https一样,点击克隆/下载按钮,选到ssh,把这个复制下来
2.进行代码clone
$ git clone git@gitee.com:arthornzzz777/baklib.git
成功完成
3.进行代码的push
$ git push origin master
2.6团队内协作实现
现在有一个新团队成员clone了我的FirstDemo,并且想要更改代码并且推送到远程库,做法如下
2.6.1添加仓库成员
让项目管理者点击添加仓库成员,复制链接地址
2.6.2被添加的成员接受邀请
成员复制刚刚收到的链接选择接受按钮即可
2.6.3提交更新的版本
2.7跨团队合作实现
现在有一个不是本团队的成员B要帮助我们迭代版本,并且想要更改代码并且推送到远程库,做法如下
2.7.1Fork仓库
先让B Fork我们的远程仓库地址
2.7.2提交pull request
比如这次还是修改hello.txt的内容,提交过后点击pull request按钮
2.7.3仓库管理者审核
当提交过后,仓库管理者会受到审核请求,点击审查 测试通过 合并即可
2.7.4查看效果
3.Git集成IDEA编译器
3.1定位Git程序
打开IDEA->File->Settings
3.2初始化本地库
选择要创建 Git 本地仓库的工程。
3.3 添加到暂存区
右键点击项目选择 Git -> Add 将项目添加到暂存区。
3.4提交到本地库
3.5版本穿梭
3.6创建/切换分支
3.6.1选择 Git,在 Repository 里面,点击 Branches 按钮
\image-20220424204048837.png
3.6.2然后再 IDEA 的右下角看到Branch1,说明分支Branch1创建成功,并且点击分支上的 CheckOut即可切换分支
3.7合并分支
如果代码没有冲突,分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交本地库。
4.IDEA集成Gitee
4.1安装Gitee插件
4.2添加Gitee账号
然后在码云插件里面添加码云帐号,我们就可以用 Idea 连接码云了。
4.3分享工程到Gitee
4.4push工程到Gitee
4.5pull工程到IDEA
4.6IDEA Clone项目
4.6.1回到IDEA开始界面
4.6.2正常创建即可
六、结语
本篇文章从Git的概述,Git的安装、到Git常用命令,到Git的整合远程仓库和IDEA编译器的手把手保姆教学,适合刚入门Git并且要速成的朋友,可能有些内容并没有讲得很细很清楚,如果又不懂得地方可以百度搜索相关问题。