初识 Git
内容介绍
Git
- Git 介绍:分布式版本控制工具 VS 集中式版本控制工具
- Git 安装:基于官网发布的最新版本 2.31.1 安装讲解
- Git 命令:基于开发案例详细讲解了
git
的常用命令 - Git 分支:分支特性、分支创建、分支转换、分支合并、代码合并冲突解决
- IDEA 集成 Git
GitHub
- 创建远程库
- 代码推送 Push
- 代码拉取 Pull
- 代码克隆 Clone
- SSH 免密登录
- IDEA 集成 GitHub
Gitee 码云
- 创建远程库
- IDEA 集成 GitHub
- 码云连接 GitHub 进行代码的复制和迁移
GitLab
- GitLab 服务器的搭建和部署
- IDEA 集成 GitLab
Git 概述
- 官网地址:http://git-scm.com/
--everything is local
:分布式特性
Git 是一个免费的、开源的 分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目
Git 易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性
其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具
何为版本控制?
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换
![](01-初识 Git/c77073ec43f590dab33bd013b8bff246.png)
为什么需要版本控制?
个人开发过渡到团队协作
![](01-初识 Git/f8bba3e8472bb1eceadfe79feab77a24.png)
版本控制工具
集中式版本控制工具
CVS、SVN(Subversion)、VSS…….
集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易
事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作
![](01-初识 Git/ab806d97bf180266de96907754c26d65.png)
总结
- 优点:可以看到其他人正在做些什么;开发者权限控制
- 缺点:中央服务器的单点故障,无法提交历史记录
分布式版本控制工具
Git、Mercurial、Bazaar、Darcs…….
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
- 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
- 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
![](01-初识 Git/0abb08666aea520067799e614ae331bf.png)
优点:
- 版本控制在本地,可以断网开发
- 保存完整项目,包含历史记录,更安全
Git 简史
![](01-初识 Git/6ad109beec7ca6b94639f78e534059c0.png)
Git 工作机制
![](01-初识 Git/7f7103d77293af8cd24d9745ca7b78f3.png)
- 工作区写代码,通过
git add
命令添加至暂存区 - 暂存区临时存储代码,通过
git commit
提交至本地库 - 本地库记录历史记录,通过
git push
推送至远程库
Git 和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库
局域网
- ![](01-初识 Git/86c16c39d96283551fd4ca7392e22681.jpg) GitLab
互联网
- ![](01-初识 Git/86c16c39d96283551fd4ca7392e22681.jpg) GitHub(外网)
- ![](01-初识 Git/86c16c39d96283551fd4ca7392e22681.jpg) Gitee码云(国内网站)
Git 安装
官网地址:https://git-scm.com/
查看 GNU 协议,可以直接点击下一步
![](01-初识 Git/cd7201594bda5c1a687509d45f05c03c.png)
选择 Git 安装位置,要求是非中文并且没有空格的目录,然后下一步
![](01-初识 Git/49854cac12d784558ef8b74603f89ee8.png)
Git 选项配置,推荐默认设置,然后下一步
![](01-初识 Git/589c84e470a6dcec1ac189c46b723f79.png)
Git 安装目录名,不用修改,直接点击下一步
![](01-初识 Git/6cbf62149bbf0807af0b0b94fb35c5d4.png)
Git 的默认编辑器,建议使用默认的 Vim 编辑器,然后点击下一步
![](01-初识 Git/56e80fedbcc293279d90cbb3e1674f8b.png)
默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步
![](01-初识 Git/b9573f37bf83b20abf50b6982e9e7455.png)
修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git
![](01-初识 Git/6e782843ba1e906541bf138bf766bc8d.png)
选择后台客户端连接协议,选默认值 OpenSSL,然后下一步
![](01-初识 Git/967019ba79c88b161fcd47522993c053.png)
配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动转换,然后继续下一步
![](01-初识 Git/4a6880298dd59949ca68f9f2575d2ca2.png)
选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步
![](01-初识 Git/e62ecaa2c159e3546e362b0a773a612e.png)
选择 Git pull 合并的模式,选择默认,然后下一步
![](01-初识 Git/108b80229d1a05fe7ca68402b6aa329c.png)
选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步
![](01-初识 Git/3a5e8cee927bb5420df91324388f7c2a.png)
其他配置,选择默认设置,然后下一步
![](01-初识 Git/3c75e0c4dd9a67cf5c284a4a4cb27d76.png)
实验室功能,技术还不成熟,有已知的 bug,不要勾选,然后点击右下角的 Install 按钮,开始安装 Git
![](01-初识 Git/9b698491f95851311373655d14b42365.png)
点击 Finsh 按钮,Git 安装成功!
![](01-初识 Git/ea57508c2bde6d797c8c0e641b4d8084.png)
右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端
![](01-初识 Git/644e4323836ef7ab9b26a1f1f77a0bf0.png)
在 Git Bash 终端里输入 git --version
查看 git 版本,如图所示,说明 Git 安装成功
![](01-初识 Git/d2542e4adb67daf9dc0f4dd48393febc.png)
Git 常用命令
命令 | 作用 |
---|---|
git config user.name 用户名 |
设置用户签名 |
git config user.email 邮箱 |
设置用户签名 |
git init |
初始化本地库 |
git status |
查看本地库状态 |
git add 文件名 |
添加至暂存区 |
git commit -m "日志信息" 文件名 |
提交至本地库 |
git reflog |
查看历史记录 |
git reset --hard 版本号 |
版本穿梭 |
设置用户签名
1)基本语法
1 | git config --global user.name 用户名 |
2)案例实操
全局范围的签名设置
![](01-初识 Git/1163b396a11e9a3a0f6c906a0ac8019d.png)
说明:
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的
Git 首次安装必须设置一下用户签名,否则无法提交代码
![](01-初识 Git/9a13b8821ec2c880981df4bf3ce07177.jpg) 注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系
初始化本地库
1)基本语法
1 | git init |
2)案例实操
![](01-初识 Git/c9da8fc267f9baf0f5977dddb5a8415f.png)
查看本地库状态
1)基本语法
1 | git status |
2)案例实操
![](01-初识 Git/365bbfe8f5922d5ffaa0c35bc9873390.gif)
新增文件前
![](01-初识 Git/27c6efcd5ab1d4eb805bdd1abddec5d5.png)
新增文件后
![](01-初识 Git/5cde0b5a8fcd87c4bc381b1aa82ff4d0.png)
添加暂存区
1)基本语法
1 | git add 文件名 |
2)案例实操
红色表示仍在工作区,修改尚未被追踪;绿色表示已添加至暂存区,修改被追踪
![](01-初识 Git/76d47113b9034cd76ee3e9dfde724efc.png)
使用命令,删除暂存区该文件(只是删除暂存区,不影响工作区)
1 | git rm --cached hello.txt |
![](01-初识 Git/deb43ee4bdf8499e7cf6e960495e26e6.png)
提交至本地库
1)基本语法
1 | # -m 表示添加一个版本日志信息,不写此参数也会打开日志信息的文件框。一般带参数 |
2)案例实操
正常操作
![](01-初识 Git/cf8c769fef1bbcd31d46919b97444ff5.png)
无-m
参数时
![](01-初识 Git/5945d63d535c7b2ac9845f6f952d9963.png)
如果强制退出
![](01-初识 Git/0f42f93bca28a9ad52075c847c97b915.png)
修改文件
案例实操
![](01-初识 Git/9477072b2746ca5236364f7ab4063429.png)
git 里是按照行维护文件的,所以修改内容其实就是之前的行删除,修改过后的行添加进来
因此在commit
之后提示信息1 insertion(+), 1 deletion(-)
历史版本
查看历史版本
1)基本语法
1 | # 查看精简版本信息 |
2)案例实操
![](01-初识 Git/8b83ef7e7ced26b7a44c45894eaf7697.png)
版本穿梭
1)基本语法
1 | git reset --hard 版本号 |
2)案例实操
![](01-初识 Git/10a6e4e8b984478a27a7c332899877ff.png)
文件验证当前版本号
![](01-初识 Git/30c08cd1bc0796a998e341fc3971c707.png)
Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示
![](01-初识 Git/6d5f79f3780ca64b1b0d9213bce7f34d.png)
![](01-初识 Git/c953befd04dc21ad1fd61bc12d8a498e.png)
![](01-初识 Git/fa94af02079a98e539db9d7f72fa7b23.png)
Git 分支操作
![](01-初识 Git/ca8a5319aaacdea337cc21f50432a27a.png)
什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本(分支底层其实也是指针的引用)
![](01-初识 Git/64cda4e8f24139a5a271d814cca633a0.png)
分支的好处
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可
分支的操作
命令 | 作用 |
---|---|
git branch 分支名 |
创建分支 |
git branch -v |
查看分支 |
git checkout 分支名 |
切换分支 |
git merge 分支名 |
把指定的分支合并到当前分支 |
创建分支、查看分支
1)基本语法
1 | git branch 分支名 |
2)案例实操
![](01-初识 Git/2bca7ad8ce31e244b61c97e72a1af041.png)
切换分支
1)基本语法
1 | git checkout 分支名 |
2)案例实操
![](01-初识 Git/5b1771e4f8b61e06d63518ad1c85ed1b.png)
合并分支
1)基本语法
1 | git merge 分支名 |
2)案例实操
正常合并
![](01-初识 Git/d0985d38e9d099bb6b8e0754338b87d3.png)
冲突合并
冲突产生的原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容
![](01-初识 Git/6d6ad52de64eb852ad2c92ab1e076fee.png)
解决冲突
![](01-初识 Git/696a4885920f892885023d3b38662cb3.png)
![](01-初识 Git/3579ae4d95a5cb37a0f5988904b9fd72.png)
![](01-初识 Git/fe40db0288aa9afb1ffc7a9a9d540f2c.png)
创建分支和切换分支图解
![](01-初识 Git/0b700af7f1a49ad2b22b14549a6f89e6.png)
![](01-初识 Git/e28ada347f6872c28d22153886a08d3b.png)
master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针
- HEAD 如果指向 master,那么我们现在就在 master 分支上
- HEAD 如果指向 hotfix,那么我们现在就在 hotfix 分支上
所以切换分支的本质就是移动HEAD指针
Git 团队协作机制
团队内协作
![](01-初识 Git/797b9d37d8a3f71a608d32614ed004ff.png)
跨团队协作
![](01-初识 Git/9e1598ac2c842ba3b6cf397a09a85396.png)
GitHub 操作
- Git 官网:https://github.com/
PS:全球最大同性交友网站,技术宅男的天堂,新世界的大门,你还在等什么?
账号 | 姓名 | 验证邮箱 |
---|---|---|
atguiguyuebuqun |
岳不群 |
atguiguyuebuqun@aliyun.com |
atguigulinghuchong |
令狐冲 |
atguigulinghuchong@163.com |
atguigudongfang1 |
东方不败 |
atguigudongfang1@163.com |
创建远程仓库
![](01-初识 Git/30b7069d8ae484d0f74e25d8a0760610.png)
![](01-初识 Git/1657dd9e97ec7359085b6687b8ed86c0.png)
远程仓库操作
命令 | 作用 |
---|---|
git remote add 别名 远程地址 |
起别名 |
git remote -v |
查看当前所有远程别名 |
git clone 远程地址 |
将远程仓库的内容克隆到本地 |
git pull 远程地址别名 远程分支名 |
将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并 |
git push 别名 分支 |
推送本地分支上的内容到远程仓库 |
创建远程仓库别名
1)基本语法
1 | git remote -v |
2)案例实操
![](01-初识 Git/8f03ec632ca1758adecb9d445a6107c5.png)
推送本地分支到远程仓库
1)基本语法
1 | git push 别名 分支 |
2)案例实操
由于 GitHub 外网的特殊原因,会有网络延迟,等待时间可能较长,属于正常现象。可能要多尝试几次,需要点耐心。当然你有工具除外
1 | git push git-demo master |
如果本地还没有过 SSH 免密登录操作(下面内容会详细介绍),则在执行命令后会弹出一个Connect to GitHub
的提示框
![](01-初识 Git/79ce7cc76b0b5f080554a9ac9b7c29d5.png)
点击Sign in with your browser
后会自动打开系统默认浏览器
如果你的 GitHub 尚未进行过任何 Git 相关授权,则会给出确认授权提示信息,点击Authorize GitCredentialManager
进行授权即可
![](01-初识 Git/b8a3faa60a70797f836b99f85b59e6d0.png)
接着会提示授权成功(如果在此之前已经对Git Credential Manager
进行过授权,则直接提示此信息)
![](01-初识 Git/2b7e5e08e0e663c3a0138b257cc3a76d.png)
成功推送本地分支至远程库
![](01-初识 Git/78d578d05621fab04d3c02ecf81742c7.png)
凭据管理器
在上述操作过程中,点击Authorize GitCredentialManager
进行授权后,在 GitHub 设置页面的Application
选项—Authorized OAuth Apps
中可以查看到 Git Credential Manager
的授权信息
![](01-初识 Git/13df6341fe438863b95ef6f2b6407dd1.png)
在上述过程前,本地凭据管理器中还没有任何身份凭证信息(没有 Git 和 GitHub 相关的凭据信息)
![](01-初识 Git/427f37e5de8197df28ab5250dfd43398.png)
执行过上述命令等操作后,本地凭据管理器中会出现 Git 相关凭据信息
![](01-初识 Git/a9b8b6542fa824cf91fc7d208895e093.png)
拉取远程仓库到本地
1)基本语法
1 | git pull 别名 分支 |
2)案例实操
![](01-初识 Git/fafc1a20d0c119f9ab35c36f5e2b09cb.png)
克隆远程仓库到本地
1)基本语法
1 | git clone 远程库地址 |
2)案例实操
首先获取需要克隆的远程库地址
![](01-初识 Git/069f06eee7d5ab19111ef811e4f6a350.png)
由于workspace
下面已经存在一个同名的仓库地址,所以直接在workspace
中键入命令会有错误提示信息
![](01-初识 Git/c3bca6e0d549b5f0db451ca690f535f2.png)
这是因为,clone
命令默认帮我们创建的一个远程仓库名称同名的文件夹,所以这里我删除了git-demo
目录
![](01-初识 Git/329464770baf265ac2f21ee84d8235ab.png)
小结:clone
会做如下操作
- 1、拉取代码
- 2、初始化本地仓库
- 3、创建别名(默认
origin
)
团队内协作
如果项目之外成员想要将自己编写的代码推送至远程库,则会提示unable to access...403
![](01-初识 Git/0e31b2470d2184d3f5df30efd0a268a0.png)
要想获取推送的权限,则需要该项目管理员对该成员进行邀请,将其添加至该项目中
1)邀请合作者,输入用户名,复制地址并发送给合作者
![](01-初识 Git/90fe09e86fd8b89eb53a8d30368ea5aa.png)
![](01-初识 Git/6479fbcd68ada6940b4e4c9bb40dffbe.png)
![](01-初识 Git/778c0af7d5c0199c75c37b2ef372b53e.png)
2)合作者访问该链接,点击接受邀请,可以在其账号上看到该远程仓库
![](01-初识 Git/89515f531cfe6db819650d4dad21ac90.png)
![](01-初识 Git/bb8f4e62a5315873aa33a19be1f34a8e.png)
接下来,就可以通过git
命令对远程库进行克隆、拉取、提交、推送等操作了
跨团队协作
1)合作者视角
点击Fork
,将其他项目“叉”到自己账号上
![](01-初识 Git/662d7f93b4376654a18b1d3dc3017547.png)
自己账号上就有了该项目,可以清楚地看到该项目forked from xxx
,即可对代码进行修改
![](01-初识 Git/f92f3effef420ef13dfe7f6b300e5e75.png)
修改代码后,点击Pull requests
—New pull request
,发起拉取请求
![](01-初识 Git/32885e2cb29b6e4470fc9ac272908ba5.png)
查看修改内容,点击Create pull request
,创建拉取请求
![](01-初识 Git/5d62d099c8e7353acc195e2d08cc3844.png)
填写请求信息及评论内容,点击Create pull request
![](01-初识 Git/806e9eb6c41537d0bac3d653caddd818.png)
创建完成
![](01-初识 Git/3cf55099d16cf8903fd4637a61c3a86b.png)
2)项目管理员视角
可以在该项目中查看到Pull requests
有一条新的记录,可以点击下方提交信息进行查看
![](01-初识 Git/bf71f935c4316483114c3bde7a2e7753.png)
想要看到合作者修改的具体内容,可以点击提交记录进行查看
![](01-初识 Git/9e70efbc93b766d08f474c9c6fe2835e.png)
![](01-初识 Git/727e73f4c179152b04d22a4dac05ad4c.png)
同时,可以对拉取请求进行审查和评论
![](01-初识 Git/b4a5110533e1e91c2c0118bb12429808.png)
最后,审查通过就可以对拉取请求进行合并了,点击Merge pull request
进行合并
![](01-初识 Git/13c3694dcef32e9e52bf6f9ed647c5dd.png)
点击Confirm merge
,确认合并
![](01-初识 Git/96d5e006851d79fb9f0876d239fe6639.png)
合并成功之后,项目成员就可以看到修改的相关内容了
SSH 免密登录
1)基本语法
1 | # -t指定加密算法,-C添加注释 |
2)案例实操
本地生成 SSH 密钥
键入命令,连敲三次回车即可
![](01-初识 Git/07e4c20b3c427fe28aff594fbaefee92.png)
进入~/.ssh
目录,复制公钥信息
![](01-初识 Git/c302ecefdba706de8816955d8f51d2b7.png)
GitHub 上添加公钥
未添加任何公钥之前,Code
—SSH
会有警告提示信息,表示目前 SSH 方式是没有权限的
![](01-初识 Git/2bc4b945403e4d1d15e9eda04e89bce9.png)
在 GitHub 的settings
—SSH and GPG keys
中,点击New SSH key
添加一个公钥
![](01-初识 Git/d91947aa2a4932e1fbe4862cc5add3fa.png)
将id_rsa.pub
即公钥信息粘贴至Key
中,Title
随意,点击Add SSH key
进行添加
![](01-初识 Git/e64f49f0528f39b0818a3e0e8fd02499.png)
出现下列信息,说明添加成功
![](01-初识 Git/c90d046813d3607d114dfa86dc16a127.png)
验证 SSH免密登录 是否可用
进入git-demo
项目,点开Code
—SSH
,发现已经没有警告提示信息了,表示可用
![](01-初识 Git/5843388f853268b5c26f4f2592788e1b.png)
复制 SSH 协议地址,使用clone
命令克隆到本地,键入yes
即可
![](01-初识 Git/f78d5911e2ebda8b22a7c2c8eb0d5529.png)
接下来就是修改内容、添加暂存区、提交本地库、推送远程库的操作了
这时候我们发现已经不再弹出登录授权的提示信息,就可以推送过去了
![](01-初识 Git/6cd8738638c87a2aa5803b0937e7c441.png)
查看远程库历史版本信息,确认推送成功
![](01-初识 Git/2516e9bd0a591c4fffd7edce1ce9879f.png)
至此,SSH 免密登录配置成功!
IDEA 集成 Git
配置 Git 忽略文件
问题1:为什么要忽略他们?答:与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。
问题2:怎么忽略?
1)创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore)
这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig
文件引用,建议也放在用户家目录下
git.ignore
文件模版内容
1 | # Compiled class file |
2)在 .gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)
1 | [core] |
注意:这里要使用正斜线(/
),不要使用反斜线(\
)
定位 Git 程序
![](01-初识 Git/68f193ee0fb8f674545a48a32d73de8a.png)
初始化本地库
![](01-初识 Git/8169618b408169442b23e5753d1152d8.png)
明显看到,文件颜色变红了,代表着未被追踪。说明 Git 已经检测到 git-test 下文件,但是文件尚未被添加至暂存区
![](01-初识 Git/75982e3825cea87cec600c1423cf214e.png)
添加至暂存区
![](01-初识 Git/20a9458104b0387438a7ea81a66ed1eb.png)
添加完毕之后,可以看到文件颜色变绿了,代表文件被追踪。说明 Git 已将文件添加至暂存区,但是尚未提交本地库
在src
—main
—java
下创建一个com.test.Test.java
文件
![](01-初识 Git/de705ce910bd6990aa04d9dca33f947b.png)
这是 IDEA 会自动检测到该文件,并提示是否需要将Test.java
添加至暂存区
这里先Cancel
,不直接Add
单个文件,取而代之的是在整个项目上进行Add
操作,这样整个项目下文件都可以被添加至暂存区
![](01-初识 Git/0eec2c49bb5aedd91dfbba872b652c03.png)
这时会发现,Test.java
文件变成绿色了,说明添加成功
![](01-初识 Git/bfe84bdce859012e53ed6055e114d464.png)
提交到本地库
![](01-初识 Git/c71f2a46cf8cc99a40e5a4e82c8f9b6d.png)
点击Commit Diretory...
之后,就可以看到暂存区的文件,输入日志信息就可以进行提交了
![](01-初识 Git/1a6addf46bf97ef61149db694dee0c13.png)
提交完毕之后,文件颜色也随之发生改变,说明 Git 已将文件提交至本地库
![](01-初识 Git/ba9273f6cc4b7fa8ef5c54b332abf7f9.png)
切换版本
首先修改文件,观察到修改的文件颜色为蓝色,表示已修改状态,可以直接进行commit
操作
![](01-初识 Git/fbd5c24d36a02cc8e0289fc68cef1349.png)
点击 IDEA 左下角 Git
,可以查看历史版本
![](01-初识 Git/2e6740a6efeff21e3c9b6f9fb23281af.png)
选定某一版本,点击Checkout Reversion xxx
,可以进行版本穿梭
![](01-初识 Git/528bddee98088e7c3ae85a70cb00599c.png)
可以看到每次版本穿梭,HEAD
指针的变化
![](01-初识 Git/51d6b7de570849b7a04d2af70b82ff8b.png)
![](01-初识 Git/8ac9a092c3727f7f48ad54a4e91b52e3.png)
![](01-初识 Git/da181a16e6fe6af6a63d2f3092b5948e.png)
切换分支
点击 IDEA 右下角master
—New Branch
就可以创建分支了
![](01-初识 Git/6dc8b7c9756ddf21433966076df6a4ce.png)
输入分支名,点击Create
进行创建
![](01-初识 Git/39989738fa3ae4c6681a7e82223b9b68.png)
当然,也通过项目上右键
—Git
—New Branch
,或者右键
—Git
—Branches
—New Branch
同理
![](01-初识 Git/176f7303e357f2c9fb7bdf3526eeb0c1.png)
切换分支同理,右键或是右下角均可
![](01-初识 Git/cc9a4ffdff345d1b790f026280a43bc9.png)
合并分支
首先切换到hot-fix
分支,修改内容后提交,再切换回master
分支,同样在右下角选择我们需要合并的分支hot-fix
,选择Merge Selected into Current
,将hot-fix
分支合并至master
分支上
![](01-初识 Git/9c4e7f73a1a503a515b861fbe1a8a712.png)
发现内容已发生改变,并且查看历史版本也发生了变化
![](01-初识 Git/77cf2e40f0b8d8ef9d05855409c7d658.png)
冲突合并
首先,分别切换master
和hot-fix
都对Test.java
内容进行修改并提交
master
版本信息
![](01-初识 Git/0668c9a5428f11915ad6ed250a26bc7a.png)
hot-fix
版本信息
![](01-初识 Git/c2940fef01dba9b37efcf8780259f6f2.png)
可以观察到,历史版本发生了分叉。现在将hot-fix
合并至master
上,提示Conflicts
,说明合并出现了冲突
![](01-初识 Git/083927f92b46baa6ec7eaf6e199cf189.png)
点击Merge
进行手动合并
![](01-初识 Git/90ca87fef1506bbe3449940413cae08f.png)
解决完冲突后,会提示All changes have been processed. Save changes and finish merging
,说明代码可以正常合并,点击Apply
对手动合并的代码进行应用
![](01-初识 Git/4c15bfc16f777270cf06b7516236d524.png)
会发现文件颜色变为正常颜色,并且历史版本发生了改变,原来的两个分支合并成了一个
![](01-初识 Git/41479f4d621055cb44e657098e0fe08f.png)
IDEA 集成 GitHub
设置 GitHub 账号
通过账号密码设置
打开Settings
,点击Log In via GitHub...
![](01-初识 Git/f22741bfc0ab9079ea50510a3e7e4c12.png)
![](01-初识 Git/ad43e1bfe692b030a69699bc6e2dbc34.png)
会自动打开浏览器,进行授权确认
![](01-初识 Git/fed66e5215e9233a672f10648fc3c468.png)
点击Authorize in GitHub
后,会提示授权成功
![](01-初识 Git/652842e331245d56119f2ac1dc6f0ba7.png)
看到 IDEA 里新增了一条账号信息即为添加成功
![](01-初识 Git/98d424723d456f6630ba6aca19d8080d.png)
通过 Token 设置
点击Log In with Token...
![](01-初识 Git/d07ca06d60763b4a6259a78d675b97b0.png)
会弹出Add GitHubh Account
框,输入我们在 GitHub 上创建的 Token 信息即可
![](01-初识 Git/bfb71f475e963ab04994451240b22168.png)
如果还没有生成过或者丢失了之前创建的 Token,可以直接点击Generate...
进行自动生成,默认已勾好权限
![](01-初识 Git/7df241ff563056c167be585c39d43bdd.png)
修改并确认无误后,点击Generate token
即可进行生成
![](01-初识 Git/3412a4606de9e814cedd00f6976d2fa9.png)
Token 生成之后,只会在当前页面显示一次,需要及时复制保存下来
![](01-初识 Git/319f3f205de16b8b20d9449415b410c2.png)
将 Token 粘贴至输入框,点击Add Account
即可添加
![](01-初识 Git/13671f55e6a81f94fb43d6d027b5f2d8.png)
最后别忘了,一定要点击Apply
和OK
对设置进行保存
![](01-初识 Git/9c38212cd22b3b118a782e48702a45ee.png)
分享工程到 GitHub
我们一般会先在远程库创建一个Repository
,再将本地库通过remote
关联到远程库,最后进行版本推送
或者是先在远程库创建一个Repository
,再通过clone
将远程库克隆至本地,最后进行版本推送
而在 IDEA 中,可以将上述步骤合成一个步骤,即通过Share
将本地库分享至 GitHub 上,非常便捷
![](01-初识 Git/f55ebe1954e614df90f904af39e5bd78.png)
填写完信息后,点击Share
按钮,IDEA 会自动帮我们创建和初始化远程库,并将本地库推送至远程库
![](01-初识 Git/ba53deaf77ce20112cd3efaa86ae0de7.png)
查看 GitHub 是否存在该仓库,以验证是否分享成功
![](01-初识 Git/a7f41403bf66082a4d3248ae32002c4c.png)
在分享过程中,可能会出现如下报错:成功创建远程仓库,但是初始化推送失败。这时就需要进行手动Push
的操作了
![](01-初识 Git/a296310c7bad6c0e99ba1fe502f96896.png)
Push 推送本地分支到远程库
![](01-初识 Git/a682fc2e5729c7128ae30bc16856a75b.png)
这里默认使用https
协议进行推送,因为网络原因,很有可能推送失败
![](01-初识 Git/e0c9558a09b39830f980f08487609092.png)
这是可以修改远程连接方式,点击Define remote
设置新的远程别名
![](01-初识 Git/bbb819701793ea4babb632731bebad99.png)
然后会弹出一个重新定义远程方式的界面,这里使用 SSH 协议的远程地址即可(注意:不要与原来的别名重复)
![](01-初识 Git/0afd5d745955c2bb0ceb8d61c9f1c820.png)
点击OK
后,可以重新选择远程别名,这里改为我们刚刚定义的 SSH 协议的别名:origin-ssh
![](01-初识 Git/0c2b388f5514bfa08372d6b766e7ee20.png)
查看 GitHub 上历史版本修改内容,推送成功
![](01-初识 Git/8faf7d9fe9c169db4fb9fb50062f1b62.png)
注意:push
是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致, push
的操作是会被拒绝的。也就是说,要想 push
成功,一定要保证本地库的版本要比远程库的版本高!因此一个成熟的程序员在动手改本地代码之前,一定会先检查下远程库跟本地代码的区别!如果本地的代码版本已经落后,切记要先pull
拉取一下远程库的代码,将本地代码更新到最新以后,然后再修改,提交,推送!
Pull 拉取远程库到本地
首先先修改远程库代码,然后进行如下操作
![](01-初识 Git/d38dee5e8dc51da43fadf306ae02a16b.png)
选择 SSH 协议的别名,点击Pull
进行代码拉取
![](01-初识 Git/c119f716403b1833355b7ab07efb5850.png)
查看本地库代码易发生变化,并且历史版本也有了相关记录,说明代码拉取成功
![](01-初识 Git/dcf176616fb9c78376318af6173dafec.png)
Clone 克隆远程库到本地
关闭项目,在 IDEA 选择页面,点击Get From VCS
![](01-初识 Git/569d5d5a73b614a26ad7db0850d8ffbb.png)
填写需要克隆的远程仓库地址和本地仓库地址,点击Clone
进行克隆
![](01-初识 Git/71bda746cffea6c6597fff1e6851d8df.png)
等待克隆完成
![](01-初识 Git/ddf8bc12002b65b17957612b4aa3ac7a.png)
初次进入项目,会提示是否信任并打开此 Maven 工程,一般选择Trust Project
如果勾选Trust projects in xxx
,则在此工作空间下所有新增项目都将被信任,不会再提示
![](01-初识 Git/96207fb628c0be68c7dda4b887540d93.png)
打开项目,确认Test.java
内容无误,历史版本记录正常
![](01-初识 Git/3eb26161d865f4a1b78d2beab9328b12.png)
国内代码托管中心**-**码云
众所周知,GitHub 服务器在国外,使用 GitHub 作为项目托管网站,如果网速不好的话,严重影响使用体验,甚至会出现登录不上的情况。针对这个情况,大家也可以使用国内的项目托管网站-码云
码云是开源中国推出的基于 Git 的代码托管服务中心,网址是 https://gitee.com/ ,使用方式跟 GitHub 一样,而且它还是一个中文网站,如果你英文不是很好它是最好的选择
创建远程库
![](01-初识 Git/d5dd0b529420ac767c1b97caba0b4097.png)
输入仓库名称,路径会自动与仓库名称保持一致,一般不改。选择开源,点击创建
即可
![](01-初识 Git/3a488cb0932baed7299f914386bc82b2.png)
创建完毕会自动跳转到该项目界面,复制下列地址以备用
![](01-初识 Git/64bf577e9cfe946e040da4c45a994f37.png)
删除远程库
打开项目管理
—仓库设置
—删除仓库
,点击删除仓库
![](01-初识 Git/a6ef579537fa4ea8b0e7caa57f70bbf9.png)
输入确认信息,点击确认删除
![](01-初识 Git/33836d984ac423bf3bfd0a651a350ad3.png)
输入密码,进行二次确认,点击验证
,即可删除成功
![](01-初识 Git/4843bc73391e39f51f98962246cd910a.png)
IDEA 集成码云
首先安装 Gitee 的插件
![](01-初识 Git/70f580c184e09e6a3ccfd1d2b31636ae.png)
安装完成之后,点击Apply
会刷新Settings
选项,打开Version Control
,多了一个Gitee
选项
这里同样有两种方式,可以通过账号密码登录,也可以通过Token
登录,操作同 IDEA 集成 GitHub
![](01-初识 Git/ea121aa7f5db0712a4196a11c6037ec0.png)
输入完账号密码,点击Log In
即可
![](01-初识 Git/8505ce7300de819755006d9015f3a3e5.png)
如果输入无误,便会在界面中展示账号信息,点击OK
保存
![](01-初识 Git/a740e071ce74a63c015fef5abe3d3602.png)
分享工程到 Gitee
![](01-初识 Git/e186d2fd97aa208cf5e3755f80a28a20.png)
如果远程仓库已存在该名称的项目,则会提示存在同名仓库无法删除,需要先删除刚刚我们创建的git-test
仓库
![](01-初识 Git/025271810391537ff45ca3daa2db338e.png)
提示分享成功
![](01-初识 Git/442fb6b9e31b8501fbf69a83f9fb2612.png)
查看 Gitee,确认仓库创建成功并且推送成功
![](01-初识 Git/9ba405dc53d0d09e8e5e40d5aecde469.png)
推送本地分支到远程库
修改内容,可以在左侧导航栏Commit
直接进行提交并推送
![](01-初识 Git/f4c621856a276d6146082ef83549b6dc.png)
同样可以自定义远程地址别名,点击Push
进行推送
![](01-初识 Git/1f743e42d9097ee7ecf751e4cca38176.png)
查看 Gitee 仓库历史版本记录,确认推送成功
![](01-初识 Git/6e36e8d91077aca6bdef0146e19ef92b.png)
拉取远程库到本地
直接在 Gitee 上修改Test.java
内容后,IDEA 中进行Pull
即可
![](01-初识 Git/d38dee5e8dc51da43fadf306ae02a16b.png)
选择我们指定的别名和分支,点击Pull
进行拉取
![](01-初识 Git/3ccd3a11b878e23f1cc7fef98609a4fe.png)
查看Test.java
即历史版本发生了变化,说明拉取成功
![](01-初识 Git/aaa8fcf21d55efdd8454128c4be4de42.png)
克隆远程库到本地
![](01-初识 Git/718f53845efb7389880a1dcd2abac701.png)
码云复制 GitHub 项目
导入仓库
点击从 GitHub / GitLab 导入仓库
![](01-初识 Git/ddf51aed2cc43793e4f4437eb88a5fc4.png)
输入 GitHub 仓库地址,Gitee 会自动帮我们反填仓库名称及路径信息,修改为开源或私有,点击导入
![](01-初识 Git/ebaad3bc32cfadf4049411d99afde73e.png)
等待片刻
![](01-初识 Git/e6e0e1ac62f9dad27cafc8e57f3f9918.png)
导入成功
![](01-初识 Git/a0708056e15457951b7084d39eeecf72.png)
强制同步
如果后续该工程在 GitHub 上进行了修改,可以直接点击,刷新图标进行强制同步
![](01-初识 Git/afc2e3eda01c58d275a1defca1f5058e.png)
需要注意的是强制更新会覆盖当前仓库,这里点击确认
即可
![](01-初识 Git/0fc178ff3b7e74703e48ac1d22ad3475.png)
查看历史版本记录,确认同步成功
![](01-初识 Git/e77774a29899a70782ae5133d6620646.png)
自建代码托管平台 - GitLab
GitLab 简介
GitLab 是由 GitLabInc. 开发,使用 MIT 许可证的基于 网络的 Git 仓库管理工具,且具有 wiki 和 issue 跟踪功能。使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务
GitLab 由乌克兰程序员 DmitriyZaporozhets 和 ValerySizov 开发,它使用 Ruby 语言写成。后来,一些部分用 Go 语言重写。截止 2018 年 5 月,该公司约有 290 名团队成员,以及 2000 多名开源贡献者。GitLab 被 IBM,Sony,JülichResearchCenter,NASA,Alibaba,Invincea,O’ReillyMedia,Leibniz-Rechenzentrum(LRZ),CERN,SpaceX 等组织使用
GitLab 官网地址
GitLab 安装
服务器准备
准备一个系统为 CentOS7 以上版本的服务器,要求:内存 4G,磁盘 50G
关闭防火墙,并且配置好主机名和 IP,保证服务器可以上网
此教程使用虚拟机:主机名:gitlab-server
IP 地址:192.168.6.200
安装包准备
Yum
在线安装 gitlab-ce
时,需要下载几百 M 的安装文件,非常耗时,所以最好提前把所需 RPM
包下载到本地,然后使用离线 rpm
的方式安装
下载地址:
注:资料里提供了此 rpm
包,直接将此包上传到服务器/opt/module
目录下即可
编写安装脚本
安装 GitLab 步骤比较繁琐,因此我们可以参考官网编写 GitLab 的安装脚本
1 | vim gitlab-install.sh |
将下列脚本内容复制到创建的gitlab-install.sh
文件中
1 | sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm |
给脚本增加执行权限
1 | chmod +x gitlab-install.sh |
执行脚本变绿,说明具备执行权限
![](01-初识 Git/14b854c070523e3fb43f1376c9aef651.png)
然后执行该脚本,开始安装 gitlab-ce
。注意一定要保证服务器可以上网
1 | ./gitlab-install.sh |
耐心等待片刻
![](01-初识 Git/18ccdac1a66cb3d0dcfa1ab856c24223.png)
脚本执行成功
![](01-初识 Git/fdb00f839f02b593fdff2fb08d86c28b.png)
初始化 GitLab 服务
执行以下命令初始化 GitLab 服务
1 | gitlab-ctl reconfigure |
过程大概需要几分钟,耐心等待…
![](01-初识 Git/d2d519fa676a28ab21a42aa2f6252339.png)
出现gitlab Reconfigured!
说明 GitLab 服务初始化成功
启动 GitLab 服务
执行以下命令启动 GitLab 服务
1 | gitlab-ctl start |
如需停止,执行
1 | gitlab-ctl stop |
服务启动成功
![](01-初识 Git/e721bdab4d3586aa0365325b516680dd.png)
使用浏览器访问 GitLab
使用主机名或者 IP 地址即可访问 GitLab 服务,使用主机名访问需要提前配置一下 windows 的 hosts 文件
![](01-初识 Git/e727b9a696fd554d50fbc53bc2b299e9.png)
首次登陆之前,需要修改下 GitLab 提供的 root 账户的密码,要求 8 位以上,包含大小写子母和特殊符号。因此我们修改密码为 Atguigu.123456
,然后使用修改后的密码登录 GitLab
![](01-初识 Git/9b68d19128115213d9f3c2a79a8823db.png)
接下来,就可以用刚才修改的账号密码进行登录了
![](01-初识 Git/924e10858d16cb2e2018e86890436fe8.png)
登录成功
![](01-初识 Git/12a6ef556c1a8de063ac549d2c70f5fe.png)
GitLab 创建远程库
我这里以官网 GitLab 为例,官网地址:https://gitlab.com/
官网还提供了 GitLab 自身的项目源码:https://gitlab.com/gitlab-org/gitlab
![](01-初识 Git/87a23efc9e269cbce2e332a37675fe6b.png)
点击New project/repository
—Create a project
进行 GitLab 仓库的创建
![](01-初识 Git/35f0d5333a9fc73ef73a270217c86a51.png)
填写项目信息后,点击Create project
即可
![](01-初识 Git/cce7ef340d4873b265e351dea066ca7d.png)
创建成功
![](01-初识 Git/49ba3f4b79cc5b06020d864a45611520.png)
IDEA 集成 GitLab
1)安装 GitLab 插件
![](01-初识 Git/bc98beb487d61f3cdc3a1a884a413843.png)
2)设置 GitLab 插件
![](01-初识 Git/3a080cfc216de8fec3d738bd4fa5b031.png)
出现相关信息,说明添加成功
![](01-初识 Git/e7135c4edbbb8d419efaf3f577471d99.png)
3)push 本地代码到 GitLab 远程库
我们首先添加一个远程库别名
点击Git
—Manage Remotes
![](01-初识 Git/eddad074a83ac5184289f8d7f76e83fe.png)
点击+
号,自定义一个远程别名及对应远程库地址,点击OK
![](01-初识 Git/aed5971ad2871432d88fec42cd35f91b.png)
出现刚刚的记录,说明添加远程别名成功,点击OK
![](01-初识 Git/ee3823e1f526d3c8b4a7fedca5c9bbe1.png)
只要 GitLab 的远程库连接定义好以后,对 GitLab 远程库进行 pull 和 clone 的操作和 Github、码云一致,此处不再赘述