devops-1:代码仓库git的使用
devops-gitlab
介绍
gitlab同github、gitee和bitbucket功能一致,都是提供一个存储代码的服务,这里就以gitlab为例,学习一下如何结合git工具使用。
- 核心组件:
- NGINX Ingress
- Registry
- GitLab/Gitaly
- GitLab/GitLab Exporter
- GitLab/GitLab Grafana
- GitLab/GitLab Pages
- GitLab/GitLab Shell
- GitLab/Mailroom
- GitLab/Migrations
- GitLab/Sidekiq
- GitLab/Toolbox
- GitLab/Webservice
- 可选依赖组件:
- 可选附加组件:
- Prometheus
- Grafana
- 无特权的极狐GitLab Runner,使用 Kubernetes 执行器
- 通过 Let’s Encrypt 自动开启 SSL, 使用 Jetstack 的 cert-manager 和 certmanager-issuer
- GitLab/Praefect
- GitLab/Kubernetes agent server (KAS)
- GitLab/Spamcheck
运行一个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分为三个区域,分别是:
- 工作区(working directory)就是上图黄色部分,就是我们实际修改代码做操作的区域
- 暂存区(stage index)就是上图标注index的桶装部分,代码完成编辑后,会先将代码添加到缓存区
- 历史记录区(history)就是记录操作的历史记录或版本的
其次,git有两个仓库,既远程仓库和本地仓库:
- 远程仓库:上图的remote部分,就是远程存储代码的仓库,例如咱们这里的gitlab
- 本地仓库:上图的repository部分,就是.git目录,通过本地修改代码后,一般都会先提交到本地,再push到远程仓库
常用操作演示
- 首先初始化git,生成.git本地目录
# git init
Initialized empty Git repository in /opt/gitlab/.git/
会在当前目录下生成.git文件
- 添加、查看远程仓库
# git remote add origin http://gitlab.example.com:880
# git remote show
- 拷贝远程仓库项目到本地
# git clone http://gitlab.example.com:880/vfan/mypublic.git
# ls
mypublic
# ls mypublic
README.md
- 修改项目文件内容,提交到暂存区
# git add .
# git status
modified: README.md
git add . --> 把当前目录下所有更改,添加到暂存区。
git add -a --> 把当前项目下所有更改,添加到暂存区。
git add xxx.sh xxx.py --> 添加指定文件到暂存区。
- 将修改变提交到本地仓库
# 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%)
- 推送至远程仓库
# 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,输入账号密码后,系统就会记住,以后便不用再输入。
- 代码撤销和撤销同步
已经修改文件,但还未添加到暂存区时
# 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 <任意版本号> --> 恢复到本地仓库的指定版本,并清空暂存区和工作区的修改
- 合并分支
创建并切换到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
- 删除分支
方法一: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的使用的更多相关文章
- 如何清洗 Git Repo 代码仓库
git prune 如何清洗 Git Repo 代码仓库 在腾讯云上创建您的SQL Cluster>>> » 相信不少团队的代码仓库 Git Repo 变得越来越大. ...
- mac git从代码仓库克隆代码,修改并上传
1:添加本地秘钥到代码仓库中 open ~/ .ssh 以github为例: mac 命令行输入open ~/ .ssh,打开id_rsa.pub文件中的内容,复制到github->settin ...
- 标准程序员系列-Github篇-初始化一个代码仓库
下面将一步步介绍怎样使用GitHub来初始化一个项目的版本控制仓库: 1. 到GitHub上注册自己的账号:https://github.com/ 2. 创建第一个代码仓库一个仓库相当于一个项目的代码 ...
- 华为云实战开发】5.如何快速创建免费Git代码仓库【华为云技术分享】
1 文章目的 本文主要帮助已经掌握或者想要掌握Git的开发者,如何更好的应用Git,以及更好的将Git与DevCloud结合应用. 2 概述 2.1 版本控制系统介绍 从狭义上来说,版本控制系统是软件 ...
- 使用Git命令从Github下载代码仓库
Github作为最大的开源代码仓库,也是作为版本控制工具,简直就是程序员的天堂,是一座挖掘不尽的宝藏.现在讲解一下如何把一个Github上的项目下载到本地,也就是在本地也建立一个项目仓库,以后进行项目 ...
- 纯命令提交代码到git仓库(教你怎么装逼)
如果不喜欢用命令的请点链接:http://blog.csdn.net/xiangzhihong8/article/details/50715427 我这里用纯命令,主要是因为这两天不知道什么原因,ba ...
- git使用命令行拉取远程代码仓库中的分支至本地
1.本地创建文件夹用于存放拉取的代码 2.执行git init初始化文件夹 3.与远程代码仓库建立连接 git remote add origin git@github.com.wuylin/noth ...
- windows提交代码到git仓库
进入git bash git config --global user.name '仓库名' git config --global user.email '2531099@163.com' git ...
- Git同时使用不同平台代码仓库
问题描述 公司项目使用代码仓库为gitinn/gitlab等,个人项目使用github进行托管,而公司项目和个人项目设置的邮箱和用户名是不同的,而ssh的密钥对又是基于这两个信息生成的,所以此时想要同 ...
随机推荐
- mybatis plus 增删改自动填充字段值
说明 本文实现以下需求效果 创建数据时自动填充 createUserId 和 createTime 更新数据时自动填充 updateUserId 和 updateTime(每次修改都自动填充新的 up ...
- Kafka 生产者解析
一.消息发送 1.1 数据生产流程 数据生产流程图解: Producer创建时,会创建⼀个Sender线程并设置为守护线程 ⽣产消息时,内部其实是异步流程:⽣产的消息先经过拦截器->序列化器-& ...
- 【docker】windows 10专业版安装docker
一.开启Hyper-V功能 二.安装 Docker Desktop for Windows(下载地址)[https://www.docker.com/get-started/] 三.安装 Window ...
- vue2 sass主题一键修改功能
1.先创建一个 _theme.scss文件 作为各类主题颜色的整理 $themes: ( light: ( //字体 font_color1: #414141, font_color2: white, ...
- AWD平台搭建及遇到的问题分析
1.安装docker环境 a.使用的是ubuntu系统,通过sudo apt install docker.io进行docker得安装,此方式会自动启动docker服务. b.通过curl -s ht ...
- 前端3JS1
内容概要 溢出属性 定位属性 z-index JavaScript简介 变量与注释 数据类型 内容详情 溢出属性 # 文本内容超出了标签的最大范围 overflow: hidden; 接隐藏文本内容 ...
- Eureka服务下线太慢,电话被告警打爆了
某年某月的某一天,就像一张破碎的脸... 错了,重来. 某天,忽然发现大量的告警,经过多番调查研究考察(此处省略3000字),发现是由于 Eureka 服务下线太慢,而仍然有大量的请求打进来导致的报错 ...
- torch.ones_like(),expand_as(),expend()等torch.repeat
https://blog.csdn.net/Arthur_Holmes/article/details/104267662 https://blog.csdn.net/weixin_39568781/ ...
- 记录一个奇葩 bug [Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)]
关于 flask 的一个记录 代码 @auth.login_required @app.route('/add', methods=['POST']) def add(): if request.me ...
- redis入门,linux安装
1.下载 https://redis.io/download 2.上传到linux服务器tools文件夹下 3.解压到安装目录 tar -zxf /app/redis/redis-5.0.4.tar. ...