持续集成与持续交付——git工具的使用+gitlab代码仓库

一、git介绍
1.1Git特点:

速度
简单的设计
对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
完全分布式
有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
Git必看秘籍:https://git-scm.com/book/zh/v2
1.2Git 有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
已提交表示数据已经安全地保存在本地数据库中。
这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。
二、安装Git:

yum install -y git

获取 Git 仓库通常有两种方式:

将尚未进行版本控制的本地目录转换为 Git 仓库。
从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone 

2.1初始化版本库:

[root@server4 ~]# mkdir demo  创建目录
[root@server4 ~]# cd demo/   进入目录
[root@server4 demo]# git init   初始化
Initialized empty Git repository in /root/demo/.git/
[root@server4 demo]# ls .git/  .git目录是git跟踪管理版本库的,无特殊情况不乱操作
branches  config  description  HEAD  hooks  info  objects  refs

2.2Git使用
git工具的使用1

[root@server4 demo]# touch README  创建文件
[root@server4 demo]# git status  查看信息
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#	README
nothing added to commit but untracked files present (use "git add" to track)
[root@server4 demo]# git status -s  简化输出信息
?? README    ??:表示此文件已经添加到目录中,Git没有跟踪,文件只是存在于Git目录中
[root@server4 demo]# git add README  天剑文件到
[root@server4 demo]# git status -s
A  README  暂存区
提交文件之前需要设置全局用户信息
[root@server4 demo]# git config --global user.name "wxh"   用户名
[root@server4 demo]# git config --global user.email [email protected]   邮件
[root@server4 demo]# git status -s 
A  README
[root@server4 demo]# git commit -m "add README"  提交文件搭配版本系统当中
[master (root-commit) fcd0c8d] add README
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
[root@server4 demo]# git status -s  再次查看没有输出文件已经提交

git工具的使用2

[root@server4 demo]# echo westos > README   之前创建的文件并没有内容,现在写入内容
[root@server4 demo]# git status -s 查看发现文件一直被Git跟踪,更改后文件在工作区
 M README  此M在中间
[root@server4 demo]# cat README 查看文件内容
westos
[root@server4 demo]# git status  显示详细输出
# On branch master
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#	modified:   README
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@server4 demo]# git checkout -- README   使用命令撤销刚才的操作
[root@server4 demo]# cat README   文件复位内容为空
[root@server4 demo]# git status -s  并且退回到版本系统中

git工具的使用3:文件内容的更改、文件状态的认识

[root@server4 demo]# echo westos > README  文件写入内容后直接到工作区
提交文件,需要先到暂存区,然后才能到版本库中
[root@server4 demo]# git add README    添加修改的文件到暂存区
[root@server4 demo]# git status -s  查看
M  README   此时M在最左侧,及暂存区,M:之前添加过的文件然后被更改
[root@server4 demo]# echo linux > file  重新创建一个新的由内容的文件
[root@server4 demo]# git status -s  查看??:在Git目录中
M  README
?? file
[root@server4 demo]# git add  .  点表示当前所有。添加到暂存区,
[root@server4 demo]# git status -s  查看,A:新添加的文件
M  README
A  file
[root@server4 demo]# git commit -m "v1"  提交  -m:指定当前提交所有文件的一个变量总名称
[master 19f82d6] v1                               默认提交暂存区所有的文件不需要特定指定
 2 files changed, 2 insertions(+)
 create mode 100644 file
[root@server4 demo]# git status -s  查看已经全部提交

git工具的使用4:文件内容的更改、文件状态的认识

[root@server4 demo]# echo westos >> file
[root@server4 demo]# git status -s
 M file
[root@server4 demo]# git add file
[root@server4 demo]# git status -s
M  file
[root@server4 demo]# echo file >> file
[root@server4 demo]# git status -s
MM file
[root@server4 demo]# git add file
[root@server4 demo]# git status -s
M  file
[root@server4 demo]# git commit -m "v2"
[master 69cf94e] v2
 1 file changed, 2 insertions(+)
[root@server4 demo]# git status -s

git工具的使用5:文件内容的更改

[root@server4 demo]# echo westos >> file  追加内容到文件
[root@server4 demo]# git status -s  查看文件在工作区
 M file
[root@server4 demo]# git add file  添加
[root@server4 demo]# git status -s  文件在暂存区
M  file
[root@server4 demo]# echo file >> file  再次追加内容到文件(注意此时在暂存区内添加)
[root@server4 demo]# git status -s  有两个M
MM file
前面是在工作区追击内容再添加,此次是在暂存区追加内容必须也要添加一次。否则此次不生效
[root@server4 demo]# git add file  
[root@server4 demo]# git status -s  查看
M  file
[root@server4 demo]# git commit -m "v2"  自定义添加的名称:v2=file
[master 69cf94e] v2
 1 file changed, 2 insertions(+)
