美文网首页
13、Git安装部署

13、Git安装部署

作者: 一个反派人物 | 来源:发表于2021-01-26 10:29 被阅读0次

1 Git安装

yum -y install git

2 Git全局配置

git config
--global    使用全局配置文件
--system    使用系统级配置文件
--local     使用版本库级配置文件
  1. 配置git使用用户
git config --global user.name "wanghaotian"
  1. 配置git使用邮箱
git config --global user.email "12356@126.com"
  1. 配置语法高亮
git config --global color.ui true
  1. 查看当前配置
git config --list
或
cat .gitconfig

3 Git初始化

创建工作目录,进入工作目录

mkdir data
cd data

初始化仓库,将目录初始化为仓库(可以是空的目录,也可以是带内容的目录)

[root@git data]$ git init
Initialized empty Git repository in /root/data/.git/

3.1 查看工作区状态

在工作目录下运行命令git status,出现nothing to commit, working directory clean说明状态正常。

[root@git data]$ git status
# On branch master
nothing to commit, working directory clean

3.2 Git隐藏文件介绍

branches                  分支目录
config                    定义项目特有的配置选项
description               仅供git web程序使用
HEAD                      指示当前的分支
hooks                     包含git钩子文件
info                      包含一个全局排除文件(exclude文件)
objects                   **存放所有数据内容,有info和pack两个子文件夹**
refs                      存放指向数据(分支)的提交对象的指针
index                     保存暂存信息,在执行git init的时候,这个文件还没有

4 Git常规使用


只有在本地仓库中的文件,才能被版本控制系统管理起来。

5 Git命令

5.1 Git常用命令

git init初始化仓库
git status查看当前仓库的状态
git add filename添加文件到暂存区
git add .|*添加工作目录所有的文件到暂存区
git rm --cached filename将文件撤出暂存区
git rm -f filename同时删除暂存区和工作目录的文件
git commit -m "描述信息" <filename>将文件添加到本地仓库,不加文件名会提交所有暂存区的文件
git mv filename new-filename将工作区和暂存区的文件同时修改名称
git diff比对工作目录和暂存区有什么不同
git diff --cached比对暂存区和本地仓库有什么不同
git commit -am "描述信息"对于已经被仓库管理的文件,修改内容后可使用这条命令一次性提交

日志相关
git log查看当前状态往前的历史git commit快照操作


git log -p 显示详细的变化信息

git log --oneline 每次commit只显示一行简略的信息

git log --oneline --decorate显示当前HEAD指针信息

git log -1显示最近的1条commit信息
git reset --hard Hash值恢复到Hash值指向的历史数据
git reflog查看总的历史记录

分支相关
git branch查看分支
git branch 分支名创建分支
git branch -d 分支名删除分支
git checkout 分支名切换分支
git checkout -b 分支名创建并切换到分支
git log --oneline --decorate --graph --all输出你的提交历史、各个分支的指向以及项目的分支分叉情况。

标签相关
git tab查看所有标签
git tab -a 标签名 -m 描述信息为当前HEAD指针的commit创建标签
git tab -a 标签名 -m 描述信息 HASH值为HASH值对应的commit创建标签
git tab -d 标签名删除标签
git show 标签名查看标签对应状态的信息
git reset --hard 标签名回滚到标签代表的状态

远程仓库相关
git remote add 远程仓库名称 链接地址添加远程仓库
git remote查看远程仓库
git push -u 远程仓库名称 分支名上传分支到远程仓库
git pull从远程仓库拉取文件到本地
git clone 链接地址克隆远程仓库到本地

5.2 如何通过版本管理系统管理文件

  1. 工作目录有代码文件
  2. 通过git add filename添加到暂存区
  3. 通过git commit -m "描述信息" <filename>添加到本地仓库

5.3 如何修改文件名称

  1. 通过git mv filename new-filename修改文件名称
[root@git data]$ git mv a a.txt
[root@git data]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    a -> a.txt
#
  1. 通过git commit -m "描述信息"将改动同步到本地仓库
[root@git data]$ git commit -m "modified name a"
[master 3be75c4] modified name a
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename a => a.txt (100%)

5.4 如何恢复历史数据

git的每次commit操作,相当于做快照的操作。这个机制方便我们回滚到历史的commit时间点。

  1. git log --oneline查看git commit的历史记录,找出历史记录对应的hash值
  2. git reset --hard 08cc57f回滚到最初的状态
