热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

版本管理之gitlab实践教程:基础篇(1)

这几篇文章主要面向对git和gitlab稍有基础,但是又不太会用的使用者,通过这几文章你可以学到如下gitlab的使用方法:sshkey的设定创建项目分

这里写图片描述
这几篇文章主要面向对git和gitlab稍有基础,但是又不太会用的使用者,通过这几文章你可以学到如下gitlab的使用方法:

  • sshkey的设定
  • 创建项目
    • 分支操作
  • 用户/权限/组的操作
  • 配置项目可见性
  • Merge Request
  • Issues操作
  • 创建Wiki
  • 备份
  • 还原
  • Webhook
  • Private Token
  • API

基本会避开内容的解释,手边有环境的话每篇文章跟着命令行执行基本5分钟之内会结束。这篇文章会介绍一下sshkey的设定,以及project的创建,分支的创建合并删除等常见操作。

前提准备

使用docker-compose设定启动所需参数如下:

[admin@ku8-1 gitlab]$ cat docker-compose.yml 
version: '2'
services:
# Version Control service: Gitlab
gitlab:
image: 192.168.32.131:5000/gitlab:8.12.9
ports:
- "80:80"
- "30022:22"
- "443:443"
volumes:
- /home/local/git/log/:/var/log/gitlab
- /home/local/git/data/:/var/opt/gitlab
- /home/local/git/conf/:/etc/gitlab
restart: "no"
[admin@ku8-1 gitlab]$

sshkey的设定

生成sshkey

使用ssh-keygen,一路enter,可以生成缺省的rsa方式的sshkey。

[root@ku8-1 gitlab]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
8b:c7:2d:9a:29:1a:70:e5:9e:bf:de:a1:ac:e0:7e:20 root@ku8-1
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . |
| o |
|. . . S |
|Eo.. . o o |
| .o.o . * . |
| . ooo B o |
| .+o.+X.. |
+-----------------+
[root@ku8-1 gitlab]#

生成文件内容说明

项目 详细说明
/root/.ssh/id_rsa rsa私钥
/root/.ssh/id_rsa.pub rsa公钥

设定gitlab

将上诉生成的rsa公钥内容拷到gitlab中,公钥信息如下:

[root@ku8-1 .ssh]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAeb/ZpgS459ji4+PgkruGsc2x5uswsAWu0Gb1xdUO1BmsBmbOoxcgAoLDepkJzM6O/Qy0oBpPdRbhkxQguqjOdtu9kYgaUrdTYhgAgliEuThQFsAOYKaNvUppAl1xYddO26xnBAxKBEEbA3WeHSM4T4qhlDyE12xjo71s/J2sKIGXeuZ3m2572MxTCSHYrvCdFKuUqaj3GTzVGhit8Jw1HcIyavYATXxVpYIQcQSK5EDjDPgOh8sM521czqKoWCXulq+PcvkvMuaLbQ7xQ2XZsOurLcMyeLY+T7xGH0mqCBBwGJrT8wFdB44Jv7vNuDmL0NKakuUgtRUwvhCo8LJZ root@ku8-1
[root@ku8-1 .ssh]#

gitlab登录之后,profile settings -> ssh keys,添加ssh key
这里写图片描述

验证

使用container的IP进行直接确认,ssh连接user@host方式,git为此镜像内部创建的用户,最简单的方式可以使用Container的IP便可验证,只是IP分配可能会变,可以结合external_url进行设定,出现”Welcome to Gitlab, xxxx”的信息表示连接OK了。

[root@ku8-1 ~]# ssh -T git@172.17.0.2
Welcome to GitLab, Administrator!
[root@ku8-1 ~]#

创建项目

首先使用git创建本地项目,然后将其push至gitlab远端仓库。其前提有如下两条:

项番 详细 版本
No.1 git已安装 1.8.3.1
No.2 gitlab已运行,并且可以访问 8.12.9(CE)

git版本确认

[root@hpdevops10 ~]# git version
git version 1.8.3.1
[root@hpdevops10 ~]#

创建demoprj

使用root用户登录,创建一个Private的仓库命令为demoprj,group为default的root
这里写图片描述

事前设定

git提交之前,需要设定如下项目以保证正常提交, 具体信息请设定为自己的信息。

[root@ku8-1 ~]# git config --global user.name "liumiaocn"
[root@ku8-1 ~]# git config --global user.email "liumiaocn@outlook.com"
[root@ku8-1 ~]#

创建第一个git仓库

使用git add/commit命令之后即可将本地内容push到remote

[root@ku8-1 ~]# git clone git@172.17.0.2:root/demoprj.git
Cloning into 'demoprj'...
warning: You appear to have cloned an empty repository.
[root@ku8-1 ~]# cd demoprj

创建之后,通过

git add一个新建文件

[root@ku8-1 demoprj]# echo "Hello, LiuMiao" >README.md
[root@ku8-1 demoprj]# git add *

确认状态

[root@ku8-1 demoprj]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached ..." to unstage)
#
# new file: README.md
#
[root@ku8-1 demoprj]#

git commit提交

[root@ku8-1 demoprj]# git commit -m "initial"
[master (root-commit) 70dfd04] initial
1 file changed, 1 insertion(+)
create mode 100644 README.md
[root@ku8-1 demoprj]#

git push

[root@ku8-1 demoprj]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 221 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@172.17.0.2:root/demoprj.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
[root@ku8-1 demoprj]#

结果确认

在gitlab上确认project信息,可以看到刚刚更新的Hello, LiuMiao。
这里写图片描述

刚刚创建的仓库信息
这里写图片描述

分支操作

