git,gitlab仓库的搭建和使用

git工具的使用

版本控制系统

版本控制系统是一种追踪记录对工程文件的修改历史的技术。
它只要经历了三个阶段:

  1. 本地版本控制系统

在这里插入图片描述
使用传统的复制,更新的方式,在本地进行维护,会出现很多的目录和文件,难以维护。

  1. 集中化的版本控制系统

在这里插入图片描述
集中化又一个server端,其中的问题是如果server端挂了,客户端就无法进行开发了。

  1. 分布式版本控制系统

在这里插入图片描述
分布式是对集中化做了一个去中心化,就是当我们的server端挂了之后,我们的客户端依然可以进行开发等server端恢复后又去同步server端的,但是最终要提交合并到server端。

git 简介

git就是一种分布式版本控制工具。

  • Git特点:
    • 速度
    • 简单的设计
    • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
    • 完全分布式
    • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
  • 自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的
    目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统。
  • Git必看秘籍:https://git-scm.com/book/zh/v2

Git有三种状态:已提交(committed)、已修改(modified) 和 已暂存(staged)。

  1. 已修改表示修改了文件,但还没保存到数据库中。
  2. 已暂存表示对一个已修改文件的当前版本做了标记
  3. 已提交表示数据已经安全地保存在本地数据库中。

这会让我们的 Git 项目拥有三个阶段:工作区、暂存区以及 Git 目录。

在这里插入图片描述

git安装

git 工具是系统自带的:

我们需要创建一个目录,在目录中运行git,执行git命令,然后在做初始化,就完成了git 仓库的初始化

[root@server1 ~]# yum install git -y
[root@server1 ~]# mkdir demo
[root@server1 ~]# cd demo/
[root@server1 demo]# git init		# 初始化版本库
Initialized empty Git repository in /root/demo/.git/
[root@server1 demo]# l.
.  ..  .git
# 这里的git的全部信息都隐藏在.git这个目录中,而且我们下面所要运行的指令都必须在这个目录下完成。
  • 获取 Git 仓库通常有两种方式:
    • 将尚未进行版本控制的本地目录转换为 Git 仓库。
    • 从其它服务器克隆 一个已存在的 Git 仓库。比如: git clone

git使用

[root@server1 demo]# git status			# 检查当前文件状态
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#				# 这里回给我们一些提示
#	mee
nothing added to commit but untracked files present (use "git add" to track)
[root@server1 demo]# git status -s		# 简化查询
?? mee				# 这里的两个?? 是状态的一种,代表刚创建到这个目录中的文件,git还没有进行跟踪

[root@server1 demo]# git add mee 		# 添加
[root@server1 demo]# git status -s
A  mee				# A 代表到达了暂存区,但还没有到达版本库。
#然后我们进行提交:
[root@server1 demo]# git commit -m "add mee" 

*** Please tell me who you are.		# 让我们输入自己的信息,方便出错时背锅

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'root@server1.(none)')

[root@server1 demo]# git config --global user.email "cay@example.com"
[root@server1 demo]# git config --global user.name "cay"		# 设定信息
[root@server1 demo]# git commit -m "add mee" 		# 再次提交
[master (root-commit) 9e5b46e] add mee
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 mee
[root@server1 demo]# git status -s		# 查看状态没有东西了,这时已经放到了git仓库,再有改动的化才能看见
[root@server1 demo]# 		

[root@server1 demo]# echo woaini > mee 
[root@server1 demo]# git status -s
 M mee		# M表示一经修改,注意M那里有两各位置,这里的这个M在右边,
 
[root@server1 demo]# git status 		# 查看提示
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)		#让我们使用add 把它放到暂存区
#   (use "git checkout -- <file>..." to discard changes in working directory)	# 撤销更改
#
#	modified:   mee
#
no changes added to commit (use "git add" and/or "git commit -a")


[root@server1 demo]# git checkout -- mee 		#我们撤销一下
[root@server1 demo]# cat mee 		# 存进去的文字不见了
[root@server1 demo]# git status -s
[root@server1 demo]# git status 
# On branch master
nothing to commit, working directory clean		# 就没有东西了


[root@server1 demo]# echo woaini > mee 		# 在输入进去
[root@server1 demo]# git status -s
 M mee				# 又回到了右边这个M的状态
[root@server1 demo]# git add mee 
[root@server1 demo]# git status -s
M  mee			# 左边的M 表示修改已经到暂存区了,因为这个文件已经在版本库了,这次只是修改,所以不是A


[root@server1 demo]# echo redhat > file
[root@server1 demo]# git status -s
M  mee
?? file
[root@server1 demo]# git add .				. 代表把当前目录所有的文件放到暂存目录
[root@server1 demo]# git status -s
A  file
M  mee
[root@server1 demo]# git commit -m "v1"		# 提交
[master 4b3130d] v1
 2 files changed, 2 insertions(+)
 create mode 100644 file