[root@git data]$ git reset --hard 08cc57f
HEAD is now at 08cc57f add newfile a
  1. git log --oneline --decorate查看当前指针
[root@git data]$ git log --oneline --decorate
08cc57f (HEAD, master) add newfile a

5.5 如何从历史时间点恢复到最近的状态

回滚到历史时间点后,使用git log只能查到更旧的记录,比历史时间更新的记录查看不到。需要使用git reflog查询全部记录。

  1. git reflog --decorate查询总的历史记录,找出要恢复的记录Hash值
  2. git reset --hard 97de044回滚到最近的状态
[root@git data]$ git reset --hard 97de044
HEAD is now at 97de044 add 123456
  1. git log --oneline --decorate查看当前指针
[root@git data]$  git log --oneline --decorate
97de044 (HEAD, master) add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a

5.6 Git分支

5.6.1 分支原理

分支是平行空间,默认的项目处于master分支。可以基于master分支创建属于自己的分支,分支只属于自己, 其他人看不到。分支将拷贝master的全部文件,等代码编写完后,再将自己的分支与master合并即可,这样既能保证代码不丢失,又不影响其他人工作。

5.6.2 创建分支

git branch 分支名,创建分支时基于当前HEAD指针指向的分支,创建一个新的分支,但并不会自动切换到新分支中去。

[root@git data]$ git branch testing
[root@git data]$ git log --oneline --decorate
97de044 (HEAD, testing, master) add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a

#此时master和testing均指向同一提交对象

5.6.3 查看分支

git branche,查看所有分支,*所在是当前所在分支

[root@git data]$ git branch 
* master
  testing

5.6.4 切换分支

git checkout 分支名,要切换到一个已存在的分支

[root@git data]$ git checkout testing 
Switched to branch 'testing'
[root@git data]$ git branch 
  master
* testing

5.6.5 创建并切换分支

git checkout -b 分支名,创建并直接切换到分支

5.6.7 对testing分支进行操作

创建3个文件aaa、bbb、ccc

[root@git data]$ touch aaa bbb ccc

将改动提交到本地仓库

[root@git data]$ git add .
[root@git data]$ git commit -m "add file aaa bbb ccc"

查看当前HEAD指针和log状态

[root@git data]$ git log --oneline --decorate
d582ca8 (HEAD, testing) add file aaa bbb ccc
97de044 (master) add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a

testing 分支向前移动了,但是 master 分支却没有,它仍然指向运行 git checkout 时所指的对象。


5.6.8 回到master查看状态

切换回master

git checkout master

查看当前HEAD指针和log状态

[root@git data]$ git log --oneline --decorate
97de044 (HEAD, master) add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a

这条命令做了两件事。 一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容。 也就是说,你现在做修改的话,项目将始于一个较旧的版本。 本质上来讲,这就是忽略 testing 分支所做的修改,以便于向另一个方向进行开发。


5.6.9 对master进行操作

创建文件ddd

[root@git data]$ touch ddd

将改动提交到本地仓库

[root@git data]$ git add .
[root@git data]$ git commit -m "add file ddd"

查看当前HEAD指针和log状态

[root@git data]$ git log --oneline --decorate
3ebc111 (HEAD, master) add file ddd
97de044 add 123456
82ea6b3 modified
3be75c4 modified name a
521a814 modified name
44b891b modified a name
c5aa01c modified a name
9cc5f5a modified a name
74c9398 modified a name
211bbf6 modified a name
08cc57f add newfile a

对master进行更改后,项目相当于出现了分叉,一个master分支,一个testing分支


也可以使用git log --oneline --decorate --graph --all查看项目分叉情况
[root@git data]$  git log  --oneline --decorate --graph --all
* 3ebc111 (HEAD, master) add file ddd
| * d582ca8 (testing) add file aaa bbb ccc
|/  
* 97de044 add 123456
* 82ea6b3 modified
* 3be75c4 modified name a
* 521a814 modified name
* 44b891b modified a name
* c5aa01c modified a name
* 9cc5f5a modified a name
* 74c9398 modified a name
* 211bbf6 modified a name
* 08cc57f add newfile a

5.6.10 对testing分支进行合并

确保目前工作在master分支中,使用git merge 分支名命令

[root@git data]$ git merge testing 
#会弹出页面,输入此次操作的描述

