目录
0.概述
学习目标
PS:GitHub就是一个远程仓库存储公司代码。由于服务器在国外,速度慢。
gitee是一个类似于GitHub的国内代码托管平台。由于服务器在国内,速度快。
gitlab是一个局域网的代码托管服务。其目的是公司代码是私有的不开源的,不想放在互联网上的需求。
注:git,maven是实习生的两大杀手。开发,前端都会用到,因此一定要学好。
电子资料:目录
1.git概述
PS:git的官方图标就是一个分支。说明它的分支功能强大。
git应用广泛,许多公司都在用。
官网会明确显示最新版本,点击下载后会自己识别系统的位数。
1.1 版本控制
含义:
为什么需要版本控制:
从个人开发过渡到团队协作
这种并发的开发项目并完善很明显需要这样的git的功能。
1.2版本控制工具(两类)
PS:分布式每台电脑就是一个代码库。集中式的致命缺陷就是服务器单点故障问题。
分布式的结构都有一个远程库,为了同步数据统一,本地库会将修改的内容上传到远程库中。分布式就是数据源分布在好多服务器,它们相互配合就可以工作。就算有一个服务器宕机,其他服务器也可以接管它的工作。
我觉得重点在于:SVN在本地只保留一个版本,服务器要是永久损坏,那以往版本就是不可修复的,而分布式的是将整个库放在了所有节点上(包括自己的电脑),服务器挂了,找另一个服务器推送上去就可以恢复版本。
1.3 git历史
PS:git和Linux拥有同一个“爸爸”。~~
git的历史曲折而有趣,划时代的就是2005年。git开发原因bitmover公司不允许破解软件的要求被Linux社区的一个程序员破解。这种托管软件,极大的减轻了手动合并代码的负担。膜拜林大神。~~
1.4 工作机制
工作区,是代码存放的计算机磁盘位置,即代码目录。
PS:在暂存区和工作区代码可以删除,一旦提交到本地库,形成历史版本。代码无法删除。
因为git版本是基于上一个版本的。例如版本1,添加了不好的代码。只能在基于版本1的基础上修改形成版本2,尽管版本2删掉了版本1不好的话,但如果回退到历史版本1,还能看到那个不好的话。
1.5 代码托管中心(远程库)
2.git安装
一般next就行。
PS:说明一些注意
默认主分支master,当然自定义的话就是main。
这个作用是方便代码pull push。登录一次后就不需要再登。new表示是新版本的特性。
PS:git bash命令行
git gui图形化界面
3. git常用命令
3.1 设置用户签名
不设置签名提交代码会报错。
这里注意,最好用自己创建github的邮箱,不然提交的时候没有小绿点!!!!!!!!
查看用户签名信息。
3.2 初始化本地库
PS:git bash的命令和Linux命令是通用的。
3.3 查看本地库状态
git status
PS:初始化本地库后,会在目录下生成一个.git的隐藏文件夹。
3.4 添加暂存区
自动换行符发生变化。
PS:暂存区可以删除不想保存为历史版本的文件。暂存区在.git目录里
3.5提交到本地库
主分支:第一次提交 画红线的就是本次提交的版本号。
一个文件改变,16行被插入。
这是再查看库状态会发现没有了nocommit yet。
查看本地库版本信息。第一个命令显示简略版本号,第二个命令查看完整信息和完整版本号,还能查看,提交的用户是谁。
3.6 修改文件
PS:本地仓库存储位置位于.git的隐藏文件夹中
文件被修改后变为红色,表示没有添加到暂存区。
因为是在同一行修改文件,所以会出现新增一行,删除一行的提示。
HEAD指针指向第二个版本,所以查看文件内容就是新的修改后的这个文件。
PS:git status:显示工作目录和暂存区的状态
3.7 历史版本
发现指针指向第二个版本
查看当前指针指向的位置,在head文件中
查看当前版本号信息。
PS:借助git很好的实现版本控制。不仅可以做到往前穿越,还做到往后穿越。底层借助内存指针实现。
4. git分支
4.1 概述
公式服务器的运行模式
分支更新的原理图。master运行。hotfix进行紧急维护。还有添加蓝色背景,游戏特性。改动较大的就直接升级一个大版本。
分支具有好处。
4.2 查看&创建&切换分支
4.3 合并分支(正常合并)
切换到master分支,执行合并命令,将hot分支合并到master分支。发现hot分支修改的内容成功应用到了master分支。
4.4 合并分支(冲突合并)
冲突实验展示
首先在master分支上修改,在文件倒数第二行新增内容
第二步,在hot分支上进行修改同一个文件
此时,切换到master分支。
这种情况是在俩个分支都对同一个文件进行了修改,此时git不知道帮助我们保存哪个修改。那么报出合并冲突。那么解决办法是人为手动合并分支。
PS:冲突文件详细说明
HEAD与===之间的是当前master分支修改的内容。===与大于号之间的代码是hot分支修改的内容。
修改成功后,此时合并有几个细节参考下图
我们发现冲突的hot内容合并到了master分支,但是,hot分支的文件内容并没有实现合并。
合并分支的底层也是一个指针实现。git底层玩的就是指针,一个head指针,指向具体分支,绝对当前在哪个分支;另一个指针就是master(或者是其他分支)指针,指向具体版本号。
master分支有四个版本
此时多出来一个分支对master第三个分支进行修改。
对分支进行了修改。hotfix指针指向hotfix
head指针指向hotfix,是分支的切换,不是合并,合并是master指针指向hot-fix版本,演示的head头指针指向的是hot-fix分支指针,这个叫做切换分支。head:表示git当前正在使用的分支。
5. git团队协作机制
团队协作这时候就需要一个代码托管中心GitHub。
5.1 团队内协作
5.2 跨团队协作
这里涉及到两个或多个团队,他们这些团队有自己的远程库。
我们发现git的版本控制都是在本地库中进行,这就再次印证了git的分布式这一特点。
6. GitHub操作
6.1 创建远程仓库
创建远程库的名字最好和本地库的名字相同,方便识别。远程库可能与其他的远程库的名字重复,但是没有关系,它是基于用户的名字的。owner的名字不同,是区分库的重要标识。
GitHub私有库是收费的,有人数限制,超过限制还要支取一定的费用,因此,如果企业需要,建议搭建gitlab。
6.2 远程仓库操作
6.2.1 创建远程库别名
远程库名链接太长,记不住,所以要创建别名。这样我们之后push pull代码的时候就很方便了。
如图,创建一个与本地库同名的git-demo别名。
6.2.2 推送本地库到远程库
PS:如果没有起别名,可以换成链接。
会提示我们输入账号密码。
显示推送成功后,还可以在网站上直接编辑代码,如果你的实力够强,完全可以实现远程库中在线编辑文件。编辑的标志是一个笔标志。
6.2.3 拉取远程库到本地库
如果修改了远程库的内容,这是本地库不与远程库保持同步,那么怎样才能保持本地库与远程库的同步呢?
这是拉取就起到了作用。
拉取会自动帮你提交本地库。
6.2.4 克隆远程库到本地库
需求是让一个用户看到公司远程库。这就需要建一个新的本地库,并把远程库克隆到新用户的本地库。
PS:克隆是本地没有时用的,拉取是本地已经有了的时候用的。克隆公共远程库是不需要登录账号的。
克隆代码会帮助自动完成3件事。
PS:上图自动为远程库取了别名origin。
6.2.5 团队内协作
PS:重要,必须掌握基本的步骤
先来一个错误的演示,再说明为什么,最后成功实现推送。
这里假设有a和b俩个用户。b用户没有在团队内,需要A邀请B才能让b用户的代码push到公司远程库。
首先,从b用户开始。b用户对代码进行了修改
下图是修改的内容,添加了一行222
此时b打算将本地库push到a远程库。
此时会出现b用户的信息添加到凭证管理器中。
但是呢?push出错了?
PS:因为a公司还没有邀请b到团队内,GitHub平台不知道b在不在a团队中。b是不能将自己修改的代码提交远程库的。下面正式开始。
此时可以复制邀请函,他的本质也是一个链接
PS:这个链接就是公司发给你的邀请加入公司库的代码。
点击接受
如图所示,成功加入。
这时候b用户就能正确提交了自己的代码到公司远程库了。
接着a就能拉取代码更新自己的本地库了。
注意这是a要拉取代码是由于之前在同一台计算机上登录了b的凭证,这是还要先删除b的凭证。换成a的凭证才可以让a用户拉取远程库。
这是a用户把b修改提交过的远程库拉取到自己的本地库,也可以看到b修改的代码,最后一行2222了。
6.2.6 跨团队协作
这时另一个团队想要合作a和b所在的远程库,需要跨团队协作。
PS:可以直接搜索项目,搜库名可能很多,但加上用户名就只有唯一一个。
首先b公司,需要fork叉一下到自己的远程库。
可以明显看到库从哪里fork的。
A公司最后合并了b公司所修改的内容。
6.2.7 ssh免密登录
首先要想实现免密码登录,需要添加本地用户的ssh公钥到GitHub进行。
如何生成公钥
这个账户就可以实现ssh免密登录了。
输入命令后,连续敲3次回车。即可生成ssh公钥。
添加ssh公钥到GitHub
测试ssh免密登录
发现pull远程库时不需要再进行登录了。
查看本地库内容与远程库内容一致。
接下来在本地库进行修改,提交。
发现提交代码也不用登录就可以了。
6.3 IDEA集成git(重点)
6.3.1 环境准备
PS:IDEA是IDE的一个具体工具,开发java具有较好的优势
之前我们都是在git命令行玩git,但是公式需要再IDEA中进行。
首先需要进行环境配置
忽略的文件内容如下
接下来,打开开发工具。找到版本控制,路径是git的安装路径。选中git.exe。
出现版本信息就表示配置成功。
6.3.2 初始化,添加,提交
右击项目,查看项目路径
发现没有进行git版本控制。因为没有.git文件
查看本地项目是发现并没有.git文件,说明git没有对他进行版本控制。
这时要添加版本控制git。VCS表示version control setting。
此时出现.git。表示对项目进行了初始化本地库。
这是pom文件变红了,git中变红表示文件未被追踪。
进行add添加到缓存区,颜色变绿。
文件的颜色不会影响代码的执行。这时创建了一个新文件,并编写了几行代码。
如果项目文件很多,提交可以直接右击项目,选git的commit
我们发现提交后所有的文件全都变为正常颜色。
6.3.3 切换版本
修改文件内容后,进入提交界面
PS:修改后的但以前被追踪过的文件显示为蓝色
可以清楚的看到哪些内容被修改了
如何查看所以版本信息呢?
还可以看到指针指向的位置
切换版本点击checkout即可
发现代码文件也会发生变化,这样就实现了版本控制。
6.3.4 创建分支以及切换分支
创建分支的同时切换分支。
idea右下角的位置,点击分支就能看到,分支信息。
6.3.5 合并分支(无冲突)
首先建立hotfix分支,修改文件内容
提交修改的代码
但是发现master分支文件内容没有实现修改
这时切换到master分支,点击hot分支,选择合并,即可。
这样在master分支文件代码就实现了修改。
6.3.6 合并分支(有冲突)
发生情况就是俩个分支同时进行修改,提交后,进行合并就会发生冲突。
首先切换至hot-fix分支。修改代码。
切换到master分支,也进行代码修改。然后提交。
可以明确看到俩个分支都进行了修改。
在master分支上进行hotfix代码合并 。
弹出冲突框。
此时手动点击merge,出现下图信息
PS:左边是master分支代码内容,中间原始的,右边的是hotfix的。
合并点击图中>>,叉号代表删除。发现合并冲突代码非常简单。
显示所有的冲突已经完成,上面是最终的代码。
查看日志信息发现合并了俩个版本。
6.4 IDEA集成github(重点)
6.4.1 设置github账号
检查是否集成github。setting选择VC,。
如果没有的话下载一个插件即可。
账号密码很难登录,有一种另外的方法,使用口令。
此时需要先创建一个口令,
给口令起个名字, 然后把下面的全打对勾,这些都是权限的意思。
生成口令
复制口令将他粘贴到一个位置,因为一旦刷新口令就消失了。消失后还需在创建一个新口令。
6.4.2 分享工程到github
github插件已经能够非常方便的实现我们代码的提交。一般远程库与本地库的名字一致即可。
PS:库名,第二个是别名 。
发现成功分享到了远程库。
分享操作实现了创建远程库,并且还push了代码。
6.4.3 推送本地库到远程库
gittest是别名 。提交默认是HTTPs,这种很容易因为网络问题而失败,所以更推荐ssh哪个链接。
那如何使用ssh进行代码push呢?
之后出现一个对话框,输入别名,和复制的ssh远程链接。
选择ssh这一项
查看远程库,发现提交成功
6.4.4 拉取远程库到本地库
在远程库修改一下代码,提交修改。
PS:这里一定要注意,先pull最新的远程库,然后在修改最新的本地库,之后再提交代码。
因为本地库版本低于远程库版本,是不能实现提交的。
拉取远程库时尽量别改本地库,有时候会出现冲突。
选择拉取链接方式。还要勾选一下master分支。
代码成功拉取到了本地。
6.4.5 克隆远程库到本地
当本地没有这个代码库时,我们可以克隆远程库的到本地。
可以从Git与SVN上克隆。
输入远程库的链接,选择本地库所在目录
发现远程库已经到达了本地库。
7. Git_码云(重点)
7.1基本使用
上图就是码云的基本页面显示。
由于码云的服务器在国内,所以直接使用HTTP就OK的。
7.2 IDEA集成Gitee
登录自己的码云账号
当然也可以自己先创建远程库,然后push本地库代码到远程库中。
自定义远程库与添加远程库链接
修改代码后的提交工作
本地库拉取远程库操作
7.3 导入github项目
在创建仓库的页面有一个导入功能。这个功能就是当由于网络等各种原因出问题时,无法访问公司在github上的远程库,Gitee提供了一个从github远程迁移仓库的功能。直接复制到码云中。
github上的代码就到码云上了。
Gitee提供了一个更新同步github远程库的功能
如下图修改github远程库的代码
点击更新同步,发现Gitee与远程github的代码一致了。
8 gitlab
8.1 简介与安装环境准备
自建代码托管平台
可以看出要求服务器的配置还是较高的。
gitlab安装
修改服务器的ip地址
修改主机名hostname
之后roboot重启服务器。
修改windowhost文件,保证能够访问到gitlab服务器 。
使用Xshell进行与服务器的链接
由于配置了host文件,所以主机名可以不用ip地址,直接使用自定义好的主机名。
登录服务器的用户。
查看服务器ip与主机名。
使用Xftp将文件发送到服务器。
安装环境就已经搭建好了。
8.2 安装&初始化服务&启动服务
安装十分繁琐,建议寻找网上gitlab安装脚本。
如下图就是脚本的内容
接下来进行初始化与启动服务
8.3 登录gitlab并创建远程库
使用浏览器访问,可以使主机名也可以是ip地址
gitlab初始时默认创建了root账号,初始页面需要设置root账户密码。
创建远程库
创建远程库成功
8.4 IDEA集成gitlab
安装gitlab插件
检查是否安装成功,有gitlab。
添加gitlab服务器(就是上一节创建好的Linuxgitlab服务器)
显示已连接
远程库链接
在IDEA中将本地库push到远程gitlab,选择自定义。
选择gitlab项,之后push
查看gitlab服务器发现push成功
9.完结
最后我们有了一个大致的概念与一些基本操作。