[root@server1 demo]# git status -s
[root@server1 demo]# 

现在有这样一种状态:

[root@server1 demo]# echo aaa > file 
[root@server1 demo]# git status -s
 M file
[root@server1 demo]# git add .
[root@server1 demo]# git status -s
M  file
[root@server1 demo]# echo bbb > file 
[root@server1 demo]# git status -s
MM file			# 之前的修改已经到暂存区了,我们有修改了一次

# 这时我们需要在add一词才可以全部提交,不然提交的至是到暂存区的哪一部分
[root@server1 demo]# git add file 
[root@server1 demo]# git status -s
M  file
[root@server1 demo]# git commit -m "v2"
[master fe24949] v2
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@server1 demo]# git status -s
[root@server1 demo]# 

在工作环境中会产生一些不需要提交到仓库的文件,这些文件是没有意义的,但是git依然会识别这些文件,我们创建 .gitignore 文件来忽略一定格式的文件

[root@server1 demo]# touch .a
[root@server1 demo]# touch .o
[root@server1 demo]# mkdir env
[root@server1 demo]# cd env/
[root@server1 env]# touch values
[root@server1 env]# cd ..
[root@server1 demo]# git status -s
?? .a
?? .o			# 可以识别这些文件
?? env/
[root@server1 demo]# vim .gitignore
[root@server1 demo]# cat .gitignore 
.*
env/		# 忽略隐藏文件和env 目录下的文件
[root@server1 demo]# git status -s
[root@server1 demo]# 		# 看不到了吧

[root@server1 demo]# echo ccccc > file
[root@server1 demo]# git diff		# 比对以暂存和未暂存文件内容
diff --git a/file b/file
index f761ec1..1188fe1 100644
--- a/file
+++ b/file
@@ -1 +1 @@
-bbb
+ccccc		# 这里是差别


[root@server1 demo]# git status -s
 M file		# 当前我们还没有用add添加到暂存区
[root@server1 demo]# git commit -a -m "v3"			# -a 就代表add
[master 75a588c] v3
 1 file changed, 1 insertion(+), 1 deletion(-)		# 这样就忽略的添加到暂存区这一步,直接 -a 就行了
[root@server1 demo]# git status -s

删除文件

[root@server1 demo]#  rm -fr file
[root@server1 demo]# git status -s
 D file			# 表示文件在工作区被删除
[root@server1 demo]# git rm file		# 删除文件
rm 'file'
[root@server1 demo]# git status -s		# 到暂存区
D  file			# D delete
[root@server1 demo]# git commit -m "v4"		#提交,也可以直接git rm ,不用 rm
[master 2b9a5a5] v4
 1 file changed, 1 deletion(-)
 delete mode 100644 file
[root@server1 demo]# git status -s
[root@server1 demo]# ls
env  mee			# file 文件就删除了。

重命名

[root@server1 demo]# git mv mee lala
[root@server1 demo]# git status -s	
R  mee -> lala			# R rename
[root@server1 demo]# git commit -m "v5"
[master 0cafe26] v5
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename mee => lala (100%)
[root@server1 demo]# git status -s
[root@server1 demo]#  

查看提交历史

[root@server1 demo]# git log		# 会按时间先后顺序列出所有的提交,最近的更新排在最上面
commit 0cafe263fd9577e0027ea41dca69b6b06efad01e
Author: cay <cay@example.com>
Date:   Fri Jun 12 11:26:11 2020 +0800

    v5

commit 2b9a5a561f575915e8ec8a228ee7fe61b9952b31
Author: cay <cay@example.com>
Date:   Thu Jun 11 19:16:14 2020 +0800

    v4

commit 75a588c691c1897b64a19e0d7d5da529b8d8bd29
Author: cay <cay@example.com>
Date:   Thu Jun 11 19:08:41 2020 +0800

[root@server1 demo]# git log -p -2			# -p 或 --patch ,它会显示每次提交所引入的差异(按 补丁 的格式输出)-2 选项来只显示最近的两次提交
commit 0cafe263fd9577e0027ea41dca69b6b06efad01e
Author: cay <cay@example.com>
Date:   Fri Jun 12 11:26:11 2020 +0800

    v5

diff --git a/lala b/lala
new file mode 100644
index 0000000..459898b
--- /dev/null
+++ b/lala
@@ -0,0 +1 @@
+woaini
diff --git a/mee b/mee
deleted file mode 100644
index 459898b..0000000
--- a/mee
+++ /dev/null
@@ -1 +0,0 @@
-woaini


