美文网首页
版本控制 、 Git基础 、 Git进阶

版本控制 、 Git基础 、 Git进阶

作者: 秋天丢了李姑娘 | 来源:发表于2021-06-21 20:10 被阅读0次

链接

一,版本控制系统

GIT 分布式
SVN 集中式

在gitlab主机配置git服务端

[root@gitlab ~]# dnf -y install git   //安装git
[root@gitlab ~]# mkdir /var/lib/git   //创建总目录
[root@gitlab ~]# git init /var/lib/git/project --bare   //创建名字叫project的仓库,仓库在git中用来存储数据
// init #创建仓库
// /var/lib/git/project  #仓库位置并且叫project
// --bare  #新的仓库可以被读写

在develop主机配置git客户端

[root@develop ~]# yum -y install git
[root@develop ~]# git clone 192.168.4.20:/var/lib/git/project   //克隆之前创建的仓库
// clone  #克隆

//config  #定义用户名字和邮箱
[root@develop project]# git config --global user.name "abc"  //user.name  #定义名字
[root@develop project]# git config --global user.email "abc@abc.com"  //user.email #定义邮箱
[root@develop ~]#cd  project   //进入仓库,重要步骤,以后操作仓库都需要是进入仓库的状态
[root@develop project]# echo "abc001" > 001.txt
[root@develop project]# git add .  //将仓库的变化提交到暂存区
//  add    #提交
[root@develop project]# git status  //查看状态信息并提示下一步操作信息
[root@develop project]# git commit -m "001"  //将之前暂存区的数据永久保存到仓库,m是定义日志提示信息
// commit  #永久保存

[root@develop project]# git push  //将本地仓库的数据推送(上传)到 git 服务器端
// push  #推送(上传)


[root@develop project]# git log  //查看完整日志
[root@develop project]# git log --pretty=oneline   //查看精简日志
[root@develop project]# git log --oneline   //最精简日志
[root@develop project]# git reflog  //查看本机操作日志


[root@develop project]# git config --global user.name "abc"   //定义客户端用户名
[root@develop project]# git config --global user.email "abc@abc.com"  //定义客户端邮箱
[root@develop ~]# cat .gitconfig

二,HEAD指针,可以将仓库恢复到过去的状态(类似虚拟机的读取快照功能)

[root@develop project]# git reflog    //查询日志可以看到第1列的随机字串,该字串定义了每次commit提交的数据状态,HEAD后大括号为0的位置是当前所在地
[root@develop project]# git reset --hard 3852   //回到时间节点为3852的位置,此时通过ls或者 git log  --oneline 可以查看当前的文件状态或提交记录
//  reset #使用序列号为3852或其他......
//  --hard  #强制恢复

[root@develop project]# echo 003 > 003.txt     //创建文件
[root@develop project]# git add .      //提交到暂存区
[root@develop project]# git commit -m 003    //提交到仓库永久保存
[root@develop project]# echo xyz > 003.txt    //修改文件
[root@develop project]# git add .     //提交到暂存区
[root@develop project]# git commit -m 003+    //提交到仓库永久保存
[root@develop project]# git reflog    //如果需要恢复003文件为原来的状态,可以查看日志找时间节点的随机字符
[root@develop project]# git log --oneline   //也可以查到
[root@develop project]# git reset --hard 5d66    //回到过去

创建a文件,然后commit提交
修改a文件,然后commit提交
创建b文件,然后commit提交
如果打算恢复a文件为原始状态,可以使用git reset --hard回到过去,然后将该文件拷贝
一份到其他位置,然后再回到最新位置

回复到过去的时间节点,找回数据思路:
1,git reflog 查看日志,找到旧数据所在时间节点
2, git reset --hard xxxx 回到过去,xxxx是时间节点的记录
3, 把需要找回的数据,从仓库中拷贝到另外一个目录
4, git reset --hard xxxx 回到现在
5, 在之前的目录找回旧数据


三,git分支

当项目内容比较多时,可以在git中使用分支,不同分支的文件可以互不干扰而不用创建多个仓库

