目录
1 概述
Git 是一个免费的开源分散式版本控制,旨在以快速高效的方式处理从小到大的各种项目。
何为版本控制:
- 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
- 版本控制最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换
为什么需要版本控制呢:因为工作不是一个人,而是团队协作,多人都修改文件,可能造成错误。版本控制就尤为重要
版本控制分为两种:
- 集中式版本控制。缺点:服务器出现问题就无法使用了
- 分布式版本控制。服务器出了问题,客户端依然保存完整的项目
Git工作机制:
Git共分为三个区域:
- 工作区(写代码),顾名思义在这里写代码,可以删除,不会留下记录
- 暂存区(临时存储),将写完的代码暂存这里,可以删除,不会留下记录
- 本地库(历史版本),将暂存区的代码加入到这里后就无法删除,会留下记录
Git和代码托管中心:
- 代码托管中心是基于网络服务器的远程代码仓库,一般我简单称为远程库
- 局域网:GitLab
- 互联网:GitHub(外网);Gitee码云(国内网站)
2 安装Git
基本上一直next就可以了,桌面鼠标右键有git bash,打开就可以使用了
3 常用命令
3.1 设置用户签名
设置用户签名如下:
可以在c盘/用户/用户名 下查找如下文件,看看是否设置成功
签名的作用是区分不同操作者的身份,用户签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。注意:Git首次安装必须设置一下用户签名,否则无法提交代码
3.2 初始化本地库
创建一个新目录,然后初始化,只有初始化之后才能使用git
然后我们就发现目录中新建了一个.git文件
3.3 查看本地库状态
首次查看,没有任何文件
新增文件,hello.txt
使用vim hello.txt新增这个文件,输入一些内容。yy复制,p粘贴
再次查看本地库状态:
前两行还是一样,因为我只是创建一个文件,并没有添加到git库。下面也提示了未追踪的文件用红色标出
3.4 添加暂存区
再次查看我们发现,颜色绿了,添加成功,git追踪到了这个文件,此时文件存储到了暂存区。它也提示我们可以删除,我们删除试试:
这也告诉我们暂存区只是暂存,可以删除,它不会影响工作区的文件,更不会影响到本地库,都没有添加到本地库
3.5 提交到本地库
还可以查看日志信息:
3.6 修改文件
修改后再查看状态就提示文件已被修改,我们需要再次添加到库
添加到本地库之后再查看日志:
发现有两个版本,而head指向第二个版本,所以这时我们在工作区查看的文件就是第二个版本
3.7 历史穿梭
假如新的版本我觉得还不如旧的版本我可以改回去:
首先查看历史版本,用reflog查看日志就可以看到,复制版本号
4 Git分支
4.1 概述
什么是分支:在版本控制过程中,同时推进多个任务,我们就可以为每个任务都创建一个分支,主线分支不会受影响。可以理解为副本,一个分支就是一个副本
分支的好处:效率高,一个分支开发失败不会影响其它分支
4.2 分支的操作
然后修改文件,添加到暂存区,提交到本地库
切换到master分支再次查看hello文件,发现并没有改变,接下来合并分支,将hot-fix中的hello合并到master中,也就相当于改变master分支中的hello文件为hot-fix中的hello文件:
这是成功的,但是当我们将两个分支的hello文件都修改再合并就会出现冲突:
我们先修改master中的文件提交到本地库
切换到hot-fix分支,我们再修改hot-fix分支的文件提交到本地库
再切换到master分支,合并文件:
我们发现出现了冲突
解决合并冲突问题:
我们打开hello文件,发现多了很多内容,把多余的删掉
删掉多余内容后如下:
我们再次将文件提交到本地库但是发现出现了错误:
把文件名去掉就可以了:
而hot-fix分支的文件还是之前修改的那个样子
总结合并冲突的过程和解决方法:两个分支都修改文件并且提交到本地库后,打开文件将多余的删掉然后再次提交本地库,但是这次提交不需要指定文件名称
5 团队协作机制
5.1 团队内协作
一个团队会有一个本地库,但是别人要进行操作怎么办?负责人会将本地库上传(push)到代码托管中心(远程库),然后团队别人可以拿到(clone)这个库进行各种操作,操作完之后可以上传(push)到代码托管中心。负责人看到这个修改后的觉得还不错可以更新本地库(pull)。
5.1 跨团队协作
两个团队的协作:若自己团队写代码还不够,需要别的团队来写,但是我不能直接把别的团队的人加入到我的团队,这时就需要跨团队协作。首先将本团队的远程库代码复制(fork)给别的团队的远程库。然后另一个团队就可以将远程库的文件复制到本地库进行修改,修改后添加(push)到远程库。然后给本远程库发送拉取请求(Pull request),在接收之前我是要审核的,审核完就合并(merge)到我的远程库,最后拉取(pull)到我的本地库。
6 Gitee操作
因为登不上GitHub,就用Gitee了
6.1 创建远程仓库
首先新建仓库
6.2 远程仓库操作
6.2.1 为远程库创建别名
因为远程仓库地址太长我们最好创建个别名:
我们发现创建了两个别名:这表明这个别名既可以推送又可以拉取
6.2.2 推送本地分支到远程仓库
登录后打开Gitee发现文件以及被推送到Gitee
6.2.3拉取远程仓库到本地库
我们可以直接在远程仓库修改代码,但是这不会改变本地库
这就需要我们拉取远程仓库到本地库操作:
不需要我们手动提交到本地库,这一部就可以了
6.2.4 克隆远程库到本地
我们要再创建一个本地库名为gitlhc
在克隆前我们要删掉之前的凭据,因为Windows一次只能登录一个
要在新建的本地库打开git
打开本地库:已经克隆成功
而且我们发现clone会拉取代码并且初始化本地仓库并且会创建别名,别名为origi。克隆不需要账户,以为它是公开的,谁都可以克隆。
6.3 邀请加入团队
我们在新创建的本地库中修改克隆的文件并提交到本地库,之后push到我们的远程库
我们发现出现错误:无法访问,因为我们还不是这个团队的成员,虽然可以克隆仓库但是不能推送我们修改的仓库。
我们要将这个用户加入到我们的团队:
点击 仓库gitspace->管理->仓库成员管理->添加仓库成员
我们登录
另一个账号查看私信看到已经受到邀请,同意即可
我们再次push
查看我们的远程仓库确实上传成功了
我们再在最初的本地仓库拉取远程仓库:
记得在拉取之前要在凭据管理器删除别的用户
再使用 git pull gitspace master将远程仓库拉回到本地
6.4 跨团队协作
也就是不同团队的协作,但是我没有账号了,所以这里将wangzhijuan那个账号移除我的团队来模拟这个功能
别的团队可以直接在Gitee上搜我的远程仓库,当然我将链接发给他更合适,拿到链接点击fork将项目叉到自己的仓库
接下来他会进行修改代码,接下来点击上方的 Pull Requests 请求,并创建一个新的请求
填写好后点击创建pull request,然后打开我们的Gitee查看:
然和合并分支:
查看我们本地库的代码已经被合并成功了
6.5 SSH免密登录
在 C盘 User目录下自己的账户下右键 git bash here,ssh-keygen -t rsa -C 自己的邮箱签名
输完命令按三下回车,就会弹出如上结果,而且user目录下会有.ssh文件,里面是公钥和私钥, cat id_rsa.pub是公钥,将公钥复制
添加公钥
连接不上,再见(微笑)
7 IDEA集成Git
7.1 环境准备
在集成Git前,我们要先忽略一些文件,比如
为什么忽略它们,它们与实际项目无关,不参与服务器上部署运行,把它们忽略掉能够屏蔽IDE工具之间的差异
怎么忽略:
(1)在用户家(C/User/用户名) 下创建 git.ignore
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (
.mtj.
# Package Files
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see
http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.classpath
.project
.settings
target
.idea
*.iml
(2)在 .gitconfig 文件中引用忽略配置文件(.gitconfig 在家目录中)
[user]
name = jay
email = jay@qq.com
[core]
excludesfile = C:/Users/这个杀手有点冷/git.ignore
注意:以上方法经测试没有成功,换个方法再试
(3)在idea里面定位
7.2 初始化本地库
创建Git本地库
创建本地仓库之后
我们可以右键将文件加到暂存区
然后我们写代码,在我们创建java文件时会有提示:
它提示我们是否要将文件加入到git暂存区,我们可以直接add,当然也可以后面再加
写完代码后我们可以将整个模块加入到暂存区
然后我们可以将模块提交到本地库
我们发现提交的信息把那些不重要的都忽略掉了
提交完后,文件又变成原来的颜色
以上截图有些混乱,因为不是一个模块,在第一次测试时出现一个问题,忽略失败。所以后面又新建一个项目测试,不过大体上就是这个意思。
7.3 切换版本
修改代码再次提交到本地库,这里我们可以不用先添加到暂存区然后再提交到本地库,可以直接提交到本地库,一步到位
点击左下角git-->Log,右键版本选中Checkout Revision即可切换版本
7.4 创建分支
可以右键模块创建:
也可以点击右下角的master进行创建,会弹出一个框,填写分支名称
7.5 切换分支
创建成功后我们发现右下角的master变成了hot-fix,并且我们可以直接在这切换分支
7.6 合并分支
首先我们切换到hot-fix分支修改代码,然后我们切换到master分支,显然代码没有改变,这时我们选中左下角hot-fix的合并功能如下:
这样就能合并成功
7.7 合并冲突
我们修改hot-fix分支的代码然后提及到本地库,再修改master分支的代码,这时再合并就会冲突:
将两边的代码移到中间,然后提交,它会自动提交到本地库
8 IDEA集成Gitee
8.1 添加Gitee账号
首先在idea中下载Gitee插件,在设置中找到Gitee然后添加用户
上面登录账户不能使用那个,要使用邮箱
8.2 分享项目到Gitee
我们在Gitee远程库上就可以查看到我们提交的库了
8.3 推送代码到远程库
首先修改带并且提交到本地库,然后我们在上面选中Git然后选中Push
我们自定义一个码云仓库的链接
值得注意的是:我们在修改代码前要注意查看本地代码和远程库代码是否一致,如果远程库已经修改了一些代码但是本地库又修改,就会冲突。我们建议如果远程库代码修改了,先将远程库pull到本地库,然后再修改,然后再push到远程库
8.4 拉取远程库代码并合并
首先修改远程库的代码
然后直接点击上方的Git--->pull即可完成拉取
8.5 克隆Gitee代码到本地
我们艺高人胆大把本地代码删了怎么办,那自然是跑路(不是)。因为我们在远程库保存着代码,所以我们不怕,下面我们将远程库代码克隆到本地
打开idea点击如下:
选中Gitee,idea甚至已经给我们列出了我们账号的各种项目,选中克隆即可,如果不是克隆我们自己的项目也没关系,我们复制链接也可以完成克隆
8.6 Gitee复制GitHub项目
因为连接GitHub比较麻烦,我们可以将GitHub的项目复制到Gitee上
我们在新建仓库时会提示我们导入仓库
我们拿到链接直接导入即可
9 自建代码托管平台GitLab
不建了,谁爱建谁建