云计算之git应用

对于代码管理工具来说,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.客户端测试

  1. 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

    此处各种版本资料还是比较多的,不多做阐述。

猜你喜欢

转载自blog.csdn.net/mx_steve/article/details/90515734