GIT
1、GIT和SVN
SVN:集中式版本控制工具
优点:采用集中管理方式,管理员可以轻松掌握每个人的开发权限
缺点:服务器单点故障、容错性差
GIT :分布式版本控制系统
没有中央服务器,每个人的电脑都有一个完整的版本库
2、使用git管理文件版本
2.1 创建版本库
- 创建一个空文件夹(即本地仓库/工作区),再创建一个目录作为工作目录!!!!!如下操作在工作目录中执行
-
- 法一:鼠标右键点开目录栏,点击Git GUI Here,点击Create new repository再当前文件夹中创建.git文件(该文件为隐藏文件,且它才是真正的版本库,需打开windows设置显示隐藏文件)
- 法二:鼠标右键点开目录栏,点击Git Bash Here输入git init 即可
- 法三:鼠标右键点开目录栏,点击Git 在这里创建版本库,不要勾选制作纯版本库!!!!
2.2 向本地仓库中添加文件
- 将文件放在工作目录下,将文件加入暂存区,操作如下:
- 再将文件提交至本地仓库,必须填写日志信息,否则无法提交(对文件的改动…)
在添加文件至暂存区时可以直接提交!
查看本地仓库
-
修改文件后,再次提交即可(填写日志信息!)
-
查看修改历史
5.查看不同次修改的差异
2.3 删除本地仓库中的文件
-
法一:可直接在工作目录中删除文件,但这种方法删除后在本地仓库中该文件仍然存在,需重新提交一次即可在本地仓库中删除文件
-
- 如误删文件,还原方法如下
- 如误删文件,还原方法如下
-
法二:操作如下,仍需重新提交才能在本地仓库中删除文件
2.4 将Java程序添加到本地版本库
-
将所需添加的java文件复制到工作目录下,先将整个java文件添加到暂存区
-
再将java文件包下不需要加到本地仓库中的文件(一般.idea和out文件不需传递)移除,但一般需保留本地文件,此时会在java文件包下生成一个.gitignore文件(显示被移除的文件),这个文件页要先添加到暂存区
最后将java文件包提交至版本库中
3、在github上创建仓库并传送数据
官网:https://github.com
传输协议:HTTPS/SSH
SSH
- 创建SSH密钥和公钥
在工作目录下鼠标右键Git Bash Here输入ssh-keygen -t rsa生成密钥和公钥
- 在对应目录找到公钥和私钥
- 将公钥的内容复制粘贴至github上
使用SSH将本地仓库推送到远程
法一:
-
在github上找到远端的SSH链接,将其复制,在工作目录下打开Git Bash Here面板输入 git remote add origin 链接(链接可在面板内单击右键点击Paste粘贴)——连接本地仓库与远程仓库
-
将本地仓库推送至远程仓库
在面板中接着输入git push -u origin master
至此,本地仓库推送至远程仓库成功
法二:(推荐使用)
- 在工作目录下点击鼠标右键点击Git同步…,操作如下:
需检查上图网络出的SSH客户端是否为ssh.exe文件
再在点击推送即可
HTTPS
使用https方式将本地仓库推送到远程
点击推送(下图所示有的需要自己设置用户名和密码,有的只需要github授权,有的可以直接推送)
4、克隆远程仓库到本地
-
新建一个目录用来存放克隆下来的文件
-
在github上选择要克隆的远程仓库,选择HTTPS克隆或者SSH克隆
SSH克隆
- 在克隆目录下打开Git Bash Here 面板,输入git clone 链接即可
HTTPS克隆
- 在克隆目录下点击鼠标右键点击Git克隆…,操作如下
5、推送修改的文件及冲突解决
-
在本地仓库中修改文件后,通过同样的推送方法将改动同步到远程仓库中
-
若远程仓库中的文件被发生改动,可在克隆目录下通过拉取来完成本地仓库的同步改动
-
修改冲突
当在本地仓库的工作目录下修改文件推送到远程仓库后,此时克隆目录中的文件并没有发生改动,若在克隆目录内将该文件进行修改在推送到远端则会发生修改冲突导致推送失败
此时在克隆目录下进行对远程仓库文件的拉取操作
此时拉取也会无法成功进行,但会在同一个文件中将两次修改罗列出来(用=分割线将两次修改分开了),此时需手动合并内容来解决冲突(一般若两次修改都需要保存,则只需要删除系统添加的提示语即可)
最后,手动合并后的文件还需进行下图的操作:
至此,才算文件修改完成,可提交至本地仓库再推送到远程仓库
6、分支
在创建本地仓库时,系统会自动创建一个master分支(主分支),每次提交文件的时候,Git将它们串成一条时间线,即master分支。严格来说,在提交文件的时候,HEAD指针指向master,master指向提交,即HEAD指针指向当前分支
一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。每次提交,master分支就会向前移动一步,这样,随着我们不断提交,master分支的线也越来越长。
创建新的分支时,例如dev,则dev分支指向master指向的提交,在把HEAD指针指向dev,就表明当前分支在dev上
- 在工作目录下,这两处都可创建分支
-
- 但在切换/检出处创建分支会自动将指针指向新的分支
- 而单纯创建分支则不会切换分支
- 但仍可再自行切换分支
再不同分支中修改文件内容是互不干扰的,同时也可以将不同的分支再次合并为一个分支,若有分支不需要了也可以进行删除
分支的合并删除
在合并两个分支时,想保留哪个分支,就先切换到哪个分支,然后再选择另一个分支进行合并
- 若在不同分支中对同一个文件进行了修改,此时合并会产生修改冲突,手动解决即可
在切换/检出处可删除分支
7、在IDEA中使用git
7.1 使用IEDA将工程添加到本地仓库
-
在IDEA中设置git(要保证git可执行文件路径的正确!!)
-
将该项目放进git中
-
- 先创建一个git存储库
- 在该项目的上一级目录创建git存储库
- 此时可直接在IDEA中将程序提交到本地仓库或推送到远程仓库
- 推送到远程仓库
- 先创建一个git存储库
7.2 使用IDEA克隆仓库并同步代码
-
创建一个新项目来同步代码
-
若有其他人克隆并修改了代码,可在IDEA中进行拉取操作即可更新修改后的代码
7.3 在IDEA中使用分支
- 在IDEA中新建一个分支
- 再点进分支一栏中