zoukankan      html  css  js  c++  java
  • GIT分布式代码管理系统

    1:GTI介绍及使用

     

     

     

     

     

     

     

     

    环境搭建:

    服务器 IP地址 主机名 角色
    Centos7.5 192.168.200.113 gitserver GIT服务器
    Centos7.5 192.168.200.114 gitclient GIT客户端

    安装GIT:

    初始化环境:关闭防火墙

    两台都本次执行操作

    [root@ansible ~]# hostname gitserver
    [root@ansible ~]# bash
    [root@gitserver ~]# systemctl stop firewalld
    [root@gitserver~]# iptables -F
    [root@gitserver ~]# setenforce 0

    源码包安装GIT

    安装依赖包

    [root@gitserver ~]#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel autoconf gcc gcc-c++ make -y

    [root@gitserver ~]# rz

    [root@gitserver ~]# ls
    git-2.22.0.tar.gz

    [root@gitserver ~]# tar xf git-2.22.0.tar.gz -C /usr/src
    [root@gitserver ~]# cd /usr/src/git-2.22.0/

    [root@gitserver git-2.22.0]# make configure
    GEN configure

    [root@gitserver git-2.22.0]# ./configure --prefix=/usr/local/git && make && make install

    [root@gitserver git-2.22.0]# ln -s /usr/local/git/bin/git /usr/bin
    ln: 无法创建符号链接"/usr/bin/git": 文件已存在
    [root@gitserver git-2.22.0]# ln -sf /usr/local/git/bin/git /usr/bin

    [root@gitserver git-2.22.0]# git --version                   #查看git版本
    git version 2.22.0

    初次运行GIT前的配置

     gitclient客户端操作:

    [root@gitclien ~]# git config --global user.name "crushlinux"
    [root@gitclien ~]# git config --global user.email "crushlinux@163.com"
    [root@gitclien~]# git config --global color.ui true
    [root@gitclien ~]# git config --list
    user.name=crushlinux
    user.email=crushlinux@163.com
    color.ui=true

    gitserver服务端操作:初始化及获取GIT仓库

    [root@gitserver ~]# mkdir git_data.git
    [root@gitserver ~]# useradd git                            #创建用户拉取信息

    [root@gitserver ~]# passwd git
    更改用户 git 的密码 。
    新的 密码:
    无效的密码: 密码少于 8 个字符
    重新输入新的 密码:
    passwd:所有的身份验证令牌已经成功更新。

    [root@gitserver git_data.git]# git --bare init
    已初始化空的 Git 仓库于 /root/git_data.git/                      #远程仓库

     gitclient客户端操作:

    [root@gitclient ~]# ssh-keygen

    [root@gitclient ~]# ssh-copy-id 192.168.200.113

    [root@gitclient ~]# git clone root@192.168.200.113:/root/git_data.git
    正克隆到 'git_data'...
    warning: 您似乎克隆了一个空仓库。
    您在 /var/spool/mail/root 中有新邮件
    [root@gitclient ~]# ls
    git_data                               #本地目录
    git-2.22.0.tar.gz 

    [root@gitclient ~]# cd git_data/
    [root@gitclient git_data]# ls -a
    .   ..   .git

    创建文件并且提交

    [root@gitclient git_data]# touch README
    [root@gitclient git_data]# git status
    位于分支 master

    尚无提交

    未跟踪的文件:
    (使用 "git add <文件>..." 以包含要提交的内容)

    README

    提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

    添加文件跟踪

    [root@gitclient git_data]# git add README                   #将README上传到暂停区
    [root@gitclient git_data]# git status
    位于分支 master

    尚无提交

    要提交的变更:
    (使用 "git rm --cached <文件>..." 以取消暂存)

    新文件: README

    [root@gitclient git_data]# git config --global user.email "L18370248736@163.com"
    [root@gitclient git_data]# git config --global user.name "git"

    由工作区到本地仓库(git commit -m '注释信息' 文件名)
    [root@gitclient git_data]# git commit -m "first commit" README                    #将README由暂停区上传到本地仓库
    [master(根提交) 2630913] first commit
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 README

    查看GIT目前位置状态(git status)

    [root@gitclient git_data]# git status
    位于分支 master
    您的分支基于 'origin/master',但此上游分支已经不存在。
    (使用 "git branch --unset-upstream" 来修复)

    无文件要提交,干净的工作区

    [root@gitclient git_data]# git branch --unset-upstream
    [root@gitclient git_data]# git status
    位于分支 master
    无文件要提交,干净的工作区

    [root@gitclient git_data]# git push -u origin master                              #将README上传到远程仓库
    枚举对象: 3, 完成.
    对象计数中: 100% (3/3), 完成.
    写入对象中: 100% (3/3), 203 bytes | 203.00 KiB/s, 完成.
    总共 3 (差异 0),复用 0 (差异 0)
    To 192.168.200.113:/root/git_data.git
    * [new branch] master -> master
    分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。

     完整的上传操作:

    [root@gitclient git_data]# touch git1.text                     #新建一个文件
    [root@gitclient git_data]# git add git1.text                    #将文件上传到暂停区

    [root@gitclient git_data]# git reset HEAD git1.text             #将暂停区的git1.text文件从暂停区中删除

    [root@gitclient git_data]# git commit -m "git 1 text" git1.text                   #将暂停区的文件上传到本地仓库,git 1 text表示第一次上传的文件也就是注释,每次改动要改变数值:例如git 2 text

    [master 8d4f958] git 1 text
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 git1.text

    [root@gitclient git_data]# git push root@192.168.200.113:/root/git_data.git          #将本地仓库的文件推送到远程仓库
    枚举对象: 3, 完成.
    对象计数中: 100% (3/3), 完成.
    压缩对象中: 100% (2/2), 完成.
    写入对象中: 100% (2/2), 236 bytes | 236.00 KiB/s, 完成.
    总共 2 (差异 0),复用 0 (差异 0)
    To 192.168.200.113:/root/git_data.git
    2630913..8d4f958 master -> master

    ===========================================================================

    将文件从客户端移除,哪怕是已经上传到了暂停区但是保留本地文件

    [root@gitclient git_data]# touch 1.text
    [root@gitclient git_data]# ls
    1.text       git1.text     README
    [root@gitclient git_data]# git add 1.text
    [root@gitclient git_data]# git status
    位于分支 master
    您的分支领先 'origin/master' 共 1 个提交。
    (使用 "git push" 来发布您的本地提交)

    要提交的变更:
    (使用 "git reset HEAD <文件>..." 以取消暂存)

    新文件: 1.text

    [root@gitclient git_data]# git rm -f 1.text
    rm '1.text'
    [root@gitclient git_data]# ls
    git1.text        README

    添加到了暂停区并且想删除暂停区数据并删除本地文件
    [root@gitclient git_data]#git rm -f 1.text

    重命名文件名

    [root@gitclient git_data]# git mv README shmily
    [root@gitclient git_data]# git status
    位于分支 master
    您的分支领先 'origin/master' 共 1 个提交。
    (使用 "git push" 来发布您的本地提交)

    要提交的变更:
    (使用 "git reset HEAD <文件>..." 以取消暂存)

    重命名: README -> shmily

    [root@gitclient git_data]# ls
    git1.text shmily

     提交的历史记录

    [root@gitclient git_data]# git log             #查看历史记录
    commit 8d4f9580d6529437a4c10095f21f20b6c572a3c5 (HEAD -> master)
    Author: git <L18370248736@163.com>
    Date: Mon Nov 18 20:36:04 2019 +0800

    git 1 text

    commit 26309136cb57f10c0eda53fa9bad5c699319b5f6 (origin/master)
    Author: git <L18370248736@163.com>
    Date: Mon Nov 18 16:38:12 2019 +0800

    first commit

    删除本地以及暂停区的文件并且还原数据状态

    [root@gitclient git_data]# touch 1.txt
    [root@gitclient git_data]# git add 1.txt                            #提交到暂停区
    [root@gitclient git_data]# git status
    位于分支 master

    尚无提交

    要提交的变更:
    (使用 "git rm --cached <文件>..." 以取消暂存)

    新文件: 1.txt

    [root@gitclient git_data]# git commit -m "第一次提交1.txt 1.txt"               #提交到本地仓库
    [master(根提交) 8675530] 第一次提交1.txt
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 1.txt
    [root@gitclient git_data]# git status
    位于分支 master
    您的分支基于 'origin/master',但此上游分支已经不存在。
    (使用 "git branch --unset-upstream" 来修复)

    无文件要提交,干净的工作区
    [root@gitclient git_data]# git branch --unset-upstream                     
    [root@gitclient git_data]# git status
    位于分支 master
    无文件要提交,干净的工作区
    [root@gitclient git_data]# git push -u origin master                               #提交到远程仓库
    枚举对象: 3, 完成.
    对象计数中: 100% (3/3), 完成.
    写入对象中: 100% (3/3), 206 bytes | 206.00 KiB/s, 完成.
    总共 3 (差异 0),复用 0 (差异 0)
    To 192.168.200.113:/root/git_data.git
    * [new branch] master -> master
    分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'。
    [root@gitclient git_data]# echo "1111" > 1.txt 
    [root@gitclient git_data]# git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。

    尚未暂存以备提交的变更:
    (使用 "git add <文件>..." 更新要提交的内容)
    (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改: 1.txt

    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
    [root@gitclient git_data]# git add 1.txt 
    [root@gitclient git_data]# git status
    位于分支 master
    您的分支与上游分支 'origin/master' 一致。

    要提交的变更:
    (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改: 1.txt

    [root@gitclient git_data]# git commit -m "1.txt第一次修改内容"
    [master 86e165a] 1.txt第一次修改内容
    1 file changed, 1 insertion(+)
    [root@gitclient git_data]# git status
    位于分支 master
    您的分支领先 'origin/master' 共 1 个提交。
    (使用 "git push" 来发布您的本地提交)

    无文件要提交,干净的工作区
    [root@gitclient git_data]# echo "2222" >> 1.txt

    [root@gitclient git_data]# git add 1.txt 
    [root@gitclient git_data]# git status
    位于分支 master
    您的分支领先 'origin/master' 共 1 个提交。
    (使用 "git push" 来发布您的本地提交)

    要提交的变更:
    (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改: 1.txt

    [root@gitclient git_data]# git commit -m "1.txt第二次修改内容"
    [master a87f358] 1.txt第二次修改内容
    1 file changed, 1 insertion(+)
    [root@gitclient git_data]# git status
    位于分支 master
    您的分支领先 'origin/master' 共 2 个提交。
    (使用 "git push" 来发布您的本地提交)

    无文件要提交,干净的工作区
    [root@gitclient git_data]# git rm -f 1.txt                     #删除暂停区的提交信息,但不会删除本地提交信息
    rm '1.txt'
    [root@gitclient git_data]# ls
    [root@gitclient git_data]# git log                                   #查看提交的历史记录
    commit a87f35896fcefaa15308d5a69473b41ee3fbc462 (HEAD -> master)
    Author: crushlinux <crushlinux@163.com>
    Date: Mon Nov 25 16:04:30 2019 +0800

    1.txt第二次修改内容

    commit 86e165af962964ba1faac2ee32bf76c160ba7706
    Author: crushlinux <crushlinux@163.com>
    Date: Mon Nov 25 16:03:23 2019 +0800

    1.txt第一次修改内容

    commit 8675530375dfbae53fa8f159f2206236b3365c9a (origin/master)
    Author: crushlinux <crushlinux@163.com>
    Date: Mon Nov 25 16:00:20 2019 +0800

    注释
    [root@gitclient git_data]# git reset --hard 86e165af962964ba1faac2ee32bf76c160ba7706
    HEAD 现在位于 86e165a 1.txt第一次修改内容
    [root@gitclient git_data]# ls
    1.txt
    [root@gitclient git_data]# cat 1.txt 
    1111

    [root@gitclient git_data]# git reset --hard a87f35896fcefaa15308d5a69473b41ee3fbc462
    HEAD 现在位于 a87f358 1.txt第二次修改内容
    [root@gitclient git_data]# cat 1.txt 
    1111
    2222

    还原以前的数据(也就是回滚)相当于回快照

    [root@gitclient git_data]# ls
    git1.text     git2.txt     README                                  #此时目录中有三个文件
    [root@gitclient git_data]# cat git1.text                        #此时git1.txt中有数据
    1111

    [root@gitclient git_data]# git reflog
    0127d70 (HEAD -> master) HEAD@{0}: commit: git2 1
    3bcb150 HEAD@{1}: reset: moving to 3bcb15039fdaa
    3bcb150 HEAD@{2}: reset: moving to 3bcb150
    3bcb150 HEAD@{3}: commit: git 111
    8d4f958 HEAD@{4}: commit: git 1 text
    2630913 (origin/master) HEAD@{5}: commit (initial): first commit
    [root@gitclient git_data]# git reset --hard 8d4f958       #还原到未来数据位置
    HEAD 现在位于 8d4f958 git 1 text
    [root@gitclient git_data]# ls                                          #此时目录中只有两个文件 
    git1.text      README 

    [root@gitclient git_data]# cat git1.text                          #此时gi1.txt中没有任何数据

    [root@gitclient git_data]# git log
    commit 8d4f9580d6529437a4c10095f21f20b6c572a3c5 (HEAD -> master)
    Author: git <L18370248736@163.com>
    Date: Mon Nov 18 20:36:04 2019 +0800

    git 1 text

    commit 26309136cb57f10c0eda53fa9bad5c699319b5f6 (origin/master)
    Author: git <L18370248736@163.com>
    Date: Mon Nov 18 16:38:12 2019 +0800

    first commit
    [root@gitclient git_data]# git reset --hard 8d4f9580
    HEAD 现在位于 8d4f958 git 1 text

    [root@gitclient git_data]# git tag
    [root@gitclient git_data]# git tag 20191119                          #以后直接用20191119这个标签回到当时的数据
    [root@gitclient git_data]# git show 20191119                     #查看当前标签下的文件内容 
    commit 8d4f9580d6529437a4c10095f21f20b6c572a3c5 (HEAD -> master, tag: 20191119)
    Author: git <L18370248736@163.com>
    Date: Mon Nov 18 20:36:04 2019 +0800

    git 1 text

    diff --git a/git1.text b/git1.text
    new file mode 100644
    index 0000000..e69de29

    [root@gitclient git_data]# ls
    git1.text git2.txt README

    [root@gitclient git_data]# git add git2.txt                      #先提交到暂停区

    [root@gitclient git_data]# cat git2.txt
    111222
    [root@gitclient git_data]# echo "333333333" > git2.txt
    [root@gitclient git_data]# git diff git2.txt
    diff --git a/git2.txt b/git2.txt
    index 9e56fd5..fb846f7 100644
    --- a/git2.txt
    +++ b/git2.txt
    @@ -1 +1 @@
    -111222
    +333333333

    [root@gitclient git_data]# git commit -a -m "git2.txt 2"            #推送到本地仓库
    [master 6a132c8] git2.txt 2
    1 file changed, 1 insertion(+)
    create mode 100644 git2.txt

     

    [root@gitclient git_data]# git branch web                         #创建一个web分支
    [root@gitclient git_data]# git branch                                #查看目前位于哪儿个分支上,因为我们写代码都不在master主分支上
    * master
    web
    [root@gitclient git_data]# git checkout web                    #检出到web分支上
    切换到分支 'web'
    [root@gitclient git_data]# git branch                               #切换到web分支
    master
    * web

    在web分支上操作

    [root@gitclient git_data]# touch 2.txt                           
    [root@gitclient git_data]# echo "22222" > 2.txt
    [root@gitclient git_data]# git add 2.txt
    [root@gitclient git_data]# git status
    位于分支 web
    要提交的变更:
    (使用 "git reset HEAD <文件>..." 以取消暂存)

    新文件: 2.txt

    [root@gitclient git_data]# git commit -m "2.txt第一次提交"
    [web 792d07e] 2.txt第一次提交
    1 file changed, 1 insertion(+)
    create mode 100644 2.txt

    [root@gitclient git_data]# git checkout master                              #提交到本地后切换主分支后,依旧可以提交
    切换到分支 'master'
    您的分支领先 'origin/master' 共 2 个提交。
    (使用 "git push" 来发布您的本地提交)

    [root@gitclient git_data]# git checkout web                                    #切到web分支进行操作
    切换到分支 'web'
    [root@gitclient git_data]# cat 2.txt
    22222
    [root@gitclient git_data]# echo "3333" >> 2.txt                             #此时2.txt第二行内容为3333
    [root@gitclient git_data]# git commit -m "web分支修改2.txt"
    [web 66f7f91] web分支修改2.txt
    1 file changed, 1 insertion(+)
    [root@gitclient git_data]# git checkout master                       #切回到master分支
    切换到分支 'master'
    您的分支领先 'origin/master' 共 4 个提交。
    (使用 "git push" 来发布您的本地提交)

    [root@gitclient git_data]# echo "22223" >> 2.txt                    #也输入信息,此时2.txt为22223

    合并代码(git merge 负分支名)(说白了就是不同分支间的代码合并在一起)

     上面有master分支数据1.txt,也有web分支数据2.txt

    [root@gitclient git_data]# git merge web
    自动合并 2.txt
    冲突(内容):合并冲突于 2.txt
    自动合并失败,修正冲突然后提交修正的结果。
    [root@gitclient git_data]# cat 2.txt 
    22222
    <<<<<<< HEAD
    22223
    =======
    3333
    >>>>>>> web                   

    合并失败的原因在于2.txt上的内容分别有web分支写的3333也有master分支写的22223,两者产生了冲突导致合并失败

    解决合并失败方案:

    手动解决:

    [root@gitclient git_data]# vim 2.txt

    22222
    <<<<<<< HEAD
    22223
    =======
    3333
    >>>>>>> web

    修改成

    22222
    22223
    3333

    [root@gitclient git_data]# git commit -a -m "合并后2.txt"                     #再次提交到本地仓库
    [master 38637e1] 合并后2.txt
    [root@gitclient git_data]# git merge web                                              #提交成功
    已经是最新的。

    [root@gitclient git_data]# git branch --no-merge                        #查看没有合并的分支

    [root@gitclient git_data]# git branch -d web                               #删除分支
    已删除分支 web(曾为 66f7f91)。

    [root@gitclient git_data]# git branch
    * master

  • 相关阅读:
    Word中封面的问题
    UML问题
    《十八岁的天空》有感
    SPSS相关和回归分析
    WinForm自定义验证控件
    .NET常用的扩展方法整理
    C# 对JS编码/解码进行转换
    Jquery AJAX 调用WebService服务
    多条件动态LINQ 组合查询
    Visual studio 2008 的语法高亮插件 WordLight
  • 原文地址:https://www.cnblogs.com/CMX_Shmily/p/11883305.html
Copyright © 2011-2022 走看看