git与gitlab的安装与使用

1、起步


1.1 起步 - 关于版本控制

	什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。
	
	集中化的版本控制系统
	如何让在不同系统上的开发者协同工作? 于是,集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。
	集中化的版本控制.
这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。 现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

	事分两面,有好有坏。 这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
	分布式版本控制系统
于是分布式版本控制系统(Distributed Version Control System,简称 DVCS)面世了。 在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
	
	分布式版本控制.
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
	如果你希望后面的学习更顺利,记住下面这些关于 Git 的概念。 Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
	基本的 Git 工作流程如下:
	1、在工作目录中修改文件。
	2、暂存文件,将文件的快照放入暂存区域。
	3、提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
	如果 Git 目录中保存着特定版本的文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。 在Git 基础一章,你会进一步了解这些状态的细节,并学会如何根据文件状态实施后续操作,以及怎样跳过暂存直接提交。
  • 安装
在 Linux 上安装
[root@gitlab ]# yum install git -y
在 Mac 上安装
如果你想安装更新的版本,可以使用二进制安装程序。 官方维护的 OSX Git 安装程序可以在 Git 官方网站下载,网址为 http://git-scm.com/download/mac。
"抖音创业史"带你了解git
第一阶段:抖音初始筹备

创建所需要的目录并进入
[root@gitlab ~]# mkdir dy
[root@gitlab ~]# cd dy/
[root@gitlab dy]# git init
Reinitialized existing Git repository in /root/dy/.git/
[root@gitlab dy]# ll -a
total 4
drwxr-xr-x  3 root root 131 Nov 11 15:07 .
dr-xr-x---. 4 root root 191 Nov 11 17:37 ..
drwxr-xr-x  8 root root 183 Nov 11 18:40 .git
[root@gitlab dy]# tree .git/
[root@gitlab dy]# vim index.html

[root@gitlab dy]# git commit -m "第一次代码ok"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   index.html
#
no changes added to commit (use "git add" and/or "git commit -a")
注:执行上面新增的文件和修改过后的文件都是红色
#---------->> 红色变绿色  <<---------
[root@gitlab dy]# git add .
[root@gitlab dy]# git status 
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   index.html
[root@gitlab dy]# 

#---------->> 个人信息配置  <<---------
个人信息配置:用户名、邮箱 【一次即可】
 git config --global user.email "oldxu@qq.com"  
 git config --global user.name "oldxu"

#---------->>   生成版本    <<---------
[root@gitlab dy]# git commit -m "抖音初创页面书写10%"
[master 9728ec2] 抖音初创页面书写10%
 1 file changed, 1 insertion(+)

#---------->> 查看版本记录 <<---------
[root@gitlab dy]# git log 
commit 9728ec29ee9065226be860e84ed2bf81c2f3dd3a
commit 9728ec29ee9065226be860e84ed2bf81c2f3dd3a
Author: oldxu <oldxu@qq.com>
Date:   Mon Nov 11 18:53:26 2019 +0800

    抖音初创页面书写10%

第二阶段:
2.1抖音新功能拓展

---- 增加短视频业务 ----
[root@gitlab dy]# cat index.html 
<h1>老王新代码01</h1>
<h1>老王新代码01--新增加短视频功能--</h1>

[root@gitlab dy]# git add .
[root@gitlab dy]# git commit -m "新增加短视频功能"
[master a3fea13] 新增加短视频功能
 1 file changed, 1 insertion(+), 5 deletions(-)
[root@gitlab dy]# git log 
commit a3fea13335a4b4c0f2225c9c78422107294a2b8f
Author: oldxu <oldxu@qq.com>
Date:   Mon Nov 11 19:03:03 2019 +0800

    新增加短视频功能

commit 9728ec29ee9065226be860e84ed2bf81c2f3dd3a
Author: oldxu <oldxu@qq.com>
Date:   Mon Nov 11 18:53:26 2019 +0800

    抖音初创页面书写10%
2.2 “约饭事件”

做为一个程序员---^^---对象晚上约你吃饭?然后……刚好代码出现了BUG?怎么办呢???为了撩妹,老王教你一招…………

---- 回滚之前的版本----
[root@gitlab dy]# git log 
commit a3fea13335a4b4c0f2225c9c78422107294a2b8f
Author: oldxu <oldxu@qq.com>
Date:   Mon Nov 11 19:03:03 2019 +0800

    新增加短视频功能

