git版本控制工具入门教程(使用IDEA)
历史
Linux开源项目使用bitkeeper分布式版本控制系统来管理和维护代码,bitkeeper与Linux终止合作关系后,Linux团队开发了自己的分布式版本控制系统git。
git和svn的区别:
①svn是集中式管理工具,必须连接到服务器上才能进行代码的提交、修改等操作,如果出现单点故障,就无法继续正常工作。②git是分布式管理工具,没有中央服务器,每个人的电脑就是一个完整的版本库。
git工作流程
①从远程仓库clone资源到本地仓库。
②从本地仓库中checkout代码到工作区然后进行代码修改。
③在提交前先将代码从工作区add到暂存区。
④提交修改,从暂存区commit到本地仓库,本地仓库中保存修改的各个历史版本。
⑤修改完成后,需要和团队共享代码时,可以将代码push到远程仓库。
安装
之前安装过了,很久没有用,打开命令行,用git clone https://github.com/git/git
更新一下git的版本。
更新完毕后通过git --version
查询当前版本
还需要下载一个tortoisegit
安装时注意这一步选ssh
安装语言包后refresh就有中文了
目录就选git的bin目录
用户名和邮箱随便填就行了,下一步确定左边选项是SSH,然后点完成
本地仓库
创建本地仓库
可以在桌面新创建目录repository/repo1,右键git bash here,使用git init
,之后会出现一个.git
目录(需要显示隐藏项目)
向本地仓库添加文件
.git就是本地版本库,包含.git的目录repo1就是工作目录,添加的文件应该放在工作目录下,也就是repo1中。
创建一个hello.txt,随便输入一些字符,按以下步骤添加
点击确定后提示添加完成,点击确定,此时文件就加入了暂存区
将文件从暂存区提交至本地仓库,右键选择提交
必须要添加日志信息,然后提交
重启后会发现提交的hello.txt多了绿色的勾,很不爽的是其他文件都给我标上了问号。。
这时把C:/Users/用户名/.git文件夹删掉刷新就可以了
修改本地仓库文件内容并提交
如果修改了文件内容,会变成红色的感叹号
再次提交,添加对应的日志信息
提交成功后又变成绿色
通过显示日志可以查看修改信息
删除本地仓库文件和恢复
直接右键删除
如果需要恢复:
如果想要真正地删除掉,则删除后进行一次提交,此时便彻底删除无法恢复
将Java工程添加到本地仓库
向将Java工程拷贝到本地仓库目录下
右键添加到暂存区
将无用的.idea和out目录忽略掉
选择保留本地文件,然后将.gitnore添加,最后返回上一级目录提交
成功提交
远程仓库
在github创建远程仓库
注意不要勾选使用readme初始化
创建SSH**并在GitHub配置公钥
在本地仓库通过ssh-****** -t rsa
创建**
一般创建在用户的.shh目录下
记事本打开.pub结尾的公钥,在GitHub的设置里配置
使用SSH方式将本地仓库推送到远程
打开刚才创建的远程仓库,找到推送本地仓库的命令
在本地仓库使用命令行推送
再次刷新后发现exam工程已被推送进来
使用tortoisegit
创建一个新的远程仓库
在本地仓库右键git 同步
点击管理
配置时先将网络的ssh客户端设置为本机git下的ssh.exe
设置远端url为远程仓库url,putty**是之前ssh**中不带pub结尾的私钥
之后确定,然后点击推送
刷新myRepo2远程仓库,已经被推送进来
使用https推送
再创建一个新的仓库
在本地仓库使用tortoisegit,配置远端,url为远程仓库的https地址,直接复制浏览器地址栏就行
点击确定,选是,然后推送
克隆远程仓库到本地
使用SSH
复制该地址,在本地仓库打开bash命令行,使用git clone 复制的地址
进行clone
使用HTTPS
右键git克隆
将https地址复制到url栏
克隆成功
推送/拉取修改的文件
在本地仓库创建一个update.txt,然后添加到暂存区,添加到本地仓库,推送到远程仓库
刷新远程仓库,已更新
本地仓库拉取已更新的文件
在git同步里选择拉取即可
文件冲突问题
现在repo1和myRepo中都有update.txt文件,分别对其修改并提交到本地仓库
repo1提交后,再推送到远程仓库,推送成功
之后在myRepo中修改,并提交本地
提交成功
但是推送至远程仓库时会失败,因为远程仓库update.txt已经被repo1修改过,现在myRepo中不是最新的了,类似于Java的CAS机制。。repo1和myRepo都取到的是update.txt,同时修改,repo1要更新时发现没被更新过,直接更新,myRepo更新时发现已经被更新了,所以推送失败。。
不能推送,选择拉取
选择解决冲突
打开文件把这3行删掉
只会提交到本地仓库,然后推送
此时远程仓库中成功更新
私有远程仓库
创建Linux上的私有git服务器
我使用的是centos8的虚拟机
使用yum install git
下载并安装git
安装完毕后用git --version
查询安装版本adduser -r -c 'git version control' -d /home/git -m git
在/home/git创建git用户,然后更改git用户的密码
切换到git用户 cd进到主目录 创建一个repo1仓库
使用git init --bare
初始化
推送至linux远程仓库
在windows的本地仓库推送,将url进行如下设置,192.168.2.142是我虚拟机的ip地址
(我压根没想到能连上 我虚拟机是桥接模式 我不知道ip地址怎么找 用secureCRT连了一下午都没成功 本来准备放弃的。。。我也不懂)
过程中就输入刚才git用户的密码
从远程仓库克隆
url和刚才的相同
之后会让你输入git用户的密码
成功后打开复制的仓库
分支
在我们每次的提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD指针严格来说不是指向提交,而是指向master,master才是指向提交的,所以HEAD指向的就是当前分支。
比如说钢铁侠MK1就是master,MK6就是MK1的一个分支,MK7也是MK1的一个分支,MK6和MK7就是MK1的两个分支,它们之间的开发是不会互相影响的,类似于二叉树。分支也是可以合并的,例如MK6和MK7合体为MK50,就是master。
创建分支
在repo1仓库右键创建一个分支
起名为branch
分支的合并与冲突解决
在当前(master)分支创建一个master.txt,添加到暂存区并提交到本地仓库
然后修改update的内容,并提交到master分支
现在切换到branch分支
可以发现branch分支是没有master.txt文件的,update也没有被修改,创建branch.txt,并修改update的内容然后提交
切换回master分支,进行合并
合并分支选branch
多出了branch分支创建的文件
打开update 移除这3句话
解决冲突
提交到master
成功
在IDEA操作git
配置git
创建一个新项目 gitTest
在settings里搜索git配置路径 可以用test尝试,配置后选择OK
在src创建一个类,随便写点什么
创建本地仓库
在VCS里创建本地仓库
选择当前项目的父目录IdeaProjects,选择ok
之后查看该目录,会发现多出了.git目录
添加到暂存区
回到idea右键项目add到暂存区
提交到仓库
点击IDEA右上角的绿色对勾提交
选择src和.imi的配置文件,然后添加注释,提交
之后再添加的代码会被绿色标注
推送到远程仓库
从VCS->git->push
点击define remote,复制githunb的远程仓库的url
点击push,会要求输入GitHub的账户和密码
这里我push失败了,貌似是因为版本不一致原因,我重新创建一个仓库
按照之前得步骤push到这个仓库,成功了~
刷新一下 发现远程仓库也更新了
从远程仓库克隆
将githunb的仓库https地址复制到url
一路选yes和next,clone成功
添加一行代码,提交,推送
打开github 已更新
从远程仓库拉取
打开一开始的旧代码
点击拉取
拉取成功
使用分支
创建
创建一个分支叫dev
此时当前分支是dev,哪个分支上有标签,哪个就是当前分支
增加一个方法
提交
点击checkout回到master
此时不再有dev方法