此时在testing中创建的文件aaa、bbb、ccc合并到master中,再次查看项目分支情况,git log --oneline --decorate --graph --all

[root@git data]$ git log --oneline --decorate --graph --all
*   62ef88a (HEAD, master) Merge branch 'testing' Merge testing
|\  
| * d582ca8 (testing) add file aaa bbb ccc
* | 3ebc111 add file ddd
|/  
* 97de044 add 123456
* 82ea6b3 modified
* 3be75c4 modified name a
* 521a814 modified name
* 44b891b modified a name
* c5aa01c modified a name
* 9cc5f5a modified a name
* 74c9398 modified a name
* 211bbf6 modified a name
* 08cc57f add newfile a

删除testing分支

git branch -d testing

5.7 解决merge冲突

目前只有master分支,创建并切换到testing分支

[root@git data]$ git checkout -b testing

修改aaa文件,添加字符串testing,并提交

[root@git data]$ echo testing >> aaa
[root@git data]$ git add .
[root@git data]$ git commit -m "modify aaa add testing"

切换到master分支,修改aaa文件,添加字符串master,并提交

[root@git data]$ git checkout master 
[root@git data]$ echo master > aaa 
[root@git data]$ git add .
[root@git data]$ git commit -m "modify aaa add master"

此时两个分支都有aaa文件,但是内容不一样,进行合并

[root@git data]$ git merge testing 
Auto-merging aaa
CONFLICT (content): Merge conflict in aaa
Automatic merge failed; fix conflicts and then commit the result.

#提示自动合并失败,必须手动解决冲突后再提交

查看现在aaa文件的内容,Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

master
<<<<<<< HEAD
=======
testing
>>>>>>> testing

手工修改要保留的内容,再进行提交

[root@git data]$ git commit -am "merge testing to master"

删除testing分支

[root@git data]$ git branch -d testing

5.8 标签管理

一般对有重大功能更新的大版本打标签,方便标识项目里程碑,小的修改不用频繁打标签。

查看当前commit日志情况

git log --oneline --decorate

创建v1.0和v2.0版本标签

#不加Hash值,默认对当前commit打标签
[root@git data]$ git tag -a v2.0 -m "merge testing"
#对目标Hash值的commit打标签
[root@git data]$ git tag -a v1.0 -m "modify a add 123456" 97de044

查看当前标签

[root@git data]$ git tag
v1.0
v2.0

#查看v1.0的详细信息
[root@git data]$ git show v1.0
tag v1.0
Tagger: wanghaotian <wanghaotian87@126.com>
Date:   Sat Jan 23 20:09:06 2021 +0800

modify a add 123456

commit 97de044efc11e8ab43f2e1a7ace43437dcb784ac
Author: wanghaotian <wanghaotian87@126.com>
Date:   Fri Jan 22 20:46:05 2021 +0800

    add 123456

diff --git a/a.txt b/a.txt
index e56e15b..587481d 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
 12345
+12312414

#查看v2.0的详细信息
[root@git data]$ git show v2.0
tag v2.0
Tagger: wanghaotian <wanghaotian87@126.com>
Date:   Sat Jan 23 20:07:45 2021 +0800

merge testing

commit 6ebfd9829e41b5f06d6fe625289d2a4facae9923
Merge: d5878bc 8ac2f0f
Author: wanghaotian <wanghaotian87@126.com>
Date:   Sat Jan 23 20:04:17 2021 +0800

    merge testing modify aaa add aaa

用标签进行状态回滚

[root@git data]$ git reset --hard v1.0 
[root@git data]$ git reset --hard v2.0 

6 Github的使用

6.1 创建仓库

注册登录后,新建仓库



填入仓库名称和描述信息


6.2 本地仓库推送

推送方式有2种,HTTPS方式或SSH方式


以SSH方式为例,官方讲解了新建仓库和已有仓库的上传方法

使用命令git remote add 远程仓库名称 SSH链接(Github上显示的链接)添加远程仓库
git remote add origin git@github.com:wht-bigsky000/git_test.git

git remote查看远程仓库

[root@git data]$ git remote 
origin

将本地ssh-keygen的公钥配置到Github端




git push -u 远程仓库名称 分支名称推送本地仓库代码
git push -u origin master 

Github上查看代码文件



6.3 从Github clone

git clone SSH链接(Github上显示的链接)


