linux 版本控制服务-git
一、git版本控制
1、git daemon服务器用来保存经过在测试服务器上测试后上传完全没有问题的代码,脚本,配置文件的各种版本。
2、测试服务器用来调试代码,脚本,配置文件等。
3、从git daemon服务器上拉取测试完成后完全没有问题的代码,脚本,配置文件。
4、每台服务器都得装git,用来控制版本,防止出错是无法回退。
二、git daemon服务的安装
1、直接通过yum进行安装。
yum install -y git git-daemon
2、创建目录,作为git服务器存储的路径。
mkdir /data/repo
chmod -R 777 /data/repo
3、初始化并启动git daemon。
git daemon --detach --verbose --export-all --base-path=/data/repo/ --reuseaddr --enable=receive-pack
参数说明:
--detach:以daemon方式后台运行。
--verbose:任何操作都会给当前repo通知。
--export-all:分享所有的仓库。
--reuseaddr:允许快速重启服务。
--base-path:定义仓库路径。
--enable=receive-pack:允许client端向server端push代码。
4、启动后,服务默认监听在9418端口。
5、进入git daemon仓库的根目录,创建repo仓库:
cd /data/repo/ && mkdir script.git && chmod -R 777 script.git
6、进入script.git仓库并初始化:
git init --bare
7、 git config daemon.receivepack 如果没有键入这个命令,可能远程的仓库会没有写权限。
至此,git daemon服务以搭建完成。
客户端从git daemon克隆的命令:git clone git://IP/script.git
客户端推送给git daemon的命令:git push origin master
三、git操作命令的学习
1、把文件加入忽略名单操作步骤:
在项目的目录下添加.gitignore文件,配置忽略规则
dir/:目录下的文件都忽略
*.jpg:以jpg结尾的文件都忽略
a.txt:忽略a.txt文件
2、相关命令:
git init :初始化,创建.git目录等;
git ls-files:列出已经加入暂存区的文件;
-s:显示暂存的文件信息,权限,对象名,暂存号,及索引中的映射;
-t:1c860ac110ca3097f93dde390ad9396ce958f619:查看指定文件的类型
-o:显示未读的文件;
git cat-file:查看对象库中文件的内容;
-t:显示对象类型;
-s:显示对象大小;
-p:输出对象的内容
git status:列出git的详细信息
git hash-object:查看文件对应的hash码,后面直接跟文件名;
git write-tree:根据当前索引中的内容创建树对象;
add/rm/mv命令:
git add:暂存文件;后面跟文件把文件加入索引区;
git rm:删除工作目录中的文件,及索引中的映射;
git rm --cached:只删除索引中的映射;
git mv:改变工作目录的文件名,及索引中的映射;
git log:查看提交日志;
git commit:提交
git commit -m "v0.1"
git diff:比较提交,索引及其工作目录的差别;
--color:着色
git diff:比较工作目录和索引的差异;
git diff --cached:比较索引和提交的差异;
git commit1 commit2:比较两个提交的差异;
git diff HEAD:比较工作目录和提交的差异;
注意:未追踪的文件没有算进差异的对象
查看提交的对象的内容:
git log
获取提交对象名
git cat-file -p 对象名
获取树对象名
git cat-file -p 树对象名
git reset:撤销此前的操作;
--soft:将HEAD引用指向给定的提交,但不影响索引和工作目录;
--mixed:将HEAD引用指向给定的提交,并将索引内容改变为指定提交的快照,但不改变工作目录;
--hard:将HEAD引用指向给定的提交,将索引内容改变为指定提交的快照,并改变工作目录中的内容反映指定提交的内容;
例如:
git reset --soft HEAD^1:将HEAD返回父提交,索引和工作目录不改变,此时git log命令查看最近一次提交会恢复到父提交
git reset --mixed HEAD^1:将HEAD返回父提交,且索引指向父提交,工作目录不变;
git reset --hard HEAD^1:将HEAD返回父提交,且工作目录和索引都指向父提交;
git reset --soft HEAD^2:将HEAD返回父提交的父提交,索引和工作目录不改变,此时git log命令查看最近一次提交会恢复到父提交
git reset HEAD six.sh:把暂停区的文件six.sh撤回
分支:
git branch BRNAME:创建分支
git branch --list:列出分支,*为当前分支
git show-branch:列出分支之间的关系,--more[=number]:详细列出
git checkout BRNAME:切换分支
git branch -d BRNAME:删除分支
合并分支:
无冲突合并:即两个分支之间要合并的内容,如果有相同的文件,则这两个文件的内容应该是一致的,不然如果不一致,git不知道以哪个内容为准;
git checkout master:切换到master分支,一般使用master分支
git status:查看是否有未追踪的文件,如果有,提交,否则可能合并时会丢失
git merge BRNAME:和BRNAME分支合并
git log --graph --pretty=oneline --abbrev-commit:查看合并分支信息
有冲突合并:两个分支中的文件中,有相同的文件名,且内容不一致,此时,没有解决冲突之前,无法切换分支
手动解决冲突;
解决完成后:
git add
git commit
合并后发现冲突,可以使用git reset --hard HEAD返回合并之前,切换分支修改
合并后,想回到合并之前,可以使用:git reset --hard ORIG_HEAD;
变基操作:把分支上距最近合并基础之间的提交抽取出来转接到另外的提交上;
git rebase
步骤:
git checkout dev:变基的分支;
git rebase master:把变基的部分转接到master上;
git checkout master
git merge -m "MSG":合并分支