集中式版本控制工具:cvs、svn(subversion)
分布式版本控制工具:git
Git基本操作
部署Git服务器
默认git使用ssh服务提供的共享
YUM安装Git软件
yum -y install git
初始化一个空仓库
[root@git ~]# mkdir -p /var/lib/git
[root@git ~]# git init /var/lib/git/project --bare #创建空仓库
[root@git ~]# ls /var/lib/git/project #查看仓库中是否有内容
设置防火墙信任所有,设置SELinux放行所有
firewall-cmd --set-default-zone=trusted
setenforce 0
sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config
客户端测试
设置防火墙信任所有,设置SELinux放行所有
firewall-cmd --set-default-zone=trusted
setenforce 0
sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config
常用命令
git init /var/lib/git/project --bare #创建空仓库
git clone root@192.168.4.20:/var/lib/git/project
git remote -v #查看服务器信息
git status #查看本地仓库中数据的状态
git add . #将工作区的修改提交到暂存区
git commit -m "注释,这里可以为任意字符" #将暂存区修改提交到本地仓库
git remote add origin root@192.168.1.100:/var/lib/git/web #添加远程服务器,给远程服务器的web仓库取一个本地名称为origin
git config --global push.default simple #根据git版本不同,这个步骤可能需要或不需要
git push #将本地数据推送给git服务器
git push origin #将数据推送至origin服务器
git push -u origin master #指定提交到origin服务器,提交的是master分支
git pull #将服务器上的数据更新到本地
git pull -u origin master
git log #查看版本日志
git log --pretty=oneline
git log --oneline
git reflog
修改git配置
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
cat ~/.gitconfig
HEAD指针操作
HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。
还原到以前提交版本
$ git reflog
cfc9329 (HEAD -> master) HEAD@{0}: reset: moving to cfc9329
860e5c3 (origin/master, origin/HEAD) HEAD@{1}: commit: new
cfc9329 (HEAD -> master) HEAD@{2}: clone: from 192.168.1.100:/root/git/project
$ git reset --hard cfc9329 //还原至原来提交版本
HEAD is now at cfc9329 123
可以任意移动指针到任意版本,但是最后一定要回到最新版本
恢复数据步骤
误删 --》 回到上个版本 --》 手动复制误删的数据 --》回到最新版本 --》 添加误删的数据 --》上传
Git分支
常见的分支规范如下:
MASTER分支(MASTER是主分支,是代码的核心)。
DEVELOP分支(DEVELOP最新开发成果的分支)。
RELEASE分支(为发布新产品设置的分支)。
HOTFIX分支(为了修复软件BUG缺陷的分支)。
FEATURE分支(为开发新功能设置的分支)。
常用命令
git branch -v //查看分支
git branch hotfix //创建分支
git branch -d hotfix //删除分支
git checkout hotfix //切换分支
解决版本分支的冲突问题
[root@develop project]# git checkout hotfix
[root@develop project]# echo "AAA" > a.txt
[root@develop project]# git add .
[root@develop project]# git commit -m "add a.txt by hotfix"
[root@develop project]# git checkout master
[root@develop project]# echo "BBB" > a.txt
[root@develop project]# git add .
[root@develop project]# git commit -m "add a.txt by master"
[root@develop project]# git merge hotfix //把hotfix分支内容合并到master分支(先切换到master分支)
自动合并 a.txt
冲突(添加/添加):合并冲突于 a.txt(Merge conflict in a.txt)
自动合并失败(merge failed),修正冲突(fix conflicts)然后提交修正的结果。
遇到冲突必须手动修改
$ git checkout master
vim a.txt #修改该文件,为最终需要的数据,解决冲突
$ git add .
$ git commit -m "resolved"
在客户端现有的文件夹下克隆仓库
[root@develop ~]# mkdir mygit
[root@develop ~]# cd mygit
[root@develop mygit]# git init #将当前目录创建为git空仓库
[root@develop mygit]# git remote -v #此时该仓库没有对应的远程服务器
[root@develop mygit]# git remote add origin 192.168.4.20:/var/lib/git/web
#添加远程服务器,给远程服务器的web仓库取一个本地名称为origin
[root@develop mygit]# git remote -v #查看远程服务器信息
[root@develop mygit]# ls #本地还是空目录,没有任何资料
[root@develop mygit]# git pull origin master
#从origin服务器的master分支拉取数据
[root@develop mygit]# ls
[root@develop mygit]# echo new > new.txt
[root@develop mygit]# git add .
[root@develop mygit]# git commit -m "newfile"
[root@develop mygit]# git push -u origin master