• Git 部署及基本使用


    Git 简介

      官网:https://git-scm.com

      Git 是一个分布式版本控制软件,最初由林纳斯●托瓦兹(Linus Torvalds)创作,于 2005 年以 GPL 发布。最初目的是为更好地管理 Linux 内核开发而设计。

      GIt 官方中文手册 https://git-scm.com/book/zh/v2

      Git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。一个原始 Git 版本仓库,可以让其他主机克隆这个原始版本仓库,从而使得一个 Git 版本仓库可以同时分布到不同的主机上,并且每台主机的版本库都是一样的,并没有主次之分,极大的保证了数据的安全性,并使得用户能够自主选择 Git 服务器推送文件了,其实部署一个 Git 服务器是一件非常简单的事情。

      如上所述,作为一个分布式的版本控制系统,在 Git 中并不存在主库这样的概念。每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。

      GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。GitHub 可以提供给用户空间创建 Git 仓储,保存用户的一些数据文档或者代码等。

      GitHub 作为开源代码库以及版本控制系统,目前拥有 140 多万开发者用户。随着越来越多的应用程序转移到了云上,GitHub 已经成为了管理软件开发以及发现已有代码的首选方法。

      GitHub 可以托管各种 Git 库,并提供一个 Web 界面,但与其他向 SourceForge 或 Google Code 这样的服务不同,GitHub 的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单,首先点击项目站点的 "fork" 的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的"pull request" 机制向项目负责人申请代码合并。

      GitLab 是一个基于 Git 的项目管理软件,用于仓库管理系统的开源项目。使用 Git 作为代码管理工具, 并在此基础上搭建起来 Web 服务。

      Git,GitHub,GitLab 都是基于 Git的,可以说是 Git 的衍生品。

      Git 功能特性

        ● 克隆数据库版本:从服务器上克隆数据库(包括代码和版本信息)到本机上;

        ● 提交代码:在本机上自己创建的分支上提交代码;

        ● 合并分支:在本机上合并分支;

        ● 拉取合并分支:新建一个分支,把服务器上最新版的代码 Fetch 下来,然后跟自己的最分支合并;

        ● 代码冲突解决:一般开发者之间解决冲突的方法,开发者之间可以使用 pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

    案例环境

    服务器 IP地址 主机名 角色
    CentOS7.5 192.168.200.123 gitlab Git 服务器
    CentOS7.5 192.168.200.124 git Git 服务器

    安装 Git 

    初始环境

    systemctl stop firewalld

    iptables -F

    setenforce 0

    编译安装 Git

    编译安装可以安装较新版本的 Git

    Git 下载地址:https://github.com/git/git/releases

    安装依赖关系

    yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel autoconf

    编译安装

    wget https://github.com/git/git/archive/v2.22.0.tar.gz

    tar xf git-2.22.0.tar.gz -C /usr/src/

    cd /usr/src/git-2.22.0/

    make configure

    ./configure --prefix=/usr/local/git && make && make install

    ln -sf /usr/local/git/bin/git /usr/bin/

    git --version

    初次运行 Git 前的配置

    命令集

      git config --global user.name "crushlinux"                          #配置 Git 使用用户

      git config --global user.email "crushlinux@163.com"        #配置 Git 使用邮箱

      git config --global color.ui true                                              #语法高亮

      git config --list                                                                         #查看全局配置

    配置过程

      git config --global user.name "2567"                          

      git config --global user.email "wxl25678@163.com"        

      git config --global color.ui true                                              

      git config --list    

    生成的配置文件

    cat .gitconfig

    获取帮助

    使用 Git 时需要获取帮助,有三种方法可以找到 Git 命令的使用手册:

    ● git help config

    ● git config --help

    ● man git config

    初始化及获取 Git 仓库

    Git 服务器操作

    mkdir git_data.git

    cd git_data.git/

    git --bare init

    Git 客户端操作

    ssh-keygen

    ssh-copy-id 192.168.200.123

    git clone root@192.168.200.123:/root/git_data.git      #克隆

    git status                                                                         #查看

    Git 命令常规操作

    常用命令说明

    add                       #添加文件内容至暂存区(索引)

    bisect                   #通过二分查找定位引入  bug 的变更

    branch                  #列出、创建或删除分支

    checkout              #检出一个分支或路径到工作区

    clone                     #克隆一个版本库到一个新目录

    commit                  #记录变更到版本库(本地)

    diff                         #显示提交之间、提交和工作区之间等的差异

    fetch                      #从另外一个版本库下载对象和引用

    grep                       #输出和模式匹配的行

    init                         #创建一个空的

    Git                          #版本库或重新初始化一个已存在的版本库

    log                         #显示提交日志

    merge                   #合并两个或更多开发历史

    mv                         #移动或重命名一个文件、目录或符号链接

    pull                        #获取并合并另外的版本库或一个本地分支

    push                      #更新远程引用和相关的对象

    rebase                   #本地提交转移至更新后的上游分支中

    reset                      #重置当前 HEAD 到指定状态

    rm                          #从工作区和索引中删除文件

    show                     #显示各种类型的对象

    status                   #显示工作区状态

    tag                        #创建、列出、删除或校验一个 GPG 签名的 tag 对象

    Git 原理示意图

      checkout 有两个功能,一个是从本地仓库把代码检出到工作区,另一个是用来切换分支

    添加新文件

    git add  文件名                  #添加到暂存区   

    git commit -m   文件名      #提交到本地仓库    -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看

    git commit -a -m                #提交到本地仓库   只能对文件的修改进行操作

    git push root@192.168.200.111:/root/git_data.git    #提交到远程仓库

    删除 git 内的文件

    git rm --cached database      #将文件从 git 暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

    git rm -f database                #将文件数据从 git 暂存区和工作目录一起删除

    git reset HEAD 文件名        #将文件数据从 git 暂存区记录中移除

    注释:

    只在本地目录:

    rm -rf test.txt

    添加到了暂存区,想删除暂存区记录并保留本地文件

    git add test.txt

    git rm --cached test.txt 或 git reset HEAD test.txt

    添加到了暂存区,想删除暂存区记录并删除本地文件

    git add test.txt

    git rm -f test.txt

    重命名暂存区数据

    没有添加到暂存区的数据直接 mv/rename 改名即可

    已经添加到暂存区的数据:git mv 原文件名 新文件名

    查看历史记录

    git log                                            #查看提交历史记录

    git log -2                                        #查看最近几条记录

    git log -p -1                                    # -p 显示每次提交的内容差异,例如仅查看最近一次差异

    git log --stat -2                              # --stat 简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

    git log --pretty=oneline                  # --pretty 根据不同的格式展示提交的历史信息

    git log --pretty=fuller -2                  # 以更详细的模块输出提交的历史记录

    git log --pretty=fomat:"%h %cn"    # 查看当前所有提交记录的简短 SHA-1 哈希字串与提交者的姓名

    使用 format 参数来制定具体的输出格式

    %s                     # 提交说明                                     

    %cd                   # 提交日期

    %an                   # 作者的名字

    %cn                   # 提交者的姓名

    %ce                   # 提交者的电子邮件

    %H                    # 提交对象的完整 SHA-1 哈希字串

    %h                     # 提交对象的简短 SHA-1 哈希字串

    %T                     # 树对象的完整 SHA-1 哈希字串

    %t                      # 树对象的简短 SHA-1 哈希字串

    %P                     # 父对象的完整 SHA-1 哈希字串

    %p                      # 父对象的简短 SHA-1 哈希字串

    %ad                   # 作者的修订时间

    还原历史数据

      Git 服务程序中有一个叫做 HEAD 的版本指针,当用户申请还原数据时,其实就是将 HEAD 指针指向到某个特定的提交版本,但是因为 Git 是分布式版本控制系统,为了避免历史记录冲突,故使用了 SHA-1 计算出十六进制的哈希字串来区分每个提交版本,另外默认的 HEAD 版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫 HEAD^,上上一个提交版本会叫做 HEAD^^,当然一般会用 HEAD~5 来表示往上数第五个提交版本。

    git reset --hard hash

    git reset --hard HEAD^      #还原历史提交版本上一次

    git reset --hard 3de15d4   #找到历史还原点的 SHA-1 值后,就可以还原(值不写全,系统会自动匹配)

    还原未来数据

     什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是 git log 已经找不到这个版本了。

    git reflog             #查看未来历史更新点

    标签使用

    前面回滚使用的是一串字符串,又长又难记。

    git tag v1.0                                                     #当前提交内容打一个标签(方便快速回滚),每次提交都可以打个 tag。

    git tag                                                            #查看当前所有的标签

    git show v1.0                                                 #查看当前1.0版本的详细信息

    git tag v1.2 -m "version 1.2 release is test"  #创建带有说明的标签,-a 指定标签名字,-m 指定说明文字 

    git tag -d v1.0                                                #我们为同一个提交版本设置了两次标签,删除之前的 v1.0

    对比数据

      git diff 可以对比当前文件与仓库已保存文件的区别,知道了对 NOTICE 作了什么修改后,再把它提交到仓库就放心多了。

    分支结构

      在实际的项目开发中,尽量保证 master 分支稳定,仅用于发布新版本,平时不要随便直接修改 master 分支里面的数据文件

      干活都在 dev 分支上。每个人从 dev 分支创建自己个人分支,开发完合并到 dev 分支,最后 dev 分支合并到 master 分支。所以团队的合作分支看起来会像下图那样。

     分支切换

     git branch 分支名              #创建分支

     git branch                          #查看分支

     git checkout 分支名           #切换分支

     合并代码

     git merge 分支名            #合并分支

     删除分支

     因为之前已经合并了分支,所以现在看到它在列表中。在这个列表中分支名字前没有 * 号 的分支通常都可以使用 git branch -d 删除掉;你已经将它们的工作整合到了另一个分支,所以并不会失去任何东西。

    查看所有包含未合并工作的分支,可以运行    git branch --no-merged

     如果真的想要删除分支并丢弃掉那些工作,如同帮助信息里所指出的,可以使用-D选项 强制删除它。

    Windows 上Git的使用

    windows 上 git 软件网站 https://git-for-windows.github.io

    软件下载地址

    https://github.com/git-for-windows/git/releases/download/v2.22.0.windows.1/Git-2.22.0-64-bit.exe

    GitHub 托管服务

      GitHub 顾名思义是一个 Git 版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳路径,GitHub 不仅可以托管各种 Git 版本仓库,还拥有了更美观的web 界面,您的代码文件可以被任何人克隆,使得开发者为开源项贡献代码变得更加容易,当然也可以付费购买私有库,这样高性价比的私有库真的是帮助到了很多团队和企业。

    注册GitHub

     浏览器访问 GitHub 官网:https://github.com/,点击 Sign up 进行注册

     

     

     

     添加密钥

     

    ssh-keygen

    [root@client ~]# cat .ssh/id_rsa.pub
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWJtMx/u9a99MW1iMerj5+R2qlMyDXH0uFiebr0EFd5zUf5jjzX+HJC+gERfeVpD0MfoqHOjXtcoEbopXX7ntD0xvcH7j1FI5OqeWtvts9C3AxXYSjH1d2Bv2wfG8LNHGVovK3J9UKbmR3e1ygmRzOpQSSHGUL+sImTWH8dU8qCPuPQL0HjZMWFODCS8tteyKP9k8IyrNhZBiX4BvYd0klMqTLtM47hZVRmmEgw50iEO63jtJa+zPGXlus6SG5/sUFGMkLHlLPvzW/3gO3Eg8FzLrTR2tusTdjW3ZkxCWzxnnIax5OON1OXsJiGONbzPPBbxzxqXaZ9ehlG8G6HDyb root@localhost.localdomain

    git 常用命令

    Git常用操作命令收集:
    1) 远程仓库相关命令
    检出仓库:$ git clone git://github.com/jquery/jquery.git
    查看远程仓库:$ git remote -v
    添加远程仓库:$ git remote add [name] [url]
    删除远程仓库:$ git remote rm [name]
    修改远程仓库:$ git remote set-url --push[name][newUrl]
    拉取远程仓库:$ git pull [remoteName] [localBranchName]
    推送远程仓库:$ git push [remoteName] [localBranchName]
     
    2)分支(branch)操作相关命令
    查看本地分支:$ git branch
    查看远程分支:$ git branch -r
    创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支
    切换分支:$ git checkout [name]
    创建新分支并立即切换到新分支:$ git checkout -b [name]
    删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
    合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并
    创建远程分支(本地分支push到远程):$ git push origin [name]
    删除远程分支:$ git push origin :heads/[name]

    我从master分支创建了一个issue5560分支,做了一些修改后,使用git push origin master提交,但是显示的结果却是'Everything up-to-date',发生问题的原因是git push origin master 在没有track远程分支的本地分支中默认提交的master分支,因为master分支默认指向了origin master 分支,这里要使用git push origin issue5560:master 就可以把issue5560推送到远程的master分支了。

        如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。

    git push origin test:master         // 提交本地test分支作为远程的master分支 //好像只写这一句,远程的github就会自动创建一个test分支
    git push origin test:test              // 提交本地test分支作为远程的test分支

    如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。

    git push origin :test              // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
    3)版本(tag)操作相关命令
    查看版本:$ git tag
    创建版本:$ git tag [name]
    删除版本:$ git tag -d [name]
    查看远程版本:$ git tag -r
    创建远程版本(本地版本push到远程):$ git push origin [name]
    删除远程版本:$ git push origin :refs/tags/[name]
     
    4) 子模块(submodule)相关操作命令
    添加子模块:$ git submodule add [url] [path]
    如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
    初始化子模块:$ git submodule init ----只在首次检出仓库时运行一次就行
    更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下
    删除子模块:(分4步走哦)
    1)$ git rm --cached [path]
    2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
    3) 编辑“.git/config”文件,将子模块的相关配置节点删除掉
    4) 手动删除子模块残留的目录
     
    5)忽略一些文件、文件夹不提交
    在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如
    target
    bin
    *.db
     

    git删除文件

    rm add2.txt

    git rm add2.txt

    git commit -m "rm test"

    git push web

    -----------at server

    cd /var/www/foo.git;sudo git update-server-info

    ------------检查删除效果

    cd;rm foo3 -rf;git clone http://[某ip]/foo.git foo3

    ------------更新已经存在的local code

    cd;cd foo2

    git remote add web [某user]@[某ip]:/var/www/foo.git/

    git pull web master

  • 相关阅读:
    sqlserver字符串拆分(split)方法汇总
    AQS和synchronized
    ReentrantLock和AbstractQueuedSynchronizer
    基于注解实现的策略模式
    堆排序
    无回显下的命令执行判断与利用方式研究
    Linux与windows写入base64编码后的webshell
    使用腾讯云函数上线Cobalt Strike
    javascript实现自适应宽度的瀑布流
    利用iframe实现ajax 跨域通信的解决方案
  • 原文地址:https://www.cnblogs.com/2567xl/p/11845097.html
Copyright © 2020-2023  润新知