git学习笔记
Git学习笔记
一、版本控制
1.什么是版本控制
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统
版本控制最重要的是可以记录文件修改历史纪录,从而让用户能够查看历史版本,方便版本切换
2.为什么需要版本控制
从个人开发过渡到团队

3.版本控制工具
-
集中式版本控制(CVS、SVN)
有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
优点:管理员可以轻松掌控每个人的权限
缺点:如果服务器宕 机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作
-
分布式版本控制(Git)
客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)
分布式版本控制相对于集中式版本控制的优点:
- 服务器断网的情况况下页可以进行开发
- 每个客户端保存的是完整的项目(包括历史记录)
二、Git工作机制
Git是一个免费的、开源的**分布式版本控制系统**(SVN是集中式的)
可以管理代码
易于学习,占地面积小,性能快。具有廉价的本地库

1.Git安装
-
打开安装包,安装到非中文,没有空格的目录下
2.Git命令
| 命令名称 | 作用 |
|---|---|
| git config --global user.name 用户名 | 设置用户签名 |
| git config --global user.name 邮箱 | 设置用户签名 |
| git init | 初始化本地库 |
| git status | 查看本地库状态 |
| git add 文件名 | 添加暂存区(追踪文件) |
| git rm --cache 文件名 | 将文件从暂存区删掉(工作区还保留) |
| git commit -m “日志信息” 文件名 | 提交本地库 |
| git reflog | 查看版本信息 |
| git log | 查看版本详细信息 |
| git reset --hard 版本号 | 切换版本【或者取消暂存区文件】 |
| git clone 仓库地址 | 克隆远程仓库【重要】 |
| git remote -v | 查看当前仓库的远程仓库地址 |
| git remote add <远程仓库别名> 地址 | 本地仓库关联远程仓库【这样就可以推送、拉取】 |
| git push 远程仓库别名 分支名 | 本地仓库代码提交到关联的远程仓库 |
| git pull 远程仓库别名 分支名 | 拉取远程仓库到本地 |
| git merge 分支名 | 把指定的分支合并到当前分支 |
| git brach 分支名 | 创建分支 |
说明:
- 设置用户签名
设置用户签名的作用是用来区分不同的操作者身份。Git首次安装时必须设置
这里用命令设置的Git用户签名和将来登录代码托管中心(Git)的账号没有任何关系
- 初始化本地库
- 在电脑上创建一个文件夹,进入里面,然后在文件夹中使用git-init命令——初始化本地库
- 查看本地库状态
使用git status 会出现三行命令
第一行:显示分支数(master 分支)
第二行:是否提交过
第三行:是否需要提交(如果创建了文件,就会显示untracker files 未被追踪)
- 添加暂存区
- 当添加到暂存区后,再使用git status,创建的文件就会由红色变为绿色
- 删除暂存区
- git rm --cache 文件名:会把文件从暂存区中删除,但是文件依旧保留到原来的文件夹中
- 使用后的效果:文件的状态会变为未被追踪(文件名由看绿色变为红色)
- 提交本地库
- git commit -m “日志信息” 文件名:日志信息就是版本名字
- 查看版本信息
作用:可以查看版本号和提交的版本名字
可以使用的命令(两个):
git reflog
git log
- 修改文件
- 先修改工作区中的文件(也就是我们通过vim在git库中创建的)
- 然后添加到暂存区(git add)
- 然后提交到本地库(git commit -m ”版本名” 文件名)
- 切换版本
- 提交新版本后,指针会自动指向新版本,如果我们需要切换到旧版本,就可以使用版本穿梭
- 先查看版本号:git reflog
- git reset --hard 精简版本号
- 再打开文件的话,就是切换后版本的内容
3.Git分支
什么是分支
在版本控制过程中,同时推进多个任务,我们可以为每个任务创建单独的分支。(初学者可以理解为一个单独的副本)
人话就是:我们不可能动用户正在使用的项目,但是我们可以复制用户的项目作为分支,在这个分支上开发。开发完之后,合并到用户的项目上
分支的优点
可以并行推进多个功能,提高开发效率
如果某一分支开发失败,不会对其他分支有任何影响。失败的分支删除即可
| 命令名称 | 作用 |
|---|---|
| git branch 分支名 | 创建分支 |
| git branch -v | 查看分支 |
| git checkout 分支名 | 切换分支 |
| git merge 分支名 | 把指定的分支合并到当前分支上 |
3.1 查看分支
使用命令:git branch -v
3.2 创建分支
使用命令:git branch 分支名

