Git
Git介绍
官网中对Git的介绍
Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git 易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。 其性能优于 Subversion、 CVS、 Perforce 和 ClearCase 等版本控制工具。
版本控制介绍
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
版本控制有利于从个人开发过渡到团队协作。
分布式版本控制VS集中式版本控制
集中式版本控制工具
集中化的版本控制系统诸如 CVS、 SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统, 要远比在各个客户端上维护本地数据库来得轻松容易。
事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
分布式版本控制工具
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
1、服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
2、每个客户端保存的也都是整个完整的项目(包含历史记录, 更加安全)
Git的发展历史
工作机制和代码托管中心
工作机制
代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
1、局域网
GitLab
2、互联网
GitHub(外网)
Gitee 码云(国内网站)
Git安装
在Git下载页面,选择下载Windows 64位版的Git安装软件。
安装步骤按照安装软件的安装向导安装即可,无需过多配置。
安装成功后,通常在文件浏览器空白处单击击鼠标右键,弹出菜单栏有Git的选项。
Git命令
设置用户签名
git config --global user.name abc #用户名 git config --global user.email abc@123.com #用户邮箱
说明:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。 Git 首次安装必须设置一下用户签名,否则无法提交代码。
tips: 这里设置的用户名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。
查看用户签名
cat ~/.gitconfig
即查看系统盘/用户/.gitconfig文件
初始化本地库
git init
即在当前目录下创建了一个名为.git的非空隐藏文件夹。
查看本地库状态
git status
添加暂存区
git add 文件名
提交本地库
git commit -m "日志信息" 文件名
查看提交记录
git reflog git log
git log 命令可以显示所有提交过的版本信息,如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息。
git reflog 显示所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
版本穿梭
git reset --hard 版本号
Git分支
什么是分支
在版本控制过程中,若同时推进多个任务。我们就可以为每个任务创建单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来, 开发自己分支的时候,不会影响主线分支的运行。分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
分支的优点
1、可以同时并行推进多个功能开发,提高开发效率。
2、各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
查看分支
git branch -v
创建分支
git branch 分支名
切换分支
git checkout 分支名 • 1
分支合并
git merge 分支名
首先要切换到master分支上,然后在master分支上合并hot-fix分支
合并冲突(merge conflict)
1、原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。 Git 无法替我们决定使用哪一个,因此,必须人为决定新代码内容。
2、解决:编辑有冲突的文件,删除特殊符号,决定要使用的内容
创建和切换分支的实质
master、 hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。
1、HEAD 如果指向 master,那么我们现在就在 master 分支上。
2、HEAD 如果执行 hot-fix,那么我们现在就在 hot-fix 分支上。
所以切换分支的本质就是移动 HEAD 指针。
Github
创建远程库
登陆后,点击“New repository”,创建远程库
创建远程库的别名
git remote -v #查看当前所有远程库的别名 git remote add 别名 远程库地址 # 创建别名
推送本地库到远程库
git push 别名 分支 • 1
在提交代码前最好先更新下远程仓库的代码到本地仓库,这样可以减少不必要的冲突
拉取远程库到本地
git pull 别名 分支 • 1
克隆远程库到本地
git clone 远程库地址
clone所做操作:
1、拉取代码(pull)
2、初始化本地仓库(init)
3、创建别名(remote add)
团队内协作和跨团队协作
团队内协作
选择目标
发送网址
接受邀请
跨团队协作
发送网址
收到网址
Fork项目
pull请求
合并请求
SSH免密登录
我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问。
- 先到用户的主页目录,删除.ssh文件夹(如果没有.ssh文件夹,忽略此步)
- 在用户的主页目录运行命令
ssh-keygen -t rsa -C 登录邮箱
后敲三次回车即可生成.ssh目录 - 复制.ssh/rsa.pub中的公钥并添加至Github账号SSH设置中
- 接下来便可使用SSH方式推送或拉取
IDEA集成Git
配置Git忽略文件
与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。例如,Maven工程根据src生成的target。
创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore),这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下。
git.ignore 文件模版内容如下:
# 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
在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)
[user] name = Layne email = Layne@atguigu.com [core] excludesfile = C:/Users/asus/git.ignore
注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”
在idea配置Git程序
在菜单栏File->Setting->搜索栏搜Git,配置Git的安装路径。
初始化Git
在菜单栏VCS -> Import into Version Control -> Create Git Repository
选择要创建 Git 本地仓库的工程,然后OK。
添加到暂存区
右键点击文件,选择Git->Add,添加文件到暂存区。
添加成功后,文件名会从红色变成绿色。
提交到本地库
右键点击文件,选择Git->Commit File
添加日志信息后提交
版本穿梭
在IDEA 的左下角,点击 Git,然后点击 Log 查看版本
右键选择要切换的版本,然后在菜单里点击 Checkout Revision。
创建分支
右键点击文件,Git -> Repository -> Branches,或者点击IDEA的右下角,如图红圈所示部位:
选择点击New Branch:
创建新分支:
切换分支
跟创建分支步骤相似,如点击IDEA的右下角(它显示项目正处在那条分支),如图红圈所示部位,选择你想要切换的分支,然后checkout:
或者在log窗口,右键点击分支,选择checkout:
合并分支
点击IDEA 窗口的右下角的master,将 hot-fix 分支合并到当前 master 分支。选择hot-fix->Merge into Current
如果代码没有冲突, 分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交本地库。
合并冲突
冲突产生,需要人工解决:
代码冲突解决,将代码提交本地库后,如图所示:
设置Github账号
在菜单栏File->Setting->搜索栏搜GitHub,添加GitHub账号:
分享项目到Github
推送代码到远程库
拉取远程库代码合并到本地库
克隆代码到本地
在菜单栏的File->Close Project->Get from Version Control
或者在菜单栏VCS->Get from Version Control