[root@develop project]# git branch  //查看分支,*代表目前所在分支
[root@develop project]# git branch hotfix   //创建名字是hotfix的分支
[root@develop project]# git checkout hotfix   //切换到hotfix分支
[root@develop project]# echo hotfix > hotfix.txt   //在新分支创建文件
[root@develop project]# git add .
[root@develop project]# git commit -m "hotfix001"    //提交,该文件只能在hotfix分支看到
[root@develop project]# git checkout master      //回主分支
[root@develop project]# echo master > master.txt    //在主分支创建文件
[root@develop project]# git add .
[root@develop project]# git commit -m master001    //提交,该文件只能在主分支看到
[root@develop project]# git merge hotfix    //在master分支将hotfix分支合并

hotfix
a.txt b.txt hotfix.txt test.txt

master
a.txt b.txt master.txt hotfix.txt test.txt

分支中的特殊情况:
如果分别在不同分支,创建同名文件,内容不同,再进行合并时,会发生冲
突,此时需要手工修改冲突文件,修改完之后,就可以解决冲突

[root@develop project]# git branch hotfix     //创建新分支
[root@develop project]# git checkout hotfix    //切换到新分支
[root@develop project]# echo xyz > test.txt    //创建文件
[root@develop project]# git add .    //提交到暂存区
[root@develop project]# git commit -m "test"    //提交到本地仓库
[root@develop project]# git checkout master   //切换到默认分支
[root@develop project]# echo abc > test.txt     //创建文件
[root@develop project]# git add .   //提交到暂存区
[root@develop project]# git commit -m "test"   //提交到本地仓库
[root@develop project]# git merge hotfix   //合并分支,失败,因为两个分支有同名文件,但内容不同
// Auto-merging test.txt
// CONFLICT (add/add): Merge conflict in test.txt
// Automatic merge failed; fix conflicts and then commit the result.
//  CONFLICT  #冲突
//  failed  #失败
//  merge failed  #合并失败

[root@develop project]# vim test.txt   //修改文件,保存退出后即可解决
<<<<<<< HEAD
abc
=======
xyz
>>>>>>> hotfix
//  两个内容如果合并在一起要么两个数据都要或者不要的那个删除掉
// 将第一行 <<<<<<< HEAD 删除 和 第三行 ======= 删除 和 >>>>>>> hotfix 删除 然后保存退出

[root@develop project]# git add .   //提交到暂存区
[root@develop project]# git commit -m "test+"   //提交到本地仓库

使用ssh协议建立连接,实现免密通信
在develop下操作:

[root@develop project]# cd ..
[root@develop project]# rm -rf project/
[root@develop project]# ssh-keygen   //创建ssh秘钥
[root@develop project]# ssh-copy-id 192.168.4.20   //传递秘钥到4.20
[root@develop project]# git clone 192.168.4.20:/var/lib/git/project   //克隆不需要密码
[root@develop project]# cd project/    //进入仓库  
[root@develop project]# echo c > c.txt    //创建文件,然后提交
[root@develop project]# git add .
[root@develop project]# git commit -m c
[root@develop project]# git push    //最后push也不需要密码了

其他操作命令:
一个客户端可以与多个服务器端关联,上传下载数据可以在多个服务器端进行

[root@develop project]# git pull   //如果自身的仓库数据内容比远程服务器的数据旧,可以用pull命令下拉服务器最新数据到本地
// 将 git 服务器端的数据下拉(下载)到本地仓库
// pull  #下拉(下载)

[root@develop project]# git remote add tom 192.168.4.20:/var/lib/git/tom   //创建新服务器的关联,服务器本地名称为tom,仓库连接为192.168.4.20:/var/lib/git/tom

[root@develop project]# git remote -v   //查询目前与哪些服务器有关联,第一列是名称
[root@develop project]# echo e > e.txt   //创建数据并提交
[root@develop project]# git add .
[root@develop project]# git commit -m e
[root@develop project]# git push -u origin master   //为名称是origin的服务器的master分支上传数据
// -u  #指定哪台远程服务器

[root@develop project]# git remote remove tom    //删除名字是tom的服务器的关联

[root@develop project]# git pull tom master   //如果tom服务器的仓库可用,从tom服务器下拉(下载)最新数据 
// pull   #下拉(下载)

[root@develop project]# git remote remove origin   //还可以删除最初的origin服务器

相关文章

网友评论

      本文标题:版本控制 、 Git基础 、 Git进阶

      本文链接:https://www.haomeiwen.com/subject/lequyltx.html