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

原文地址:https://www.cnblogs.com/2567xl/p/11845097.html