【Git版本控制】以及搭建gitlab服务

目录

  • 一、Git介绍
  • 二、Git安装与全局配置
    • 1、git的全局配置:
    • 2、为常用的指令配置别名:
    • 3、Git初始化本地代码仓库
    • 4、Git的基础命令
  • 三、分支
  • 四、Git远程仓库
    • 1、操作远程仓库
    • 2、从远程仓库克隆
    • 3、从远程仓库中抓取和拉取
  • 五、Gitlab sever部署
    • 期间出现遇到的问题:
  • 六、Gitlab使用

一、Git介绍

Git是一个免费、开源的分布式版本控制系统,它因其速度快、灵活性高和强大的分支管理能力而广受欢迎。分布式版本控制系统中,每个开发者都拥有完整的代码仓库,包含完整的历史记录。开发者可以在本地进行版本控制操作,不需要始终依赖中央服务器。

二、Git安装与全局配置

git的下载:https://git-scm.com/download
我用的redhat系统:yum install git -y

1、git的全局配置:

[root@redhat GitStudy]# git config --global user.name "xiaogang"     #配置git使用用户
[root@redhat GitStudy]# git config --global user.email "123@qq.com"      #配置git使用邮箱
[root@redhat GitStudy]# git config --global color.ui true   #配置语法高亮
[root@redhat GitStudy]# git config --list     #列出刚刚配置的内容
user.name=xiaogang
user.email=123@qq.com
color.ui=true
core.repositoryform

2、为常用的指令配置别名:

1、在用户目录创建.bashrc文件
输入的内容是:

#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

3、Git初始化本地代码仓库

[root@redhat ~]# mkdir GitStudy      #创建一个空目录
[root@redhat ~]# cd GitStudy/
[root@redhat GitStudy]# git init    #初始化git
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:

4、Git的基础命令

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
在这里插入图片描述

常用命令:

 - git status【文件名或者通配符】 #查看修改的状态- git add                    #工作区提交项目到暂存区- git commit 【-m 注释信息】   #暂存区提交项目到本地仓库- git log					  #显示提交到仓库的记录- git push                   #本地仓库提交项目到远程仓库- git rm                     #从Git的暂存区域移除文件、在工作区中将被跟踪文件删除- git reset HEAD             #取消已经暂存的文件,将其转换回未暂存的状态- git reset --hard 3de15d4   #将当前分支的HEAD指向commit哈希值为3de15d4的提交,并且重置Staging Area和工作目录,将它们恢复到该提交时的状态,恢复指定版本  **- git reflog				  #查看删除的提交记录- git clone                  #远程仓库拉取到本地仓库- git pull                   #远程仓库中的代码更新到本地

git log命令详解:
作用:查看提交记录
命令形式: git log [option]
options:

  • –all显示所有分支
  • –pretty=oneline将提交信息显示为一行
  • –abbrev-commit使得输出的commitld更简短Ⅰ–graph 以图的形式显示
  • –graph 以图的形式显示

alias git-log=‘git log --pretty=oneline --all --graph --abbrev-commit’ 上面的配置就是这个意思

在某些情况下,有一个文件我不想让他被git管理,输入文件名的形式有很麻烦,这个时候可以通过在这个仓库创建一个 .gitignore 文件,并在里面写上你不需要被管理的文件或者通配符。

三、分支

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

 - git branch				  #查看本地分支- git branch 分支名           #创建本地分支- git checkout	 分支名		  #切换分支   加-b参数,为创建并切换- git merge 分支名称		  #合并分支- git branch -d b1			  #删除分支时,需要做各种检查- git branch -D b1			  #不做任何检查,强制删除

冲突问题是在两个人修改了同一文件,合并到一条线时自己决定咋修改。

四、Git远程仓库