[root@server4 demo]# git status -s  查看已经提交

git工具的使用6:屏蔽一些隐藏文件和目录


[root@server4 demo]# mkdir env   创建目录
[root@server4 demo]# cd env/
[root@server4 env]# touch ealues
[root@server4 env]# ls
ealues
[root@server4 env]# cd ..
[root@server4 demo]# touch .a  创建文件
[root@server4 demo]# touch .o
[root@server4 demo]# ls
env  file  README
[root@server4 demo]# ls -a  都是一些隐藏文件,但是不想放到版本库中
.  ..  .a  env  file  .git  .o  README
[root@server4 demo]# git status -s  而且在查看的时候有输出
?? .a
?? .o
?? env/
[root@server4 demo]# vim .gitignore  编辑此文件
.*  忽略所有隐藏文件
env  忽略此目录
server4 demo]# git status -s 查看没有输出

git工具的使用7查看已暂存和未暂存的修改


[root@server4 demo]# echo file >> README 
[root@server4 demo]# git diff README   比较
diff --git a/README b/README
index 00f9aaf..0cb4d7a 100644
--- a/README
+++ b/README
@@ -1 +1,2 @@
 westos
+file   加入的内容
跳过使用暂存区域 
[root@server4 demo]# git status -s
 M README
[root@server4 demo]# git commit -a -m "v3"
[master c752179] v3
 1 file changed, 1 insertion(+)
[root@server4 demo]# git status -s

git工具的使用8:移除文件、重命名文件、查看提交历史

移除文件
[root@server4 demo]# git rm file  删除file文件
rm 'file'
[root@server4 demo]# git status -s  文件在暂存区D:删除的文件
D  file
[root@server4 demo]# git commit -m "v4"   需要提交当前文件彻底删除
[master 4319341] v4
 1 file changed, 3 deletions(-)
 delete mode 100644 file
[root@server4 demo]# git status -s  查看没有信息
[root@server4 demo]# ls   file文件不存在
env  README

重命名文件
[root@server4 demo]# ls
env  README
[root@server4 demo]# git mv README HELLO  重命名
[root@server4 demo]# git status -s  此时在暂存区
R  README -> HELLO
[root@server4 demo]# git commit -m "v5"  提交
[master 88057e0] v5
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename README => HELLO (100%)
[root@server4 demo]# git status -s
[root@server4 demo]# ls  查看 已经更改
env  HELLO


其实,运行 git mv 就相当于运行了下面三条命令:
mv README.md README  重名名
git rm README.md  删除之前的
git add README  添加更名之后的


查看提交历史
git log
git log -p -2
git log --stat
git log --pretty=oneline
[root@server4 demo]# git log --pretty=oneline
88057e0db7747885c927168f1ea541d26372906b v5
4319341521c9591bcb231f46bb18f15ec19a9f00 v4
c752179e41a5928d876016b812263b40830e6b0d v3
69cf94e373ad8cbac4cdf31de6f615996990e33f v2
19f82d6a8e7bddf110cdafb4557e2b19ded22d7b v1
fcd0c8da183a486d86d332fd1f683cbc7c6b5e1f add README
[root@server4 demo]# git reflog
88057e0 HEAD@{0}: commit: v5
4319341 HEAD@{1}: commit: v4
c752179 HEAD@{2}: commit: v3
69cf94e HEAD@{3}: commit: v2
19f82d6 HEAD@{4}: commit: v1
fcd0c8d HEAD@{5}: commit (initial): add README

git工具的使用9:取消暂存的文件、撤消对文件的修改、版本回退

[root@server4 demo]# git reflog  查看历史提交
88057e0 HEAD@{0}: commit: v5
4319341 HEAD@{1}: commit: v4
c752179 HEAD@{2}: commit: v3
69cf94e HEAD@{3}: commit: v2
19f82d6 HEAD@{4}: commit: v1
fcd0c8d HEAD@{5}: commit (initial): add README
[root@server4 demo]# git reset --hard c752179   回退v3
HEAD is now at c752179 v3
[root@server4 demo]# ls  文件恢复,之前删掉了
env  file  README
[root@server4 demo]# cat README   查看内容
westos
file
[root@server4 demo]# git reset --hard 69cf94e   再次回退到v2
HEAD is now at 69cf94e v2
[root@server4 demo]# ls
env  file  README
[root@server4 demo]# cat README   查看内容只有一行
westos
[root@server4 demo]# ls
env  file  README
[root@server4 demo]# vim README   编辑文件
[root@server4 demo]# cat README 
westos
westos
westos
westos
westos
westos
westos
westos
[root@server4 demo]# git status -s  查看文件在工作区
 M README