[root@server1 demo]# git log --stat			# 每次提交的简略统计信息
commit 0cafe263fd9577e0027ea41dca69b6b06efad01e
Author: cay <cay@example.com>
Date:   Fri Jun 12 11:26:11 2020 +0800

    v5

 lala | 1 +
 mee  | 1 -
 2 files changed, 1 insertion(+), 1 deletion(-)


[root@server1 demo]# git log --pretty=oneline		#每个提交放在一行显示,在浏览大量的提交时非常有用
0cafe263fd9577e0027ea41dca69b6b06efad01e v5
2b9a5a561f575915e8ec8a228ee7fe61b9952b31 v4
75a588c691c1897b64a19e0d7d5da529b8d8bd29 v3
fe24949b320b616c9a3d48b249595dd4d5af3f5d v2
4b3130d5963f3018812b64b05e81d333cee56a71 v1
9e5b46e2a72779dadb42bb2dbe0f06c2413658f9 add mee


[root@server1 demo]# git reflog		#	更简洁的一种方式,用于版本回退
0cafe26 HEAD@{0}: commit: v5
2b9a5a5 HEAD@{1}: commit: v4
75a588c HEAD@{2}: commit: v3
fe24949 HEAD@{3}: commit: v2
4b3130d HEAD@{4}: commit: v1
9e5b46e HEAD@{5}: commit (initial): add mee

取消暂存的文件

[root@server1 demo]# touch ll
[root@server1 demo]# git add ll
[root@server1 demo]# git status -s
A  ll
[root@server1 demo]# git reset HEAD ll
[root@server1 demo]# git status -s
?? ll

撤消对文件的修改

[root@server1 demo]# echo dsdd >> lala
[root@server1 demo]# git status -s
 M lala
[root@server1 demo]# git checkout -- lala
[root@server1 demo]# git status -s
[root@server1 demo]# 

版本回退 当前我们有五个版本

[root@server1 demo]# git reflog
0cafe26 HEAD@{0}: commit: v5
2b9a5a5 HEAD@{1}: commit: v4
75a588c HEAD@{2}: commit: v3
fe24949 HEAD@{3}: commit: v2
4b3130d HEAD@{4}: commit: v1
9e5b46e HEAD@{5}: commit (initial): add mee
[root@server1 demo]# git reset --hard 2b9a5a5
HEAD is now at 2b9a5a5 v4		# 回退到v4版本
[root@server1 demo]# ls
env  mee		# 名字又改回来了
[root@server1 demo]# git reset --hard 75a588c
HEAD is now at 75a588c v3
[root@server1 demo]# ls
env  file  mee			# 删除的文件也回来了

同步仓库到github

登陆github 点击创建仓库:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我们选用ssh的方式进行通信连接,我们需要去做免密。

[root@server1 ~]# ssh-keygen 