3.3 切换分支
使用命令:git checkout 分支名
3.4 修改分支
- 切换分支后,修改文件
- 然后使用 git add 文件名 提交到暂存区
- 然后使用 git commit -m “版本名” 文件名 提交到本地库
3.5 合并分支
-
正常合并
![image-20230428121142214]()
把hot-fix合并到master分支上(也就是用hot-fix的代码覆盖master的代码)(只有一个分支做了修改)
-
冲突合并
冲突合并产生的原因:
合并分支的时候,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法决定使用哪一个,需要我们人为决定新代码内容(两个分支都修改且提交后修改)
![image-20230428122929779]()
-
合并后需要手动修改
-
进入文件,把不需要的东西删除,把需要的东西留下来
-
然后提交暂存区
-
提交执行(注意:这个时候提交不能带文件名)
![image-20230428123424858]()
-
说明:提交后,修改的是合并的分支
-
4.Git团队协作机制
4.1 团队内协作

4.2 跨团队协作

5.IDEA集成Git
5.1 配置Git忽略文件
为什么要忽略他们?
因为他们与项目实际功能无关,不参与服务器上的部署运行。
创建忽略文件xxx.ignore(前缀民随便起,建议是git.ignore)
要忽略什么文件,就把什么文件写入里面
放在哪里都可以,为了方便~/.gitconfig文件引用,建议放在用户家目录下
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# 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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25

5.2 在.gitconfg中引用忽略文件
此文件在用户家目录下

[core]
excludesfile=c:/users/用户名/忽略文件名
- 1
- 2
5.3 定位Git程序
-
打开idea的setting设置
-
找到Version Control中的Git
-
配置Git的安装程序(git.exe)
-
然后点击测试没问题就配置成功
![image-20230429112226358]()
5.4 初始化库
-
点击IDEA最上面一栏的VCS,按下图选择,创建本地库
![image-20230429112516884]()
-
本地库默认是在工程目录下的
-
初始化完成之后,可以发现工程中的文件都是红色的也就是git的未提交状态
5.5 添加暂存区、提交
-
找到爆红的文件,右键点击,选择Git,有一个add,文件就会添加到暂存区
如果项目中的所有文件都允许添加,可以直接右键项目进行上面的操作(会提示包含忽略的文件,是否强制添加,点击no)
![image-20230429112832464]()
-
右键需要提交的项目/文件,点击Git,点击commit Direcotry
![image-20230429113453984]()
-
然后输入提交的版本名字即可
![image-20230429113610647]()
5.6 版本切换
-
找到IEAD左下角的Git
-
点击里面的Log(黄色的标签是当前的版本,绿色的是master版本)
![image-20230429114529011]()
-
如果需要切换版本,只需要右键对应的版本,选择checkout
![image-20230429114625959]()
5.7 分支操作
5.7.1 创建分支
-
右键项目Git—》Repostory–》Branch
![image-20230429114904138]()
-
选择new Branch(或者点击IDEA右下角的版本号)
![image-20230429115055347]()
5.7.2 切换分支
点击右下角的分支,点击需要切换的分支,然后点击checkout即可

5.7.3 合并分支
-
正常合并
修改一个分支,然后点击右下角的分支,选择哪个分支需要合并到当前的分支上,点击Merge
![image-20230429121138890]()
-
冲突合并
两个都修改了,再合并会弹出这个框
![image-20230429124036351]()
点击Merge手动对代码进行修改

三、GitHub的使用
1.创建远程库
-
登录账号,点击下面的按钮
![image-20230428130323782]()
-
创建远程库
![image-20230428130704682]()
-
查看远程库的连接
![image-20230428130829099]()
-
本地创建远程库别名
因为远程库的连接太长了,所以我们可以在本地创建别名,通过别名连接远程库
-
查看当前电脑配置的所有远程库别名
git remote -v- 1
-
添加远程库别名
git remote add 远程库别名 远程库链接- 1
-
查看是否配置成功
git remote add 远程库别名 远程库链接- 1
-
2.代码推送
基本语法:git push 别名 分支名
-
切换到需要推送的分支
-
使用推送语法:git push 别名 分支名
![image-20230428133116338]()
-
推送成功界面
![image-20230428133204500]()
-
然后刷新浏览器,就可以看到代码
3.代码拉取
将本地库落后的代码和远程库新的代码同步,会自动提交本地库
基本语法:git pull 远程库名 需要拉取的分支