创建分支

创建一个名为develop的分支

[root@ku8-1 demoprj]# git branch develop
[root@ku8-1 demoprj]#

确认分支情况,加上default的master分支,就两个,而且master分支前面的*表明当前活动分支为master

[root@ku8-1 demoprj]# git branch
develop
* master
[root@ku8-1 demoprj]#

分支切换

使用checkout命令可以切换到创建的develop分支

[root@ku8-1 demoprj]# git checkout develop
Switched to branch 'develop'
[root@ku8-1 demoprj]#

确认当前活动分支已经是branch

[root@ku8-1 demoprj]# git branch
* develop
master
[root@ku8-1 demoprj]#

当然也可以使用git checkout -b develop实现创建+切换的功能

分支更新

修改README.md到branch分支并push

[root@ku8-1 demoprj]# echo "Information from develop branch" >>README.md 
[root@ku8-1 demoprj]# git add README.md
[root@ku8-1 demoprj]# git status
# On branch develop
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: README.md
#
[root@ku8-1 demoprj]# git commit -m "for branch"
[develop 4b76d48] for branch
1 file changed, 1 insertion(+)
[root@ku8-1 demoprj]# git push -u origin develop
Counting objects: 5, done.
Writing objects: 100% (3/3), 285 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create merge request for develop:
remote: http://e5091e18d568/root/demoprj/merge_requests/new?merge_request%5Bsource_branch%5D=develop
remote:
To git@172.17.0.2:root/demoprj.git
* [new branch] develop -> develop
Branch develop set up to track remote branch develop from origin.
[root@ku8-1 demoprj]#

结果确认

push之后可在gitlab上确认相关信息
这里写图片描述

切换回master

[root@ku8-1 demoprj]# cat README.md 
Hello, LiuMiao
Information from develop branch
[root@ku8-1 demoprj]# git checkout master
Switched to branch 'master'
[root@ku8-1 demoprj]# cat README.md
Hello, LiuMiao
[root@ku8-1 demoprj]#

merge操作

使用no-ff选项进行合并可以将comment一起转移,能够清晰的看出从哪儿来,做了哪些改变。
merge之前的log. ff是fast forward的缩写,ff方式在合并时不会生成一个新的合并节点,而no-ff则会生成。所以一般来说使用no-ff在管理起来更加方便。

[root@ku8-1 demoprj]# git log
commit 70dfd04b7c718318e5926ad5ee963c3573ff8f74
Author: liumiaocn @outlook.com>
Date: Tue Jul 4 04:10:56 2017 -0400

initial
[root@ku8-1 demoprj]#

merge操作进行合并

[root@ku8-1 demoprj]# git merge develop --no-ff
Merge made by the 'recursive' strategy.
README.md | 1 +
1 file changed, 1 insertion(+)
[root@ku8-1 demoprj]#

合并之后的确认,可以看到合并节点的形成(Merge branch ‘develop’)

[root@ku8-1 demoprj]# git log
commit 23c9620e51dbbce4715ce686e1d4ec48e496c894
Merge: 70dfd04 4b76d48
Author: liumiaocn
Date: Tue Jul 4 05:12:54 2017 -0400

Merge branch 'develop'

commit 4b76d48f778bbcc8a88c38e65ba6734adbd53580
Author: liumiaocn
Date: Tue Jul 4 04:49:42 2017 -0400

for branch

commit 70dfd04b7c718318e5926ad5ee963c3573ff8f74
Author: liumiaocn
Date: Tue Jul 4 04:10:56 2017 -0400

initial
[root@ku8-1 demoprj]#

push操作

push之后就完成了将分支的内容合并回master的全部操作。

[root@ku8-1 demoprj]# git push origin master
Counting objects: 1, done.
Writing objects: 100% (1/1), 218 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@172.17.0.2:root/demoprj.git
70dfd04..23c9620 master -> master
[root@ku8-1 demoprj]#
[root@ku8-1 demoprj]# cat README.md
Hello, LiuMiao
Information from develop branch
[root@ku8-1 demoprj]#

分支删除

根据2017年DORA的DevOps报告提出的那样,分支尽量会控制在三条以下,其本质则是将持续集成和LeanIT进行扩展,减少中间环节的WIP,尽可能早集成,分支的原则也可以遵循“用后即焚”,删除分支使用–delete即可。

[root@ku8-1 demoprj]# git push origin --delete develop
To git@172.17.0.2:root/demoprj.git
- [deleted] develop
[root@ku8-1 demoprj]#

结果确认

在gitlab上则看到,branch分支已经被删除了。

这里写图片描述

总结

这篇文章介绍了sshkey的设定,以及project的创建,分支的创建合并删除等常见操作,接下来会继续介绍rebase操作。


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 在开发中,有时候一个业务上要求的原子操作不仅仅包括数据库,还可能涉及外部接口或者消息队列。此时,传统的数据库事务无法满足需求。本文介绍了Java中如何利用java.lang.Runtime.addShutdownHook方法来保证业务线程的完整性。通过添加钩子,在程序退出时触发钩子,可以执行一些操作,如循环检查某个线程的状态,直到业务线程正常退出,再结束钩子程序。例子程序展示了如何利用钩子来保证业务线程的完整性。 ... [详细]
  • pc电脑如何投屏到电视?DLNA主要步骤通过DLNA连接,使用WindowsMediaPlayer的流媒体播放举例:电脑和电视机都是连接的 ... [详细]
  • 用户视图(查看运行状态或其他参数)系统视图(配置设备的系统参数)system-viewEntersystemview,returnuservi ... [详细]
author-avatar
fade2010_480
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有