在/tmp目录下进行clone
[root@git data]$ cd /tmp
[root@git tmp]$ git clone git@github.com:wht-bigsky000/git_test.git

6.4 删除远程仓库

git remote remove 远程仓库名

git remote remove origin

7 Gitlab

7.1 Gitlab安装

安装依赖软件包,配置防火墙

yum install -y curl policycoreutils-python openssh-server perl
systemctl enable sshd
systemctl start sshd
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
systemctl reload firewalld

安装Postfix,postfix可用于发电子邮件

yum install postfix
systemctl enable postfix
systemctl start postfix

下载rpm包
CE版本:https://packages.gitlab.com/gitlab/gitlab-ce
EE版本:https://packages.gitlab.com/gitlab/gitlab-ee

7.2 配置Gitlab配置文件

配置/etc/gitlab/gitlab.rb文件,配置external_url部分,修改url为gitlab服务器地址或url

#原有配置
external_url 'http://gitlab.example.com'
#修改配置
external_url 'http://10.0.0.200'

运行gitlab-ctl reconfigure进行gitlab重新配置并启动

gitlab-ctl reconfigure

7.3 Gitlab目录结构

/opt/gitlab/ 程序安装目录
/var/opt/gitlab/ gitlab数据目录
/var/opt/gitlab/git-data gitlab代码仓库

7.4 Gitlab常用命令

gitlab-ctl start 启动gitlab所有服务
gitlab-ctl status 查看gitlab所有服务的运行状态
gitlab-ctl stop 停止gitlab服务
gitlab-ctl stop nginx 单独停止某个服务
gitlab-ctl tail 查看所有服务的日志

7.5 Gitlab页面

7.5.1 访问Gitlab页面

直接在浏览器中输入external_url的地址,首次登录提示输入新的root密码,输入两次后可以登录。默认可以使用root用户登录

7.5.2 配置页面外观

配置Appearance



设置主页标题、描述和Logo



设置导航键图标

7.5.3 配置组、项目、用户

7.5.3.1 创建组

创建test组



7.5.3.2 创建项目

创建git_data项目




7.5.3.3 管理员连接远程仓库

提交项目后远程仓库就建立好了,要连接远程仓库有两种方式HTTP和SSH,下面以SSH连接为例。
添加SSH公钥



将本地仓库推送到远程仓库,有4种方式

#Git global setup
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"

#Create a new repository
git clone git@10.0.0.200:test/git_data.git
cd git_data
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

#Push an existing folder
cd existing_folder
git init
git remote add origin git@10.0.0.200:test/git_data.git
git add .
git commit -m "Initial commit"
git push -u origin master

#Push an existing Git repository,本例使用的是这种方式
cd existing_repo
git remote rename origin old-origin
git remote add origin git@10.0.0.200:test/git_data.git
git push -u origin --all
git push -u origin --tags

推送一个test.txt新测试文件

touch test.txt
git add .
git commit -m "add a new file test.txt"
git push -u origin master

7.5.3.4 配置用户

(可选)有时为了安全,可以取消用户自行注册账户的功能



创建dev用户




配置用户密码


将dev用户添加到test组



7.5.3.5 dev用户连接远程仓库

上传SSH公钥



clone远程仓库


git clone git@10.0.0.200:test/git_data.git

新建dev分支,并进行新文件推送

#设置用户名和邮箱
git config --global user.name "dev"
git config --global user.email "dev.qq.com"

#进入仓库文件夹,新建分支
cd repodir
git checkout -b dev
#新建文件并推送
touch eee
git add .
git commit -m "add newfile eee"
git push -u origin dev

7.5.3.6 配置master分支保护

配置master分支保护,只允许管理员更改



7.5.4 项目分支合并

当dev分支开发完毕,需要将代码合并到master分支时,进行如下操作。
dev端提交merge请求



管理员端进行确认


注意:
  1. 一般从分支合并到master时,本地仓库建议同时删除分支,这样能够保证下次创建分支的内容与master一致。
  2. 建议在进行内容更新前先运行git pull,保证本地仓库与远程仓库内容一致,否则在内容不一致的基础上开发后再进行git push会失败
  3. 创建分支的顺序建议为:删除本地分支->从master clone/pull->创建新分支,这样能保证文件的一致性。

相关文章

网友评论

      本文标题:13、Git安装部署

      本文链接:https://www.haomeiwen.com/subject/sdxezktx.html