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 合并分支
-
正常合并
把hot-fix合并到master分支上(也就是用hot-fix的代码覆盖master的代码)(只有一个分支做了修改)
-
冲突合并
冲突合并产生的原因:
合并分支的时候,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法决定使用哪一个,需要我们人为决定新代码内容(两个分支都修改且提交后修改)
-
合并后需要手动修改
-
进入文件,把不需要的东西删除,把需要的东西留下来
-
然后提交暂存区
-
提交执行(注意:这个时候提交不能带文件名)
-
说明:提交后,修改的是合并的分支
-
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)
-
然后点击测试没问题就配置成功
5.4 初始化库
-
点击IDEA最上面一栏的VCS,按下图选择,创建本地库
-
本地库默认是在工程目录下的
-
初始化完成之后,可以发现工程中的文件都是红色的也就是git的未提交状态
5.5 添加暂存区、提交
-
找到爆红的文件,右键点击,选择Git,有一个add,文件就会添加到暂存区
如果项目中的所有文件都允许添加,可以直接右键项目进行上面的操作(会提示包含忽略的文件,是否强制添加,点击no)
-
右键需要提交的项目/文件,点击Git,点击commit Direcotry
-
然后输入提交的版本名字即可
5.6 版本切换
-
找到IEAD左下角的Git
-
点击里面的Log(黄色的标签是当前的版本,绿色的是master版本)
-
如果需要切换版本,只需要右键对应的版本,选择checkout
5.7 分支操作
5.7.1 创建分支
-
右键项目Git—》Repostory–》Branch
-
选择new Branch(或者点击IDEA右下角的版本号)
5.7.2 切换分支
点击右下角的分支,点击需要切换的分支,然后点击checkout即可
5.7.3 合并分支
-
正常合并
修改一个分支,然后点击右下角的分支,选择哪个分支需要合并到当前的分支上,点击Merge
-
冲突合并
两个都修改了,再合并会弹出这个框
点击Merge手动对代码进行修改
三、GitHub的使用
1.创建远程库
-
登录账号,点击下面的按钮
-
创建远程库
-
查看远程库的连接
-
本地创建远程库别名
因为远程库的连接太长了,所以我们可以在本地创建别名,通过别名连接远程库
-
查看当前电脑配置的所有远程库别名
git remote -v
- 1
-
添加远程库别名
git remote add 远程库别名 远程库链接
- 1
-
查看是否配置成功
git remote add 远程库别名 远程库链接
- 1
-
2.代码推送
基本语法:git push 别名 分支名
-
切换到需要推送的分支
-
使用推送语法:git push 别名 分支名
-
推送成功界面
-
然后刷新浏览器,就可以看到代码
3.代码拉取
将本地库落后的代码和远程库新的代码同步,会自动提交本地库
基本语法:git pull 远程库名 需要拉取的分支
4.代码克隆
不需要初始化本地库
不需要登录账号
基本语法:git clone 仓库地址
clone会做如下操作:
- 拉取代码
- 初始化本地仓库
- 创建别名(给拉取的远程仓库创建别名)
5.GitHub团队协作
5.1 团队内协作
-
浏览器登录github,然后进入仓库,选择settings
-
点击左侧的Collaborators
-
选择下面的Manage access,邀请伙伴
-
输入好友的名字,点击添加
-
添加成功的人就可以拉取、推送等操作
5.2 跨团队协作
-
找到另一个团队的仓库
-
点击右上角的fork(叉到自己的仓库)
-
然后自己的仓库中就有对应的代码了
-
然后进行修改
-
修改完成之后,点击**pull requests**
-
然后点击 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
-
选择左侧的 SSH ,将复制的东西添加进去
-
然后使用pull测试拉取功能
git pull ssh连接 分支
7.IDEA集成GitHub
7.1 设置GitHub账号(两种方式)
- 账号密码登录方式
- 查看settings中Version Control是否有GitHub(如果没有自己再Plugins中下载)
- 点击右边的+号,输入账号密码,登录
- Token登录方式
-
点击Token登录
-
登录Github,点击头像找到Settings
-
进去之后,点击左下角的Developer settings
-
选择Person access tokens
-
给一个名字,权限全部拉满
-
点击创建之后,就会生成一个口令
-
复制到IDEA中即可
7.2 分享项目到GitHub
-
因为有GitHub插件,所以不需要我们手动创建远程库
-
点击VCS—》Impoet into Version Control–》share
-
会弹出一个框,第一个是远程库名(一般和项目名【也就是本地库名一样】),第二个是别名(一般和本地库名一样)
-
点击share即可
7.3 推送代码到远程库
代码修改了,需要推送到远程库,让本地库和远程库的版本一致
如果本地库和远程库的代码版本一致,push的操作会被拒绝
-
修改完代码之后,先提交本地库,然后点击IDEA最上面的VCS–》Git–》Push
-
里面默认的是https连接,很慢,所以推荐使用SSH连接
先找到远程库,点击进去,点击code,复制远程库的SSH连接
点击 库名,选择自定义一个
-
添加成功之后,就可以选用SSH
-
直接点至push即可
7.4 拉取远程库到本地
如果本地的代码版本落后于远程库的代码,一定要先pull拉取一下远程库代码 ,将本地库代码更新到最新版本,然后再修改
- 点击IDEA最上面的VCS–》Git–》Pull
- 选择拉取连接、需要合并的分支
7.5 克隆远程库到本地
-
打开IDEA的最开始界面
-
选择Get from Version Control
-
将项目的SSH链接复制进去
四、Gitee的使用
1.码云创建远程库
-
点击右上角+号,选择新建仓库
-
然后输入库名创建即可
-
使用码云的时候直接使用https即可
2.IDEA集成Gitee
2.1 登录账号
-
在plugins中下载gitee插件,然后重启
-
然后打开settings–》Version Control–》Gitee
-
使用邮箱登录账号
2.2 分享项目
跟GitHub一样,看图即可
2.3 推送项目
前提是已经创建好一个库了
-
选择push
-
选择链接,如果没有需要自己创建(复制仓库的https链接)
2.4 拉取代码
当本地库中的代码版本落后于远程库的时候,可以拉取代码,把本地库的代码更新到最新版本
2.5 克隆代码
克隆的方式和GitHub一样
3.Gitee导入GitHub项目
3.1导入GitHub项目
把码云的代码导入GitHub上
-
进入码云,点击右上角的+号,创建新仓库
-
进入页面,可以什么都不填,滑到最下方,点击导入已有仓库(最新版本是在最上面)
-
进入GitHub,复制仓库的Https链接(一定要是Https)
-
然后直接点击创建按钮
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
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账号的代码
-
使用root和密码登录
-
然后点击创建项目等等
2.IDEA集成GitLab
2.1 安装GitLab插件
2.2 登录账号
输入gitlab的地址,然后协议选择HTTPS
2.3 使用说明
-
使用方式和其他两个一样
-
但是注意:从网站获取仓库的https链接的时候,网站给的是一个例子的链接,需要我们手动改成实际的
六、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