commit 9728ec29ee9065226be860e84ed2bf81c2f3dd3a
Author: oldxu <oldxu@qq.com>
Date:   Mon Nov 11 18:53:26 2019 +0800

    抖音初创页面书写10%

---- 回滚之后的版本(俗称代码回退)----
[root@gitlab dy]# git reflog 
a3fea13 HEAD@{0}: commit: 新增加短视频功能
9728ec2 HEAD@{1}: commit: 抖音初创页面书写10%
[root@gitlab dy]# git reset --hard 9728ec2    #git reset --hard (要会退的版本号)
HEAD is now at 9728ec2 抖音初创页面书写10%
#检查一下是否回退成功
[root@gitlab dy]# git log 
commit 9728ec29ee9065226be860e84ed2bf81c2f3dd3a
Author: oldxu <oldxu@qq.com>
Date:   Mon Nov 11 18:53:26 2019 +0800

    抖音初创页面书写10%
#代码回退成功(可以去约妹子……各种……各种……)
  • 总结
git init #初始化一个目录为版本库
git add . #将没有被管理的文件加入git进程

管理
git commit 	#将内容提交到门版本库中
git log		#查看提交的历史记录
git reflog	#查看所有的历史提交记录
git reset --hard 版本号 #回退指定得提交的版本记录

2.3 商城紧急bug修复


  • 分支(可百度)
	分支可以给使用者提供多个环境使用,意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。在公司中一个项目由好多个开发来做,所以进行项目的分支必不可少。
	在实际的项目开发中,尽量保证master分支稳定,仅用于发布新版本,平时不要随便直接修改里面的数据文件。
	那在哪干活呢?干活都在dev分支上。每个人从dev分支创建自己个人分支,开发完合并到dev分支,最后dev分支合并到master分支。
	
#	****  查看分支  ****
[root@gitlab dy]# git branch 
  bug
* master
#	****  创建分支  ****
[root@gitlab dy]# git branch dev
[root@gitlab dy]# git branch 
  bug
  dev
* master

#	****  切换分支  ****
[root@gitlab dy]# git checkout dev 
Switched to branch 'dev'
[root@gitlab dy]# git branch 
  bug
* dev
  master
  
#	****  分支合并(可能产生冲突)  ****
#再进行前面的步骤git add .
[root@gitlab dy]# git merge
注意:切换分支再合并

#	****  删除分支  ****
[root@gitlab dy]# git branch -d dev 
Deleted branch dev (was 9728ec2).
[root@gitlab dy]# git branch 
  bug
* master

  • 紧急修复bug方案

    利用分支的创建切换与合并解决了这一难题,bug修复完毕再合并即可。

  • 在这里提出工作流的概念,请自行解读。

2.4进军三里屯

​ 当所有的业务推广完毕之后,有了钱,去三里屯买一层办公室。。。然后在公司写完代码,回家带电脑嫌太重,有没有一种方法既可以在公司写完代码以后保存,然后在家里电脑继续写上次代码呢?

首先要注册码云(国内免费代码托管平台)
	https://gitee.com
	在这里推的时候注意启动网卡,,,坑了半小时
	安装windows10软件,模拟两地场景使用
	首先,需要注册github账号,创建远程仓砗,然后再执行如下命令,将代
码上传到github。
	1.给远程仓库起别名
	git remote add origin 远程仓库地址
	2.向远程推送代码
	git push -u origin	分支
	
	
######---在公司下载完代码后,继续开发
1.切换到dev分支进行开发
git checkout dev
2.把master分支合并到dev [仅- -次]
git merge master
3.修改代码
4.提交代码
git add .
git commit -m "xx"
git push origin dev
下班回家继续写代码

1.切换到dev分支进行开发
git checkout dev
2.拉代码
git pu11 origin dev
3.继续开发
4.提交代码
git add
git commit -m 'xx'
git push origin dev

到公司继续开发

1.切换到dev分支进行开发
git checkout dev
2.拉最新代码(不必再clone,只需要通过pu11获取最新代码即可)
git pu11 origin dev
3.继续开发
4.提交代码
git add .
git commit -m‘ xx '
git push origin dev

开发完毕,要上线

1.将dev分支合并到master ,进行上线
git checkout master
git merge dev
git push origin master
2.把dev分支也推送到远程
git checkout dev
git merge master
git push origin dev 