4.代码克隆
不需要初始化本地库
不需要登录账号
基本语法:git clone 仓库地址
clone会做如下操作:
- 拉取代码
- 初始化本地仓库
- 创建别名(给拉取的远程仓库创建别名)
5.GitHub团队协作
5.1 团队内协作
-
浏览器登录github,然后进入仓库,选择settings
![image-20230428135757000]()
-
点击左侧的Collaborators
-
选择下面的Manage access,邀请伙伴
![image-20230428135922445]()
-
输入好友的名字,点击添加
![image-20230428140217668]()
-
添加成功的人就可以拉取、推送等操作
5.2 跨团队协作
-
找到另一个团队的仓库
-
点击右上角的fork(叉到自己的仓库)
![image-20230428140945008]()
-
然后自己的仓库中就有对应的代码了
-
然后进行修改
-
修改完成之后,点击**pull requests**
![image-20230428141351599]()
-
然后点击 new pull request
-
审核方在仓库中的pull request中就会看到记录
-
审核方点进去,可以点击**merge pull request**
6.SSH免密登录
-
进入本机的下面这个路径:C:\Users\用户名
-
使用git的bash命令框输入:
ssh-keygen -t rsa -C 账号的邮箱- 1
-
按三次回车
-
然后进入.ssh文件夹,里面生成了两个文件:
rsa结尾的是私钥,pub结尾的是公钥
-
使用cat命令,打开公钥文件,复制里面的内容
-
进入github,点击头像,选择settings
![image-20230428144123596]()
-
选择左侧的 SSH ,将复制的东西添加进去
![image-20230428144212052]()
![image-20230428144236100]()
-
然后使用pull测试拉取功能
git pull ssh连接 分支
7.IDEA集成GitHub
7.1 设置GitHub账号(两种方式)
- 账号密码登录方式
- 查看settings中Version Control是否有GitHub(如果没有自己再Plugins中下载)
- 点击右边的+号,输入账号密码,登录

- Token登录方式
-
点击Token登录
![image-20230429125317875]()
-
登录Github,点击头像找到Settings
-
进去之后,点击左下角的Developer settings
![image-20230429125738963]()
-
选择Person access tokens
![image-20230429125804859]()
-
给一个名字,权限全部拉满
![image-20230429130027360]()
-
点击创建之后,就会生成一个口令
![image-20230429130146427]()
-
复制到IDEA中即可
7.2 分享项目到GitHub
-
因为有GitHub插件,所以不需要我们手动创建远程库
-
点击VCS—》Impoet into Version Control–》share
![image-20230429130511099]()
-
会弹出一个框,第一个是远程库名(一般和项目名【也就是本地库名一样】),第二个是别名(一般和本地库名一样)
![image-20230429130718318]()
-
点击share即可
7.3 推送代码到远程库
代码修改了,需要推送到远程库,让本地库和远程库的版本一致
如果本地库和远程库的代码版本一致,push的操作会被拒绝
-
修改完代码之后,先提交本地库,然后点击IDEA最上面的VCS–》Git–》Push
![image-20230429131302422]()
-
里面默认的是https连接,很慢,所以推荐使用SSH连接
先找到远程库,点击进去,点击code,复制远程库的SSH连接
点击 库名,选择自定义一个
![image-20230429131705312]()
-
添加成功之后,就可以选用SSH
![image-20230429131740363]()
-
直接点至push即可
7.4 拉取远程库到本地
如果本地的代码版本落后于远程库的代码,一定要先pull拉取一下远程库代码 ,将本地库代码更新到最新版本,然后再修改
- 点击IDEA最上面的VCS–》Git–》Pull
- 选择拉取连接、需要合并的分支
7.5 克隆远程库到本地
-
打开IDEA的最开始界面
![image-20230429134434887]()
-
选择Get from Version Control
-
将项目的SSH链接复制进去
![image-20230429134706117]()
四、Gitee的使用
1.码云创建远程库
-
点击右上角+号,选择新建仓库
![image-20230429141203076]()
-
然后输入库名创建即可
-
使用码云的时候直接使用https即可
2.IDEA集成Gitee
2.1 登录账号
-
在plugins中下载gitee插件,然后重启
-
然后打开settings–》Version Control–》Gitee
-
使用邮箱登录账号
![image-20230429141651727]()
2.2 分享项目
跟GitHub一样,看图即可

2.3 推送项目
前提是已经创建好一个库了
-
选择push
![image-20230429142035871]()
-
选择链接,如果没有需要自己创建(复制仓库的https链接)
![image-20230429142129254]()
![image-20230429142247630]()
2.4 拉取代码
当本地库中的代码版本落后于远程库的时候,可以拉取代码,把本地库的代码更新到最新版本