[root@server1 ~]# cd .ssh/
[root@server1 .ssh]# ls
id_rsa  id_rsa.pub
[root@server1 .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmAgE5Gdy59NA+ToHl9/wfGcewiU7Lqfx2T3JvnH5aa1rIZ/NWQh8LFY1lp1Wk7wpJkk+uNT8RhB/yyEDDFOVTl+/8rB0OE8wXwU5YbgS+wwrPkUH/Vc3I9WKwQfEeQ8ELmoiKNCw7z/F9j/a8BI5UzdELcrntldVjPsYXFBlUdAMlnLtYrFL+NM6M9qELv1V+VMCpluUX3pqScphvNnA+m2zxIueJ9mwPlYjT/vSDg45ChDftfrMEueSn1a8jpL4RZIdCJcm1ddUPYzW4K2/Wz/39TtN7R98crEa73nudwC8/K+MqOVGWkmtakgfDfrbchZtqNE8OMUzRIp+PI//h root@server1

我们把这个公钥复制,然后进入github。
在这里插入图片描述
点击setting。
在这里插入图片描述
复制进去,点击add ssh key ,这时我们的server4主机就和github 免密了。
然后我们添加远程的 url 链接地址

[root@server1 demo]# git remote -v		# 查看远程地址
[root@server1 demo]# git remote add origin git@github.com:thermal-life/demo.git
[root@server1 demo]# git remote -v
origin	git@github.com:thermal-life/demo.git (fetch)
origin	git@github.com:thermal-life/demo.git (push)

然后推送到远程仓库
[root@server1 demo]# git push -u origin master		# 一次推送需要加 -u参数
The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
RSA key fingerprint is MD5:16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.229.188.59' (RSA) to the list of known hosts.
Counting objects: 13, done.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (13/13), 881 bytes | 0 bytes/s, done.
Total 13 (delta 0), reused 0 (delta 0)
To git@github.com:thermal-life/demo.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

在这里插入图片描述
然后我们的数据就上传上去了。这时候就算我们把本地的 仓库删除了也能从github上复制过来了

[root@server1 ~]# rm -fr demo/
[root@server1 ~]# git clone git@github.com:thermal-life/demo.git		# 克隆
Cloning into 'demo'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (7/7), done.
Receiving objects: 100% (13/13), done.
remote: Total 13 (delta 0), reused 13 (delta 0), pack-reused 0
[root@server1 ~]# ls
demo
[root@server1 ~]# ls demo/
file  mee

如果大家在访问github的时候很慢的话,我们还可以去国内的码云上进行使用,它就相当与国内版的github,速度是比较快的。可以在里面导入github的仓库进去。

gitlib 私有仓库搭建

在企业中,一般都有自己的私有仓库,不让外面的人访问。

我们现在去安装它:官方推荐要4G的内存。

# 这好似一些依赖性
[root@server1 ~]# yum install -y curl policycoreutils-python openssh-server
[root@server1 ~]# yum install gitlab-ce-12.9.7-ce.0.el7.x86_64.rpm -y		

# 这里面我们主要更改一个地址,让我们可以访问。
[root@server1 ~]# vim /etc/gitlab/gitlab.rb 
val.html
external_url 'http://172.25.254.1'

## Roles for multi-instance GitLab
[root@server1 ~]# gitlab-ctl reconfigure	#重载服务,每次更改配置文件执行一次,
它会自动帮我们部署一些服务,nginx,mysql等
[root@server1 ~]# gitlab-ctl status		# 查看状态
run: alertmanager: (pid 4966) 59s; run: log: (pid 4716) 114s
run: gitaly: (pid 4937) 62s; run: log: (pid 4170) 292s
run: gitlab-exporter: (pid 4930) 62s; run: log: (pid 4630) 132s
run: gitlab-workhorse: (pid 4903) 63s; run: log: (pid 4536) 156s
run: grafana: (pid 5068) 53s; run: log: (pid 4865) 77s
run: logrotate: (pid 4564) 148s; run: log: (pid 4579) 145s
run: nginx: (pid 4548) 154s; run: log: (pid 4556) 151s
run: node-exporter: (pid 4918) 63s; run: log: (pid 4613) 138s
run: postgres-exporter: (pid 4975) 59s; run: log: (pid 4785) 108s
run: postgresql: (pid 4285) 284s; run: log: (pid 4320) 281s
run: prometheus: (pid 4943) 61s; run: log: (pid 4677) 118s
run: redis: (pid 4122) 301s; run: log: (pid 4139) 298s
run: redis-exporter: (pid 4933) 62s; run: log: (pid 4647) 125s
run: sidekiq: (pid 4486) 166s; run: log: (pid 4499) 163s
run: unicorn: (pid 4456) 172s; run: log: (pid 4476) 171s

在这里插入图片描述
我们去浏览器访问,它的用户是:root 第一次登录需要强制修改密码:
在这里插入图片描述
登陆:

在这里插入图片描述
点击创建仓库:
在这里插入图片描述
勾上点击initialize初始化。
在这里插入图片描述
然后它让我们添加ssh的key。
我们把pub公钥添加进去:
在这里插入图片描述
我们还可以在里面设置中文。
在这里插入图片描述
我们也可以从这里克隆仓库到主机上:
在这里插入图片描述

[root@server1 ~]# rm -fr demo/		# 删除
[root@server1 ~]# git clone git@172.25.254.1:root/demo.git		# 克隆
Cloning into 'demo'...
The authenticity of host '172.25.254.1 (172.25.254.1)' can't be established.
ECDSA key fingerprint is SHA256:qOMOErxpsCoSEf84PDS7/jz5/5qq3yNjC77Zy6xHQxY.
ECDSA key fingerprint is MD5:09:6f:2b:3b:83:f5:5c:cd:b0:28:42:28:41:02:6c:2b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.254.1' (ECDSA) to the list of known hosts.
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@server1 ~]# ls
demo  gitlab-ce-12.9.7-ce.0.el7.x86_64.rpm  jenkins-2.237-1.1.noarch.rpm
[root@server1 ~]# cd demo/
[root@server1 demo]# git remote -v
origin	git@172.25.254.1:root/demo.git (fetch)
origin	git@172.25.254.1:root/demo.git (push)		# 这时把我们的服务器信息指向了我们的私有仓库。


[root@server1 demo]#  vim index.html		# 新建一个文件
[root@server1 demo]# cat index.html 
www.caoaoyuan.org
[root@server1 demo]# git add index.html
[root@server1 demo]# git commit  -m "add index.html"
[master c77e775] add index.html
 1 file changed, 1 insertion(+)
 create mode 100644 index.html
[root@server1 demo]# git push -u origin master

在这里插入图片描述
就传上去了。就可以用来作为企业私有的代码库了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值