可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab(企业常用,需要自己搭建)等。
1、gitHub (地址: https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名github。
2、码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快。
3、GitLab(地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。

在这里以码云为例:
1、注册码云
2、创建仓库
在这里插入图片描述
3、配置ssh公钥
[root@redhat ~]# ssh-keygen -t rsa
然后不断回车
获取公钥:[root@redhat ~]# cat ~/.ssh/id_rsa.pub
在这里插入图片描述
4、验证是否配置成功:
[root@redhat ~]# ssh -T git@gitee.com (好像不要-T也行)

1、操作远程仓库

命令: git remote add<远端名称><仓库路径>
。远端名称,默认是origin,取决于远端服务器设置
。仓库路径,从远端服务器获取此URL
。例如: [root@redhat GitStudy]# git remote add origin git@gitee.com:xiao-/git_test.git 【去自己的仓库里获取】

git remote ----->查看远程仓库

推送到远程仓库:
命令: git push [–set-upstream][远端名称[本地分支名][:远端分支名]]
例如:git push origin master

–set-upstream推送到远端的同时并且建立起和远端分支的关联关系。–》git push --set-upstream origin master

如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
git push将master分支推送到已关联的远端分支。

[root@redhat GitStudy]# git push --set-upstream origin master   由于在本地和远程仓库建立了分支关系,后面只需要git push就行

查看本地分支与远程分支之间的关系 ----》 git branch -vv

2、从远程仓库克隆

如果已经有一个远端仓库,我们可以直接clone到本地。
命令: git clone<仓库路径>[本地目录]
-----------》本地目录可以省略,会自动生成一个目录

3、从远程仓库中抓取和拉取

远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

  • 抓取命令: git fetch [remote name] [branch name](抓取指令就是将仓库里的更新都抓取到本地,不会进行合并。如果不指定远端名称和分支名,则抓取所有分支)
  • 拉取命令: git pull [remote name] [branch name](拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge。如果不指定远端名称和分支名,则抓取所有并更新当前分支)

五、Gitlab sever部署

环境:redhat:9

搭建gitlab的时候内存尽量需要大一点,内存最好4个G以上
1、安装Gitlab依赖包

yum install -y curl policycoreutils-python-utils openssh-server perl

可选)下一步,安装 Postfix 以发送电子邮件通知

yum install postfix
systemctl start postfix

2、添加镜像源
国内使用清华源镜像:

[root@localhost ~]# vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
[root@localhost ~]# yum makecache

3、安装Gitlab

[root@redhat ~]# yum install gitlab-ce
安装历史版本:
[root@redhat ~]# yum install -y gitlab-ce-{VERSION}  

4、gitlab的配置
[root@redhat ~]# vim /etc/gitlab/gitlab.rb
external_url ‘http://gitlab.example.com/’ -----》修改自己的主机
external_url ‘http://192.168.85.128’
#用户访问所使用的URL,域名或者IP地址

5、初始化gitlab

[root@redhat ~]# gitlab-ctl reconfigure
第一次使用配置时间较长

6、启动gitlab服务

[root@redhat ~]# gitlab-ctl start
[root@redhat ~]# lsof -i:80  ---》可查看80端口有无被占用,安装
lsof

如果在这个期间出现了“Error executing action run on resource 'execute[semodule -i /opt/gitlab/”这种selinux的错误。
解决方法是
cd /opt/gitlab/embedded/cookbooks/gitlab/recipes找到selinux.rb文件吧关于gtlab的一些文件注释掉。
详细去看:https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/501
7、Gitlab的额外配置
一、gitlab设置https的方式:
如果想要以上的https方式正常生效使用,则需要把letsencrypt自动生成证书的配置打开,这样在执行重新让配置生效命令(gitlab-ctl reconfigure)的时候会自动给域名生成免费的证书并自动在gitlab自带的nginx中加上相关的跳转配置,都是全自动的,非常方便。

[root@redhat ~]# vim /etc/gitlab/gitlab.rb 
letsencrypt['enable'] = true
letsencrypt['contact_emails'] = ['30423@qq.com']  #添加联系人的邮件地址

二、Gitlab添加smtp邮件功能
前提的安装yum install postfix

gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '309121@qq.com'   #自己的qq邮箱
gitlab_rails['gitlab_email_display_name'] = 'gitlab'   #发送的名字
gitlab_rails['gitlab_email_reply_to'] = '3090423121@qq.com'
gitlab_rails['gitlab_email_subject_suffix'] = '[gitlab]'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "3090423121@qq.com"
gitlab_rails['smtp_password'] = "smtp password" -----》#这是qq邮箱的授权码
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

邮箱的授权码获取:
在这里插入图片描述

期间出现遇到的问题:

在这里我出现了第一个问题:
There was an error running gitlab-ctl reconfigure:  gitlab_rails['smtp_tls'] and gitlab_rails['smtp_enable_starttls_auto'] are mutually exclusive. Set one of them to false. SMTP providers usually use port 465 for TLS and port 587 for STARTTLS.

解决方法:
Gitlab 15.10 版本后smtp_enable_starttls_auto 设置为 false 后,重启 gitlab 服务.

这里我出现了第二个问题:
There was an error running gitlab-ctl reconfigure:  letsencrypt_certificate[192.168.85.128] (letsencrypt::http_authorization line 6) had an error: Acme::Client::Error::RejectedIdentifier: acme_certificate[staging] (letsencrypt::http_authorization line 43) had an error: Acme::Client::Error::RejectedIdentifier: Error creating new order :: Cannot issue for "192.168.85.128": The ACME server can not issue a certificate for an IP address

解决方法:
letsencrypt[‘enable’] = false 出现这个问题是我配的https的传输方式,所以改成false
https的加密传输弄好:
在这里插入图片描述
发送邮箱测试:

[root@redhat ~]# gitlab-rails console
irb(main):004:0> Notify.test_email('3091@qq.com','Message Subject','Hello, kazihuo !').deliver_now

邮箱测试成功:
在这里插入图片描述

六、Gitlab使用

在浏览器中输入http://192.168.60.119/,然后change password:,并使用root用户登录即可(后续动作根据提示操作)。
1、Gitlab命令行修改密码(重置管理员的密码)

GitLab 版本不同,命令会有所不同(网上说的而基本都是gitlab-rails console production ),推荐大家直接上 GitLab 官网去找对应版本的命令.
[root@redhat ~]# gitlab-rails console -e production
--------------------------------------------------------------------------------Ruby:         ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux]GitLab:       16.8.0 (16896fceb7a) FOSSGitLab Shell: 14.32.0PostgreSQL:   14.9
------------------------------------------------------------[ booted in 75.66s ]
Loading production environment (Rails 7.0.8)
irb(main):001:0> user = User.where(id: 1).first
=> #<User id:1 @root>
irb(main):002:0> user.password = '177230637gang'
=> "17723063738gang"
irb(main):003:0> user.password_confirmation = '177230637gang'  #确认密码
=> "17723063738gang"
irb(main):004:0> user.save!
=> true
(密码必须是8位以上,并且有字母数字组合)
账户:root
密码:自己设置的