2.5 克隆代码
克隆的方式和GitHub一样
3.Gitee导入GitHub项目
3.1导入GitHub项目
把码云的代码导入GitHub上
-
进入码云,点击右上角的+号,创建新仓库
-
进入页面,可以什么都不填,滑到最下方,点击导入已有仓库(最新版本是在最上面)
![image-20230429143754686]()
-
进入GitHub,复制仓库的Https链接(一定要是Https)
-
然后直接点击创建按钮
![image-20230429144102075]()
3.2 更新Gitee项目
如果GitHub的项目跟新了,码云上的版本不会自动更新,需要手动更新
点击仓库的圈即可刷新

五、GitLab的使用
是一个需要自己搭建的代码管理仓库
官网地址: GitLab
1.GitLab服务器的搭建和部署
1.1 服务器准备
需要一个系统为Centos7的服务器,保证能够上网
需要知道服务器的ip地址、主机名(/etc/hostname里面的)
需要关闭服务器防火墙
1.2 修改本机host文件
文件目录:C:\Windows\System32\drivers\etc\hosts
-
使用记事本打开host文件,在文件最后加上服务器的ip地址和服务器的hostname
![image-20230429151039559]()
1.3 提前下载离线安装包
下载好,使用xftp传过去,就可以离线安装
上传到服务器的/opt/module目录下
下载地址:https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm
1.4 编写脚本
-
在module目录下使用命令
vim gitlab-install.sh- 1
-
将下面的内容粘贴进去,然后保存
sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm sudo yum install -y curl policycoreutils-python openssh-server cronie sudo lokkit -s http -s ssh sudo yum install -y postfix sudo service postfix start sudo chkconfig postfix on curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
-
给文件加权限
chmod +x gitlab-install.sh- 1
-
执行脚本
./gitlab-install.sh- 1
1.5 初始化GitLab服务
gitlab-ctl reconfigure
- 1
1.6 启动GitLab服务
如果要关闭,使用stop命令
gitlab-ctl start
- 1
1.7 访问GitLab
浏览器输入服务器的ip地址即可(或者浏览器输入服务器的主机名(前面已经配置过了))
-
修改root账号的代码
![image-20230429154755307]()
-
使用root和密码登录
-
然后点击创建项目等等
2.IDEA集成GitLab
2.1 安装GitLab插件
2.2 登录账号
输入gitlab的地址,然后协议选择HTTPS

2.3 使用说明
-
使用方式和其他两个一样
-
但是注意:从网站获取仓库的https链接的时候,网站给的是一个例子的链接,需要我们手动改成实际的
![image-20230429155516234]()
六、Git在实际项目中的使用
方式1:公用一个仓库,但是使用不同分支
-
进到公司会给一个Gitee账号,告诉负责的项目
-
在本地的Git命令行中将项目clone下来
git clone 项目地址- 1
-
然后查看clone下来的项目有哪些分支
git branch- 1
-
然后通过命令创建并且切换到自己的分支
git checkout -b 随便起一个分支名- 1
-
然后编写项目
-
写完之后查看是否有文件修改了
git status- 1
-
如果有文件是红色的说明没有提交到暂存区
git add .- 1
-
提交到暂存区之后提交到本地仓库
git commit -m "修改的描述"- 1
-
先在远程仓库创建一个和我们使用的分支一个名字的分支(不然push不上去)
-
然后推送到响应的分支
git push origin 远端分支名- 1
-
项目开发完了之后需要合并分支,因此需要先切换到主分支
git checkout master- 1
-
然后我们pull以下master分支,防止master分支有更改
git pull- 1
-
然后合并我们开发的分支
git merge 我们的分支- 1
-
主分支合并完了之后就可以往线上push了
git push- 1
方式2:把仓库fork到自己仓库下,然后开发合并
-
先把主仓库的项目fork到自己账号下面
-
将自己仓库中的项目clone下来
git clone 项目地址- 1
-
然后就可以修改本地的代码
-
然后查看是否有修改但未提交的代码
git status- 1
-
然后将修改提交到暂存区
git add ,- 1
-
然后提交到本地仓库
git commit -m "本次修改的描述"- 1
-
然后直接推送到自己的仓库(因为没有新建分支,所以直接push不用加分支)
git push- 1
-
项目开发完了之后,我们自己的仓库需要和主仓库的代码合并,所以点击主仓库的pull request 申请合并
-
审核人员完成之后会由他们合并
特殊情况:提交的时候我的版本落后,提交不上去
-
我们提交之前,线上版本已经发生了改变,以至于我们自己的版本和线上仓库有版本差距,就会提交不上去
-
所以我们push之前只需要pull一下,然后处理一下代码冲突即可
git pull- 1
-
然后再push到远程仓库
git push- 1



















































浙公网安备 33010602011771号