约妹子,忘记提交代码

1.拉代码
git pu11 origin dev
2.继续开发
3.提交代码
git add .
git commit -m 'XX'

注:忘记push了

回家继续写代码

1.拉代码,把晚上在家写的代码拉到本地(有合并、可能产生冲突)
git pu11 origin dev
2.如果有冲突,手动解决冲突
3.继续开发其他功能
4.把dev分支也推送到远程
git add .
git commit -m 'xx'
git push origin dev
其他

git pu11 origin dev
等价于
git fetch origin
git merge origin/dev

小总结
●添加远程连接(别名)
	git remote add origin 地址
	git remote -V
●推送代码
	git push origin dev
●下载代码
	git clone	地址
●拉取代码
	git pu11 origin dev

	等价于
	git fetch origin dev
	git merge origin/dev
	记录图形展示
	git 1og --graph --pretty=format:"%h %s

git标签

1.git标签作什么用?当Git 仓库内的数据有改善或者功能更新时,我们经常
会打一个类似于软件版本号的标签tog ,这样通过标签就可以将版本库中的
某次commit给记录下来,便于我们后续将特定时期的数据取出来用。简单
来说:标签也是版本库的一个快照。
2.为什么要使用git标签? Git 有commit ,为什么还要引入tag ?"请把上周一
的那个版本打包发布, commit号是6a581...", "- -串乱七八糟的数字不好
找!”如果换一个办法:
“请把上周一-的那个版本打包发布,版本号是v1.2"。按照tag v1.2查找
commit就行!”所以, tag就是一个让人 容易记住的名字,它跟某1commit
绑在一起。

3.git标签基本使用1、对当前最新提交的代码创建标签, -a标签名称, -m标
签描述
#1. 将当前最新代码进行标签
[root@gitlab demo]# git tag -a "v1.1" -m "描述信息"

#2. 创建标签,指定commitID
[root@gitlab demo]# git tag -a v1.0.1 30e2840 -m
"Messages "
2、如何查看刚才打的标签。
[root@gitlab demo]# git tag	#git 1og -1
v1.0.0
v1.0.1

gitlab的使用及其安装配置

1.Gitlab版本库基本概述
  1.什么是gitlab?

2.gitlab与github的不同?
  3.为什么使用gitlab优势和使用场景?
2.Gitlab服务组成?
3.gitlab安装配置?
  1.安装gitlab
  2.配置gitlab访问域名
  3.配置gitlab邮箱信息
4.gitlab中文汉化?
5.gitlab日常使用?
  1.Gitlab中的用户、用户组、项目仓库之间的关系?
  2.创建组、创建用户、创建项目?
  3.验证用户、组、项目的相关权限?
  3.如何将本地的本数据推送至gitlab的仓库? http方式、ssh方式?
  4.如果有新成员需要加入该项目该怎么办?
6.gitlab运维,如何备份、恢复、升级?

  1. gitlab介绍: 代码托管仓库,和gitee github 等等

2.gitlab与github区别

github针对私有仓库收费,国外 卡 ( 开源项目 )

gitlab自建自行维护, 创建公开仓库和私有仓库 (公司使用)

小型团队: 国内 码云 创建私有仓库

离线同步 分支管理 权限管理

2.gitlab安装

1.依赖环境

yum install -y curl openssh-server postfix wget

2.gitlab安装

yum localinstall gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm 

2.1 配置gitlab的url

vim /etc/gitlab/gitlab.rb

external_url 'http://gitlab.oldxu.com'

2.2 配置gitlab的邮箱

gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = "123@qq.com"  # 发件邮箱
gitlab_rails['gitlab_email_display_name'] = 'OldXu-GitLab' # 发件人显示名称

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "123@qq.com" #发件人邮箱账户
gitlab_rails['smtp_password'] = ""  #发件人邮箱客户端授权码
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

2.3关闭不用的程序

#关闭或不关闭不重要,取决于你的内存

1385 prometheus['enable'] = false
1474 node_exporter['enable'] = fals
1493 redis_exporter['enable'] = false
1511 postgres_exporter['enable'] = false
1560 grafana['enable'] = false

2.4 gitlab初始化

#第一次初始化时间较长,后期修改配置文件也需要初始化

