本人在公司一直用的是svn,现在学习git的使用。
一、git服务器搭建。
一般使用git会用github托管代码,或者国内的gitee来托管,我这边为了学习测试,用虚拟机部署git服务。
首先yum源安装git:yum install -y git
安装完成后创建git用户
提示我密码太短太简单,不管他。
服务器端开始创建git仓库,以项目名+.git结尾。注意我是在user/local路径下创建的多层文件夹
[root@hadoop1 local]# mkdir -p git/xltest.git
开始初始化git仓库
会生成一系列文件
最后一步,将xltest.git修改为git用户
[root@hadoop1 git]# chown -R git:git xltest.git/
到这git的服务端仓库已经搭建完成了。远程仓库的地址是这样命名的:
<用户名>@<服务器地址>:<仓库全路径>
我这边的虚拟机就是 git@192.168.48.144:/usr/local/git/xltest.git
二、客户端pull push文件
好了,现在我们在windows电脑上随便创建一个文件夹。右键点击GIT Bash Here打开Git命令终端(前提是你先下载安装好git)
打开git命令行键入命令git clone + 远程git仓库地址,这边需要输入密码,我这只是为了先实现功能,没有使用ssh的公钥去连接,以后会加上的。
这时我的文件夹就会多了一个名为xltest的文件夹,xltest下面还有一个.git文件夹。说明clone成功了。
创建一个txt文件,写上x=1。
使用git输入git status
就是未被跟踪的文件,需要你使用git add命令去跟踪,也就是提交到缓存。(git提交文件有三步,1、add存入缓存,2、commit提交到本地仓库,3、push传入远程仓库)。
(PS也可以使用git status -s查看状态码。)
我们使用add将其存入缓存。
这时就说是一个新的文件,没有commit,让你commit到本地仓库中去。
git commit -m '注释' 添加注释
我们提交成功以后,git status查看状态说没有需要提交的文件了,干净的工作目录。就是提交本地仓库成功了。我们现在将其push到远程仓库中去。
还是需要密码,因为没有做ssh免密。如上图已经push成功了。
测试:
我们重新建立一个文件夹去检测一下,顺便为下面的解决冲突做准备。
跟上述步骤一样,新建文件夹后打开Git Bash Here命令行,clone远程仓库。
clone成功后,我们在新文件夹中也发现了刚刚提交的文件,说明提交成功了
三、冲突处理
我们在开发过程中,经常会遇到冲突conflicts,多人开发团队不可避免。
看一下在git中如何处理冲突。
我们使用文件夹2中的temp修改x=2,并提交到仓库。
提交成功,此时我在文件3中也修改为x=3。然后push到远程仓库。
遇到了问题,先让你在push之前先pull一下。
pull之后日志显示有temp.txt 有conflict。日志中有句话“Automatic merge failed; fix conflicts and then commit the result.”合并失败,修复冲突以后再commit结果。我们看下文件。
原因是你已经将代码commit过了,git认为你的代码同样很重要,于是就自动合并出结果,让你手动处理。
我们修改完这个文件后add,commit,push就可以了,因为已经合并过了,可以直接提交。
还有第二种情况:
第一步是一样的,git服务器上是x=1,在新建文件2中修改x=2,push到了服务器。在文件夹3中修改成了3,但是并没有进行到commit操作,先了进行pull。会报另一个错。
说是本地的文件将会被合并来覆盖,先commit或者stash。也就是说如果要合并,需要commit或者stash。commit就是上面那种情况,所以我们开始看stash来如何处理:
1、先git stash 暂存本地代码
git stash list查看多次存储内容,然后形成一个列表。stash@{0}是我们刚才暂存的标记
我们对temp.txt的修改被暂存到缓存中,本地文件被revert到上一版本,就是x=1。
现在执行pull命令,将git上最新的代码pull下来,注意(这里使用pull是不会报错的,因为你的修改被stash到缓存中,本地文件会回滚到上一版本,执行pull是不会报错的)。
于是现在的文件夹3中的temp.txt文件是git中最新的,也就是x=2。
开始执行合并操作
查看合并后的temp.txt文件
本地修改的3在stashed changes里面,上面的updated upstream是服务器上的版本。
于是你修改后就可以add,commit,push到远程仓库了。
记住要清一下刚刚的缓存,git stash drop 标记。(git stash clear清除所有,慎用)
本片关于git的使用到这里就结束了。