一,版本控制系统
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服务器
网友评论