[root@git ~]# gitlab-ctl reconfigure
[root@git ~]# gitlab-ctl status
[root@git ~]# gitlab-ctl start
[root@git ~]# gitlab-ctl stop
[root@git ~]# gitlab-ctl restart
[root@git ~]# gitlab-ctl stop nginx

2.5 访问gitlab服务

1573527203762

1573527263759

2.6 验证邮箱功能是否可用

5.重新初始化后检查gitlab邮箱是否可正常使用

[root@gitlab ~]# gitlab-rails console
Notify.test_email('接收方邮件地址','邮件标题','邮件内容').deliver_now

Notify.test_email('552408925@qq.com','gitlab-test','测试').deliver_now

1573527431183

3.gitlab汉化

1.原生汉化,但不全

1573528793027

2.第三方的汉化补丁包 https://gitlab.com/xhang/gitlab

gitlab-ctl stop
\cp -r gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/

gitlab-ctl reconfigure
gitlab-ctl start

4.gitlab日常使用

1.Gitlab中的用户、用户组、项目仓库之间的关系?
  2.创建组、创建用户、创建项目?
  3.验证用户、组、项目的相关权限?
  3.如何将本地的本数据推送至gitlab的仓库? http方式、ssh方式?
  4.如果有新成员需要加入该项目该怎么办?

1.如何导入已有项目

2.项目 用户 用户组 关系?

​ 先建组,再建立项目,然后建立用户

1.基于组创建项目
2.创建两个用户 linux windows 加入dev组 , 分配权限 linux是所有者 windows是开发
3.使用linux系统关联linux用户,克隆项目,然后分别往master或dev分支提交代码测试
4.使用windows系统关联windows用户,克隆项目
尝试修改dev分支内容,测试提交。
尝试修改master分支内容。,尝试提交,如果不行
1.尝试发起合并请求由linux用户审批,检查合并后的效果
2.直接关闭该项目的分支保护,然后再次测试。

A B用户

用户权限

1.git修改为ssh连接方式

[root@git gdx]# git remote -v
origin	http://gitlab.oldxu.com/dev/gdx.git (fetch)
origin	http://gitlab.oldxu.com/dev/gdx.git (push)

[root@git gdx]# git remote remove origin 
[root@git gdx]# git remote add origin git@gitlab.oldxu.com:dev/gdx.git

[root@git gdx]# git remote -v
origin	git@gitlab.oldxu.com:dev/gdx.git (fetch)
origin	git@gitlab.oldxu.com:dev/gdx.git (push)

2.gitlab备份

gitlab备份非常简单,就一条命令

gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 604800



gitlab-ctl reconfigure

执行备份命令,( 如果希望每天执行,使用shell脚本或定时任务都ok )

gitlab-rake gitlab:backup:create


默认路径
[root@git ~]# ls /var/opt/gitlab/backups/
1573549930_2019_11_12_12.0.3_gitlab_backup.tar

3.gitlab恢复

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

通过gitlab-rake命令进行恢复,恢复时需要指定此前备份的名称 (但不需要写git_lab_backup.tar后缀)

gitlab-rake gitlab:backup:restore BACKUP=1573549930_2019_11_12_12.0.3

最后启动所有gitlab的组件

gitlab-ctl start

4.gitlab升级

不要跨越大版本

12.0.3 --> 12.1.xx

12.1汉化包

5.gitlab迁移

https://www.xuliangwei.com/bgx/803.html#toc_4

5.gitlab总结

  • 1.gitlab介绍
  • 2.gitlab安装
  • 3.gitlab配置
    • 1.邮箱
    • 2.域名
    • 3.关闭没用服务(不需要)
  • 4.gitlab汉化
  • 5.gitlagb基本使用
    • 1.用户和用户组以及权限的关系?
    • 2.演示用户和用户组权限配置 ?
  • 6.gitlab备份
  • 7.gitlab恢复
  • 8.作业: gitlab升级 迁移
  • 9.扩展:
    • 1.gitlab中请求合并 (合并实现的几种方式)
    • 2.gitlab分支保护机制(调整分支保护机制)
    • 3.gitlab关闭主页面的注册功能 (因为默认注册即可登录)
    • 4.gitlab免密方式
      • http方式: 需要频繁输入密码 不是太方便
      • ssh方式: 将系统的公钥放置对应用户ssh下,即可实现免密登录。
    • 5.gitlab修改备份路径 (自行完成) /data/gitlab/backups
posted @   老王教你学Linux  阅读(781)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示