[root@server4 demo]# git add README   添加文件到暂存区
[root@server4 demo]# git status   查看显示可以回退到工作区
# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#	modified:   README
#
[root@server4 demo]# git status  -s 此时在暂存区
M  README
[root@server4 demo]# git reset HEAD README   回退到工作区
Unstaged changes after reset:
M	README
[root@server4 demo]# git status  -s  查看在工作区
 M README
[root@server4 demo]# git checkout -- README   在此回退文件
[root@server4 demo]# git status  -s
[root@server4 demo]# ls
env  file  README
[root@server4 demo]# cat README   文件内容已经恢复到之前
westos

三、远程仓库:注册github帐号,并新建一个仓库
持续集成与持续交付——git工具的使用+gitlab代码仓库_第1张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第2张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第3张图片
3.1生成秘钥并上传到GitHub
持续集成与持续交付——git工具的使用+gitlab代码仓库_第4张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第5张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第6张图片
3.2推送本地仓库内容到github:

[root@server4 ~]# cd demo/
关联远程仓库
[root@server4 demo]# git remote add origin [email protected]:wcwccheng/demo.git 
[root@server4 demo]# git push -u origin master   第一次推送需要加 -u参数

持续集成与持续交付——git工具的使用+gitlab代码仓库_第7张图片

3.3克隆远程仓库
手动操作删除demo目录,然后恢复

[root@server4 ~]# rm -rf demo/
[root@server4 ~]# git clone [email protected]:wcwccheng/demo.git  复制下图中的克隆链接接
Cloning into 'demo'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 10 (delta 0), reused 10 (delta 0), pack-reused 0
Receiving objects: 100% (10/10), done.
[root@server4 ~]# cd demo/  恢复目录
[root@server4 demo]# ls
file  README

持续集成与持续交付——git工具的使用+gitlab代码仓库_第8张图片
四、gitlab代码仓库
4.1gitlab安装

软件下载(官方下载慢,推荐使用国内镜像站点)
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

软件安装: (官方推荐至少4G内存)
yum install -y curl policycoreutils-python openssh-server
安装
yum install -y gitlab-ce-12.8.5-ce.0.el7.x86_64.rpm

持续集成与持续交付——git工具的使用+gitlab代码仓库_第9张图片

vim /etc/gitlab/gitlab.rb	 编辑配置文件	
29: external_url 'http://172.25.254.4'		//访问gitlab的地址
gitlab-ctl  reconfigure			//重载服务(里面含有多个服务)

登录gitlab:

http://172.25.254.4 		//用户:root 第一次登录需要强制修改密码
root
westoswestos

常用命令:
gitlab-ctl start    	  启动所有 gitlab 组件
gitlab-ctl stop        	  停止所有 gitlab 组件
gitlab-ctl restart        重启所有 gitlab 组件
gitlab-ctl status         查看服务状态
gitlab-ctl reconfigure    重载服务
gitlab-ctl tail        	  查看日志

新建项目
持续集成与持续交付——git工具的使用+gitlab代码仓库_第10张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第11张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第12张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第13张图片

添加ssh密钥:

持续集成与持续交付——git工具的使用+gitlab代码仓库_第14张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第15张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第16张图片

[root@server4 demo]# git config --global user.email [email protected]  邮箱
[root@server4 demo]# git config --global user.name "wxh"  用户

[root@server4 demo]# git clone [email protected]:root/demo.git   关联远程仓库
Cloning into 'demo'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
[root@server4 demo]# git remote -v
origin	git@172.25.254.4:root/demo.git (fetch)
origin	git@172.25.254.4:root/demo.git (push)
[root@server4 demo]# echo www.westos.org > index.html
[root@server4 demo]# git status -s
?? index.html
[root@server4 demo]# git add index.html  添加文件到暂存区
[root@server4 demo]# git commit -m index.html  添加文件到git版本库
[master 0aeb559] index.html
 1 file changed, 1 insertion(+)
 create mode 100644 index.html
[root@server4 demo]# git status -s
?? demo/
[root@server4 demo]# git push -u origin master  上传推送文件
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@172.25.254.4:root/demo.git
   e7a78ab..0aeb559  master -> master
Branch master set up to track remote branch master from origin.

在页面刷新就可以看见上传的index.html文件
持续集成与持续交付——git工具的使用+gitlab代码仓库_第17张图片
持续集成与持续交付——git工具的使用+gitlab代码仓库_第18张图片
同样的当我们删除demo目录也可以去克隆使用ssh克隆

你可能感兴趣的:(持续集成与持续交付——git工具的使用+gitlab代码仓库)