gitlab-ctl tail ----》 查看日志

在这里插入图片描述
搭建成功!
docker搭建gitlab :https://blog.csdn.net/BThinker/article/details/124097795,可以看看别人的博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/652832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫demo——爬取历史平均房价

简单爬取历史房价 需求 爬取的网站汇聚数据的城市房价 https://fangjia.gotohui.com/ 功能 选择城市 https://fangjia.gotohui.com/fjdata-3 需要爬取年份的数据&#xff0c;等等 https://fangjia.gotohui.com/years/3/2018/ 使用bs4模块 使用bs4模块快速定义需要爬取的…

python asyncio异步编程

一、协程 协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。 对于协程而言,并不是计算机所提供的,计算机所提供的只有进程和线程、而协程则是通过程序员人为所创造的。我们通常将协程称为微线…

javaScript的书写位置

javascript的书写位置有哪些呢&#xff1f;有什么注意事项吗&#xff1f;让我为大家介绍一下吧&#xff01; 1.内部 注意&#xff1a;书写位置尽量写到文档末尾</ body>的前面 在我们内部书写JS的时候 <!DOCTYPE html> <html lang"en"> <hea…

有趣的数学 了解TensorFlow的自动微分的实现

一、简述 这里主要介绍了TensorFlow的自动微分(autodiff)功能如何工作,以及与其他解决方案的比较。假设您定义了一个函数,并且需要计算它的偏导数和,通常用于执行梯度下降(或某些其他优化算法)。可用的主要选择是手动微分、有限差分近似、正向模式自动微分和反向模式自动…

ETCD高可用架构涉及常用功能整理

ETCD高可用架构涉及常用功能整理 1. etcd的高可用系统架构和相关组件1.1 Quorum机制1.2 Raft协议 2. etcd的核心参数2.1 常规配置2.2 特殊优化配置2.2.1 强行拉起新集群 --force-new-cluster2.2.2 兼容磁盘io性能差2.2.3 etcd存储quota 3. etcd常用命令3.1 常用基础命令3.1.1 列…

Java 数据结构篇-深入了解排序算法(动态图 + 实现七种基本排序算法)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 实现冒泡排序 2.0 实现选择排序 2.1 选择排序的改良升级 3.0 实现堆排序 4.0 实现插入排序 5.0 实现希尔排序 6.0 实现归并排序 6.1 递归实现归并排序 6.2 使用…

HarmonyOS鸿蒙学习基础篇 - 通用事件

