devops-gitlab

介绍

gitlab同github、gitee和bitbucket功能一致,都是提供一个存储代码的服务,这里就以gitlab为例,学习一下如何结合git工具使用。

运行一个gitlab

有很多方法可以运行gitlab服务,可以直接在Ubuntu或centos等linux主机中运行,或者使用docker启动,再或者使用helm chart方式运行在k8s中,具体可以参考官方文档:https://gitlab.cn/install/

我这里使用docker运行,用于poc或者测试环境,没有冗余功能。

export GITLAB_HOME=/srv/gitlab
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 4443:443 --publish 880:80 --publish 222:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
--shm-size 256m \
registry.gitlab.cn/omnibus/gitlab-jh:latest

--shm-size 256m:指定此容器shm共享内存为256m,默认为64m。

因为修改了默认ssh和http的端口,所以容器启动后要在配置文件中重新修改并生效一下:

# docker exec -it gitlab /bin/bash
# vi /etc/gitlab/gitlab.rb
...
external_url "http://gitlab.example.com:880" # 外部的访问地址及端口
gitlab_rails['gitlab_shell_ssh_port'] = 222
nginx['listen_port'] = 80 # 指的container内部的端口,这个必须指定,不指定会继承上边的880.
...
# gitlab-ctl reconfigure

notice:这里只启用了http,若要启用https,还要手动将其打开。

做个hosts解析,然后访问http://gitlab.example.com:880来登录web页。

用户名为root,密码用以下方法查看:

sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

此文件24h后会变删除,登录成功后,尽快修改密码。

创建群组、项目

创建群组:

根据需求写上自己群组的名称,选择是私有群组、内部群组还是共有群组,自己定义即可。

群组创建完毕后,默认只有创建者自己,后续可以添加新用户到群组。

我这里测试群组为MyTeam。

创建新用户:

填写用户信息及权限设置即可,例如devzhang。

将新用户加入群组,一起来为我们的Team做贡献:

加入此群组后,就可以创建基于此群组的项目。

开始创建项目:

需要注意的是,创建项目时要选定是属于哪个群组或者哪个个人的。

再就是注意可见性级别,有私有、内部和公开三种。

我这里创建了一个名为myint的内部项目,使用的gitlab自带的项目模板,如下:

开始使用git来管理gitlab

Git 是一个快速、可扩展的分布式版本控制系统,具有异常丰富的命令集,可提供高级操作和对内部的完全访问。Git 易于学习,占用空间小,性能快如闪电。它超越了SCM工具,如Subversion,CVS,Perforce和ClearCase,具有廉价的本地分支,方便的暂存区域多个工作流程等功能。

git工作流程

首先,git分为三个区域,分别是:

  1. 工作区(working directory)就是上图黄色部分,就是我们实际修改代码做操作的区域
  2. 暂存区(stage index)就是上图标注index的桶装部分,代码完成编辑后,会先将代码添加到缓存区
  3. 历史记录区(history)就是记录操作的历史记录或版本的

其次,git有两个仓库,既远程仓库和本地仓库:

  1. 远程仓库:上图的remote部分,就是远程存储代码的仓库,例如咱们这里的gitlab
  2. 本地仓库:上图的repository部分,就是.git目录,通过本地修改代码后,一般都会先提交到本地,再push到远程仓库

常用操作演示

  1. 首先初始化git,生成.git本地目录
# git init
Initialized empty Git repository in /opt/gitlab/.git/

会在当前目录下生成.git文件

  1. 添加、查看远程仓库
# git remote add origin http://gitlab.example.com:880
# git remote show
  1. 拷贝远程仓库项目到本地
# git clone http://gitlab.example.com:880/vfan/mypublic.git
# ls
mypublic
# ls mypublic
README.md
  1. 修改项目文件内容,提交到暂存区
# git add .
# git status
modified: README.md

git add . --> 把当前目录下所有更改,添加到暂存区。

git add -a --> 把当前项目下所有更改,添加到暂存区。

git add xxx.sh xxx.py --> 添加指定文件到暂存区。

  1. 将修改变提交到本地仓库
# git commit -m "test modify readme.md"

*** 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@iZ2ze20w5xm11rfza1h8ejZ.(none)')

报错是因为,安装git后,要设置下你的邮箱地址和用户名,才可以commit,执行:

# git config --global user.email "vfan@163.com"
# git config --global user.name "vfan"

重新commit即可:

# git commit -m "test modify readme.md"
[main 8cc5b90] test modify readme.md
1 file changed, 5 insertions(+), 92 deletions(-)
rewrite README.md (99%)
  1. 推送至远程仓库
# git push -u origin main
Username for 'http://gitlab.example.com:880': vfan
Password for 'http://vfan@gitlab.example.com:880':
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 297 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://gitlab.example.com:880/vfan/mypublic.git
52bc770..8cc5b90 main -> main
Branch main set up to track remote branch main from origin.

第一次推时需要用-u参数关联上仓库,后边再推直接git push即可。

如果觉得每次都要输入账号密码很麻烦,可以将账号密码直接储存:

# git config --global credential.helper store

## 实际会将配置保存到此文件中
# cat ~/.gitconfig
[user]
email = vfan@163.com
name = vfan
[credential]
helper = store

这个时候,再次push,输入账号密码后,系统就会记住,以后便不用再输入。

  1. 代码撤销和撤销同步

已经修改文件,但还未添加到暂存区

# git diff README.md
diff --git a/README.md b/README.md
index 074b4a5..3d82a16 100644
--- a/README.md
+++ b/README.md
@@ -4,4 +4,4 @@ test add commit push ... -one two three four
+one two three four five

git diff xxx.md --> 列出某文件的修改,不指定文件为列出全部文件修改。

撤销修改(将工作区的状态修改为与暂存区一致)

# git checkout README.md

# git clean -f
# git clean -df

git checkout . --> 撤销当前目录下所有文件的修改

git checkout --> 撤销当前项目下所有文件修改

git clean -f --> 撤销新增加的文件

git clean -df --> 撤销新增加的文件和文件夹

当文件修改已添加到暂存区,但还未提交时,就不能再使用git diff,因为此命令是对比工作区和暂存区的差异,这时就要加参数--cache:

# git diff --cached
diff --git a/README.md b/README.md
index 074b4a5..3d82a16 100644
--- a/README.md
+++ b/README.md
@@ -4,4 +4,4 @@ test add commit push ... -one two three four
+one two three four five

再次撤销修改(暂存区的修改恢复到工作区):

# git reset README.md
Unstaged changes after reset:
M README.md

git reset --soft --> 等价于git reset

git reset --head --> 回到未修改状态,清空暂存区和工作区的修改

当文件已提交,还未push到远端仓库时,执行完commit后,会在仓库中生成一个版本号(hash值),之后任何时候,都可以借助这个hash值回退到这次提交:

# git diff main origin/main --> 本地main分支和远程仓库main分支对比
# git diff dev master --> 本地dev分支和master分支对比
# git reset --hard HEAD^ --> 恢复到本地仓库的上一个版本,并清空暂存区和工作区的修改
# git reset HEAD^ --> 恢复到本地仓库的上一个版本,并清空暂存区的修改
# git reset --hard <任意版本号> --> 恢复到本地仓库的指定版本,并清空暂存区和工作区的修改
  1. 合并分支

创建并切换到dev分支

# git checkout -b dev
Switched to a new branch 'dev'

如果只是新建,不切换,则去掉-b参数

查看当前存在的分支

# git branch
* dev
main # git branch -a
* dev
main
remotes/origin/HEAD -> origin/main
remotes/origin/main

-a 参数表示查看本地仓库和远程仓库所有的分支

将dev分支合并到main分支

# git checkout main --> 首先要切换到要合并的分支,例如这里要合并到main
Switched to branch 'main' # git pull --> 拉取最新代码到本地 # git merge dev --> 合并dev分支到main
Updating 3dd81b4..4554445
Fast-forward
dev-readme.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 dev-readme.md
  1. 删除分支

方法一:gitlab页面上删除此分支,然后执行:

## 查看需要清理的分支
# git remote prune origin --dry-run ## 刷新分支列表
# git remote update origin --prune ## 删除本地分支
# git branch -d dev
Deleted branch dev (was 4554445). ## 查看全部分支
# git branch -a

方法二:直接使用git删除分支

# git push origin --delete dev
# git branch -d dev

