对于代码管理工具来说,git无疑拥有举足轻重的作用,接下来,我将会讲解一下git的服务端和客户端的应用。下图如工作原理图:
一、Git基本操作
1.部署Git服务器
1.安装git软件
[root@gitserver ~]# yum -y install git
[root@gitserver ~]# git --version
2.初始化空仓库
[root@gitserver ~]# mkdir /var/git
[root@gitserver ~]# git init --bare /var/git/project
[root@gitserver ~]# ls /var/git/project/
branches description hooks objects config HEAD info refs
2.客户端测试
-
clone克隆服务器仓库到本地。
[root@gitclient ~]# yum -y install git [root@gitclient ~]# git clone root@gitserver:/var/git/project root@gitserver's password: warning: 您似乎克隆了一个空版本库
2.修改git配置。
[root@gitclient ~]# cd project/
[root@gitclient project]# git config --global user.email "[email protected]"
[root@gitclient project]# git config --global user.name "MX-steve"
[root@gitclient project]# cat /root/.gitconfig
[user]
email = [email protected]
name = MX-steve
3.本地工作区对数据进行增删改查(必须要先进入仓库再操作数据)。
[root@gitclient project]# echo "init data" > init.txt
[root@gitclient project]# mkdir demo
[root@gitclient project]# cp /etc/hosts demo
4.查看仓库中数据的状态。
[root@gitclient project]# git status
5.将工作区的修改提交到暂存区。
[root@gitclient project]# git add .
6.将暂存区修改提交到本地仓库。
[root@gitclient project]# git commit -m "first commit"
7.将本地仓库中的数据推送到远程服务器
[root@gitclient project]# git config --global push.default simple
[root@gitclient project]# git push
[root@gitclient project]# git status
备注:可能其他人也在修改数据并提交服务器,就会导致自己的本地数据为旧数据,使用pull就可以将服务器上新的数据更新到本地。
[root@gitclient project]# git pull
8.查看版本日志。
[root@gitclient project]# git log
commit b4581b4b11464ae6ccebb2040f638787cd65a2c7
Author: MX-steve <[email protected]>
Date: Fri May 24 11:19:04 2019 +0800
first commit
[root@gitclient project]# git log --pretty=oneline
b4581b4b11464ae6ccebb2040f638787cd65a2c7 first commit
[root@gitclient project]# git log --oneline
b4581b4 first commit
[root@gitclient project]# git reflog
b4581b4 HEAD@{0}: commit (initial): first commit
二、HEAD指针操作
HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。
1、HEAD指针基本操作
1.准备工作(多对数据仓库进行修改、提交操作,以产生多个版本)。
[root@gitclient project]# echo "new file" >new.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "add new.txt"
[root@gitclient project]# echo "first" >>new.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "new.txt:first"
[root@gitclient project]# echo "second" >>new.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "new.txt:second"
[root@gitclient project]# echo "third" >>new.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "new.txt:third"
[root@gitclient project]# echo "123" > num.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "num.txt:123"
[root@gitclient project]# echo "456" > num.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "num.txt:456"
[root@gitclient project]# echo "789" > num.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "num.txt:789"
2.查看Git版本信息。
[root@gitclient project]# git reflog
dc1662d HEAD@{0}: commit: num.txt:789
ce08e69 HEAD@{1}: commit: num.txt:456
eca4aa1 HEAD@{2}: commit: num.txt:123
8ed9b01 HEAD@{3}: commit: new.txt:third
0a3845c HEAD@{4}: commit: new.txt:second
303976e HEAD@{5}: commit: new.txt:first
8314f88 HEAD@{6}: commit: add new.txt
b4581b4 HEAD@{7}: commit (initial): first commit
3.移动HEAD指针,将数据还原到任意版本。
提示:当前HEAD指针为HEAD@{0}。
[root@gitclient project]# git reset --hard ce08e69
HEAD 现在位于 ce08e69 num.txt:456
[root@gitclient project]# git reflog
ce08e69 HEAD@{0}: reset: moving to ce08e69
dc1662d HEAD@{1}: commit: num.txt:789
ce08e69 HEAD@{2}: commit: num.txt:456
eca4aa1 HEAD@{3}: commit: num.txt:123
... ...
[root@gitclient project]# cat num.txt
456
[root@gitclient project]# git reset --hard eca4aa1
HEAD 现在位于 eca4aa1 num.txt:123
[root@gitclient project]# git reflog
eca4aa1 HEAD@{0}: reset: moving to eca4aa1
ce08e69 HEAD@{1}: reset: moving to ce08e69
dc1662d HEAD@{2}: commit: num.txt:789
ce08e69 HEAD@{3}: commit: num.txt:456
eca4aa1 HEAD@{4}: commit: num.txt:123
8ed9b01 HEAD@{5}: commit: new.txt:third
... ...
[root@gitclient project]# cat num.txt
123
[root@gitclient project]# git reset --har dc1662d # 恢复到最新
HEAD 现在位于 dc1662d num.txt:789
[root@gitclient project]# cat num.txt
789
4.模拟误删后的数据还原操作。
[root@gitclient project]# git rm init.txt
[root@gitclient project]# git commit -m "delete init.txt"
[root@gitclient project]# git reflog
[root@gitclient project]# git reset --hard dc1662d
[root@gitclient project]# ls
demo init.txt new.txt num.txt
三.Git分支操作
Git支持按功能模块、时间、版本等标准创建分支,分支可以让开发分多条主线同时进行,每条主线互不影响
常见的分支规范如下: MASTER分支(MASTER是主分支,是代码的核心)。 DEVELOP分支(DEVELOP最新开发成果的分支)。 RELEASE分支(为发布新产品设置的分支)。 HOTFIX分支(为了修复软件BUG缺陷的分支)。 FEATURE分支(为开发新功能设置的分支)。
1.查看并创建分支
[root@gitclient project]# git branch -v
* master dc1662d num.txt:789
[root@gitclient project]# git branch hotfix
[root@gitclient project]# git branch feature
[root@gitclient project]# git branch -v
feature dc1662d num.txt:789
hotfix dc1662d num.txt:789
* master dc1662d num.txt:789
2.切换与合并分支
1. 切换分支。
[root@gitclient project]# git checkout hotfix
2. 在新的分支上可以继续进行数据操作(增、删、改、查)。
[root@gitclient project]# echo "fix a bug" >> new.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "fix a bug"
3.将hotfix修改的数据合并到master分支。
注意,合并前必须要先切换到master分支,然后再执行merge命令。
[root@gitclient project]# git checkout master
[root@gitclient project]# git merge hotfix
[root@gitclient project]# cat new.txt
new file
first
second
third
fix a bug
4.将所有本地修改提交远程服务器。
[root@gitclient project]# git push
3.解决版本分支的冲突问题
1.在不同分支中修改相同文件的相同行数据,模拟数据冲突。
[root@gitclient project]# git checkout feature
[root@gitclient project]# echo "AAA_feature" > a.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "add a.txt by feature"
[root@gitclient project]# git checkout hotfix
[root@gitclient project]# echo "AAA_hotfix" > a.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "add a.txt by hotfix"
[root@gitclient project]# git checkout master
[root@gitclient project]# echo "AAA_master" > a.txt
[root@gitclient project]# git add .
[root@gitclient project]# git commit -m "add a.txt by master"
2.查看有冲突的文件内容,修改文件为最终版本的数据,解决冲突
[root@gitclient project]# git merge feature
[root@gitclient project]# vim a.txt
修改冲突后的内容
[root@gitclient project]# git commit -m "fix merge about feature"
[root@gitclient project]# git merge hotfix
[root@gitclient project]# vim a.txt
修改冲突后的内容
[root@gitclient project]# git commit -m "fix merge about hotfix"
[root@gitclient project]# git push
四、Git服务器
Git支持很多服务器协议形式,不同协议的Git服务器,客户端就可以使用不同的形式访问服务器。创建的服务器协议有SSH协议、Git协议、HTTP协议。
1.SSH协议服务器(支持读写操作)
1. 创建基于密码验证的SSH协议服务器
[root@gitserver ~]# git init --bare /var/git/base_ssh
2.客户端访问的方式
[root@gitclient ~]# git clone root@gitserver:/var/git/base_ssh
[root@gitclient ~]# rm -rf base_ssh/
3.客户端生成SSH密钥,实现免密码登陆git服务器
[root@gitclient ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@gitclient ~]# ssh-copy-id gitserver
[root@gitclient ~]# git clone root@gitserver:/var/git/base_ssh
2.Git协议服务器(只读操作的服务器)
1.安装git-daemon软件包
[root@gitserver ~]# yum -y install git-daemon
2.创建版本库
[root@gitserver ~]# git init --bare /var/git/base_git
3.修改配置文件,启动git服务
[root@gitserver ~]# vim /usr/lib/systemd/system/[email protected]
ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/git --export-all --user-path=public_git --syslog --inetd --verbose
修改path部分路径
[root@gitserver ~]# systemctl restart git.socket
4.客户端访问方式
[root@gitclient ~]# git clone git://gitserver/base_git
[root@gitclient base_git]# echo aaa > a.txt
[root@gitclient base_git]# git add .
[root@gitclient base_git]# git commit -m "a.txt"
[master(根提交) bd2f3d5] a.txt
[root@gitclient base_git]# git push
fatal: remote error: access denied or repository not exported: /base_git
此种方法为只读,不能往远程仓库上传东西
3.HTTP协议服务器(只读操作的服务器)
1.安装gitweb、httpd软件包
[root@gitserver ~]# yum -y install httpd gitweb
2.修改配置文件,设置仓库根目录
[root@gitserver ~]# vim +11 /etc/gitweb.conf
$projectroot = "/var/git";
3.创建版本仓库
[root@gitserver ~]# git init --bare /var/git/base_http
4.启动httpd服务器
[root@gitserver ~]# systemctl restart httpd
5.客户端访问方式
[root@gitclient ~]# firefox http://gitserver/git
4.注册使用Github
此处各种版本资料还是比较多的,不多做阐述。