一、引言 HarmonyOS鸿蒙是华为推出的分布式操作系统&#xff0c;旨在为各种智能设备提供统一的操作系统。鸿蒙系统的一大特色是其强大的分布式能力&#xff0c;而通用事件则是实现这一能力的关键技术之一&#xff0c;本篇博客将介绍HarmonyOS鸿蒙中的通用事件。 二、 点击事件…

STM32-LwESP 移植

LwESP 是一个专门解析 Espressif 公司旗下 ESP 系列芯片 AT 指令的开源库&#xff0c;具有以下特性&#xff1a; 支持 Espressif 公司 ESP32, ESP32-C2, ESP32-C3, ESP32-C6 和 ESP8266 芯片。独立平台&#xff0c;采用 C99 标准编写&#xff0c;易于移植。允许不同的配置来优…

通讯录项目(终)

Start And Stick 上一期我们将通讯录的项目的基本功能已经实现&#xff0c;这一篇文章我们将对通讯录进行完善。 目录 Start And Stick 上期回顾&#xff1a; 上期必要代码&#xff1a; 数据打印&#xff1a; 代码讲解&#xff1a; 头部插入数据&#xff1a; 代码讲解&…

【Linux】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 Linux 目录&#xff1a; &#xff08;一&#xff09;CentOS 7 安装&配置Python

深入理解MySQL中的范围访问方法:单索引与多索引优化策略

深入理解MySQL中的范围访问方法&#xff1a;单索引与多索引优化策略 范围查询方法是数据库查询优化的一种重要手段&#xff0c;它通过利用索引来减少需要检查的数据行数&#xff0c;从而提高查询的执行效率。 范围查询使用单个索引来检索表中包含在一个或多个索引值区间内的子…

CSS 多色正方形上升

<template><view class="loop cubes"><view class="item cubes"></view> <!-- 方块1 --><view class="item cubes"></view> <!-- 方块2 --><view class="item cubes"></vie…

896.单调数列(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 如果数组是单调递增或单调递减的&#xff0c;那么它是 单调 的。 如果对于所有 i < j&#xff0c;nums[i] < nums[j]&#xff0c;那么数组 nums 是单调递增的。 如…

day23 其他事件(页面加载事件、页面滚动事件)

目录 页面加载事件页面/元素滚动事件页面滚动事件——获取位置 页面加载事件 加载外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件为什么使用&#xff1a; 有时候需要等页面资源全部处理完毕再做一些事老代码喜欢把script写在head中&…

Midjourney图片生成描述词记录(今天一天)

抄别人的描述词 /imagine prompt:https://&#xff08;你的图片地址&#xff09;.jpg Super handsome boy IP by pop mart , green suit, no hair, bald head, Scenes in spring , pastel color , mockup , fine luster , clean background ,3D render , Soft focus , oc , bl…

NodeJS Express在线人数统计

NodeJS开发中&#xff0c;要在Express中实现一个在线人数统计系统&#xff0c;可以用下面的思路&#xff1a; 数据结构: 使用一个对象来存储每个 IP 地址的最后访问时间。 当有请求到来时: 1、检查该 IP 地址是否已存在于对象中。 2、如果存在&#xff0c;更新其访问时间。…

20.2K Star,一个简洁美观、易用的云盘系统

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 现在的网盘动不动就限速&#xff0c;涨价&#xff0c;非常不爽&#x…

如何“做好冲突管理”?

一、工作实际案例 产品经理在主导跨部门需求项目时&#xff0c;项目在验收阶段&#xff0c;产品经理与业务人员完成初步验收&#xff0c;接下来需要开发同学解决验收问题。 开发小组长反馈&#xff1a;经开发内部评估&#xff0c;按当前项目排期&#xff0c;因上线时间紧张&a…

linux如下显示目录和子目录的树形结构

目 录 一、需求 二、解决方法 三、tree工具的安装 1. centos中安装tree 2&#xff0c;在Ubuntu系统中安装tree 3&#xff0c;使用源码编译安装 四、tree的语法 1、语法 2、常用选项 一、需求 应用程序的目录中包含一些子目录&#xff0c;目录嵌套很多&am…

10个必学的Python编程小技巧

10个必学的Python编程小技巧 一、列表推导式&#xff08;List Comprehension&#xff09;二、生成器表达式&#xff08;Generator Expression&#xff09;三、使用enumerate()遍历列表四、使用zip()同时遍历两个列表五、使用setattr()和getattr()动态操作对象属性六、使用with语…