devops-1:代码仓库git的使用的更多相关文章

  1. 如何清洗 Git Repo 代码仓库

    git prune 如何清洗 Git Repo 代码仓库       在腾讯云上创建您的SQL Cluster>>> »   相信不少团队的代码仓库 Git Repo 变得越来越大. ...

  2. mac git从代码仓库克隆代码,修改并上传

    1:添加本地秘钥到代码仓库中 open ~/ .ssh 以github为例: mac 命令行输入open ~/ .ssh,打开id_rsa.pub文件中的内容,复制到github->settin ...

  3. 标准程序员系列-Github篇-初始化一个代码仓库

    下面将一步步介绍怎样使用GitHub来初始化一个项目的版本控制仓库: 1. 到GitHub上注册自己的账号:https://github.com/ 2. 创建第一个代码仓库一个仓库相当于一个项目的代码 ...

  4. 华为云实战开发】5.如何快速创建免费Git代码仓库【华为云技术分享】

    1 文章目的 本文主要帮助已经掌握或者想要掌握Git的开发者,如何更好的应用Git,以及更好的将Git与DevCloud结合应用. 2 概述 2.1 版本控制系统介绍 从狭义上来说,版本控制系统是软件 ...

  5. 使用Git命令从Github下载代码仓库

    Github作为最大的开源代码仓库,也是作为版本控制工具,简直就是程序员的天堂,是一座挖掘不尽的宝藏.现在讲解一下如何把一个Github上的项目下载到本地,也就是在本地也建立一个项目仓库,以后进行项目 ...

  6. 纯命令提交代码到git仓库(教你怎么装逼)

    如果不喜欢用命令的请点链接:http://blog.csdn.net/xiangzhihong8/article/details/50715427 我这里用纯命令,主要是因为这两天不知道什么原因,ba ...

  7. git使用命令行拉取远程代码仓库中的分支至本地

    1.本地创建文件夹用于存放拉取的代码 2.执行git init初始化文件夹 3.与远程代码仓库建立连接 git remote add origin git@github.com.wuylin/noth ...

  8. windows提交代码到git仓库

    进入git bash git config --global user.name '仓库名' git config --global user.email '2531099@163.com' git ...

  9. Git同时使用不同平台代码仓库

    问题描述 公司项目使用代码仓库为gitinn/gitlab等,个人项目使用github进行托管,而公司项目和个人项目设置的邮箱和用户名是不同的,而ssh的密钥对又是基于这两个信息生成的,所以此时想要同 ...

随机推荐

  1. Web 后端的一生之敌:分页器

    分页器是 Web 开发中常见的功能,看似简单的却经常隐藏着各种奇怪的坑,堪称 WEB 后端开发的一生之敌. 常见问题 边翻页边写入导致内容重复 某位用户正在浏览我的博客,他看到第一页最后一篇文章是 & ...

  2. 144_Power Pivot贷款之等额本息与等额本金

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 买房贷款的时候会遇到等额本息与等额本金的问题,今天做了一个两者对比,看看如何选择,来一张对比图. 等额本息的前期 ...

  3. Probabilistic two-stage detection

  4. “极简”创建 github page 并设置域名

    最简单最详细的,创建 github page 并设置域名,没有多余的步骤,并且多图,对新手特别友好 尝试用 github page 创建博客,并设置独立域名.网上找了许多教程,都太复杂.自己的创建过程 ...

  5. 代码调用Rally的接口介绍

    1. 支持的语言 2. 创建APIKey 3. GetRequest 4. QueryRequest 5. CreateRequest 6. 参考资料 本文链接: https://www.cnblog ...

  6. 皓远的第一次博客作业(pta题目集——1-3)

    题目集总结: 前言: 一. 知识点运用: ①    Java入门的基础语法(循环,判断,字符串,数组等等),Java的基础类运用,类与对象关系调用,类间关系(聚合). ②    引(类与对象): 对象 ...

  7. ACL权限控制

    ALC讲述比较详细 https://zhuanlan.zhihu.com/p/360158311

  8. 介绍一个好用的dao层与mybatis互跳的idea插件MyBatisCodeHelperPro

    一次点击 File--> Settings --> Plugins -->搜索MyBatisCodeHelperPro,点击获取,重启idea即可 接下来看效果,点击小企鹅就可以相互 ...

  9. idea运行Tomcat出现 Address localhost:8080 is already in useAddress localhost:8080 is already in use

    使用IDEA运行 tomcat时出现 Address localhost:8080 is already in use,就很奇怪,我明明只有这一个程序呀,怎么还会被占用.后来想想可能就是被其他进程占用 ...

  10. 《ECMAScript 6 入门》【一、let、const命令】(持续更新中……)

    前言: 我们在ES5都使用var来声明常量跟变量,ES6使用了最新的语法,使用let跟const分别声明.一.let命令: let命令是用于声明变量块级作用域 1. { let a = 10; var ...