Gitlab 新手入门
? gitlab ?    2019-09-05 15:05:35    1214    0    0
gua_l   ? gitlab ?


User setting and access

 

User Settings

登录gitlab.XX-company.com 之后在页面右上角头像处点击∨展开菜单,进入setting。

可以设置相关用户信息,常用的包括profile(基本配置),Account(帐户),Preferences(偏好设置),密码,SSH Keys,Notifications(邮件通知范围),Active Session(有效的连接)


Profile

可以在profile 里修改头像,邮箱,状态,及各平台关联帐号

 

Account

可以在account里修改用户名,用户名标识着与用户id 唯一关联的名称空间。一般不建议修改,如果修改,可能引起一些未知的影响,如必要修改,请严格按照修改页面的learn more 到“changing-your-username”根据提示做足步骤。

https://gitlab.XX-company.com/help/user/profile/index#changing-your-username

 

Notifications

全局通知设置:先在全局设置里可以设置通知的级别,然后在然后组/项目里分别设置为不同级别。默认为全局设置,展开可选其他。

 

Password

密码页面,修改密码后,会收到一个邮件,点击链接可以使用新密码登录(稍有延迟)

 

SSH Keys

SSH密钥允许您在计算机和GitLab之间建立安全连接,使用较多的情况是,当我们使用SSH 来 Clone 一个项目时,需要先在gitlab里配置好ssh keys。

一般我们在项目主页里展开clone 选项时,有两种方式,一种是clone with SSH,一种是Clone with HTTPS

 

当我们使用clone with SSH 时,我们需要先配置好ssh keys。

https://gitlab.XX-company.com/help/ssh/README#generating-a-new-ssh-key-pair

步骤是,先在一台linux 设备上生成一个密钥对,公钥拷到gitlab设置页面里,私钥放到需要clone 项目的设置上的默认ssh 配置路径。然后就可以直接使用这样的链接进行clone

Git clone git@gitlab.XX-company.com:vmc/products.git

 

另有直接使用用户/密码 HTTPS 方式,将在后面的章节介绍。

git clone https://gitlab.XX-company.com/vmc/products.git 

 

Preferences

可自定义导航栏底色,语法显示外观,显示言语等等。

 


New Group and project

Gitlab url 的组成 :

gitlab 域名+用户名称空间或组名+项目名

 

Project URL = https://gitlab.XX-company.com/${Groups|USERS}/${project_name}.git

Eg.

https://gitlab.XX-company.com/vmc/products.git

https://gitlab.XX-company.com/gz_lte_sqa/python.git

 

https://gitlab.XX-company.com/linchuangfeng/LTE_RELEASE.git

https://gitlab.XX-company.com/gang.lu/FIS.git

 

在顶部导航栏右侧,搜索框的左方,有一个+号,展开有:

 

NEW Group

当你在如下页面新建了一个组别之后,在顶部导航栏的Group 可入该组别页面,

在左侧导航栏member 中可设置组成员组及角色,在组主页中,可直接new project 和new subgroup

 

NEW Project

新建空白project。在Blank project 中,可新建project ,再到生成的project 主页中去查看初始化project的指引。Project 可以创建在组和个人名称空间之下,为可选项。一般公用的项目建议选择在组之下,个人名称下如有公共项目,会因个人帐号的变化(如禁用)而有一些权限上的变化,需要在个人帐号被禁用之前,将名下的project 属主权移交才不会影响使用。


根据url 导入另外一个 gitlab 或  其他版本库工具中的仓库,点击“repo by URL” 需要对方库信息的用户名密码进行验证。

 


Init and clone

 

Init

当创建完一个空白的仓库之后,打开project 的链接,会有一些引导命令出现在project主页

(默认引导的clone命令使用的是HTTP方式,如果在创建之前已经配置了ssh key,则引导页的clone 命令使用的ssh 的链接)

 

Git global setup

-- 执行命令前先进行全局配置用户名和邮箱,如果没有配置,后续push 时会有警告提示,需要配置完成之后才能继续push命令。

 

 

以下三种方式择其一进行初始化

Create a new repository

-- 先clone此库,直接往空库里提交文件(常规操作,add/commit/push)

 

Push an existing folder

-- 直接将一个已存在的普通目录初始化为此库的内容,git init命令在本地目录里生成一个.git 的受控信息目录,remote add origin 能将.git 与远程创建的仓库关联起来。

 

Push an existing Git repository

--将一个已经存在的,从别处导出的,含有.git 的目录,导入为此新建项目的内容

 


Clone

通过clone 的命令将远程仓库复制下来作为一个本地仓库。

 

Clone方式

在project主页的页面,有一个下拉菜单 Clone﹀

展开有两种链接,点击右击的按钮可以复制

HTTPS https://gitlab.XX-company.com/${GROUP}/${RPOJECT_NAME}.git

SSH git@gitlab.XX-company.com:${GROUP}/${RPOJECT_NAME}.git

两种不同格式的链接用于两种不同的clone 方式,clone 的命令无区别,都是

ü git clone url(xxxx.git)

 

Clone with HTTPS

Init章节中的介绍的clone方式,便是HTTP,因为其中的url 是https开头的。

使用这个方式,需要用帐户密码验证。每次与gitlab 通讯时,需要输入密码,可配置它记住密码,第一次验证之后就无需再输入。

 

在$HOME 目录下会有一个.git-credentials文件存储着认证信息,下次无需输入(但这种方式保存的密码是明文的)

git config --global credential.helper store

git clone https://gitlab.XX-company.com/linchuangfeng/test1.git

 

Clone with SSH

在“User setting and access”章节中介绍的sse key 就是clone with ssh 的前提。

 

https://gitlab.XX-company.com/help/ssh/README#generating-a-new-ssh-key-pair

  1.  Linux生成密钥对

ssh-keygen -o -t rsa -b 4096 -C "username@casachina.com.cn"

连按三次回车(1.默认密钥存放路径2.空密码3.密码确认,回车表示无密码,可以自己设置路径和密码。)

使用自定义而非默认路径时,需要额外按上文链接配置,使用时git 才能找到私钥的存放位置。创建密钥如有设密码,则clone 时需要输入一次密钥密码。密码为空时,只要私钥存放在设备的默认位置,可直接ssh clone)

  1.  将公钥添加gitlab SSH Keys 配置页面

cat ~/.ssh/id_rsa.pub,将公钥内容添加到setting-SSH Keys-Key的添加框中,拷贝的内容以邮箱地址结尾 ,然后点击 add key。

https://gitlab.XX-company.com/profile/keys

  1.  确认私钥在准备clone 项目的设备上

ls ~/.ssh/id_rsa

  1.  Clone

git clone git@gitlab.XX-company.com:${GROUP}/${RPOJECT_NAME}.git

 

Tips:

可以任意地方执行命令生成密钥对。

公钥内容拷到gitlab 页面添加ssh key

私钥保存在要执行clone的设备上,并存放在$HOME/.ssh目录下,如果不保存在默认SSH目录下,则需要另外配置。执行生成命令时,交互时按第一个回车,表示默认路径

私钥也可以拷到自己的其他设备上的$HOME/.ssh目录,使那台设备也可以通过SSH Clone。

密钥密码设置了值时,执行git clone git@xxxxx 之后,需要再输入一次密钥密码。如果是空密码,则没有这一步,直接clone project的内容。执行生成命令时,交互时按第二三个回车,表示空密码。

Eg. Enter passphrase for key '/home/lcf/.ssh/id_rsa':

ü 如果报的,git@gitlab.XX-company.com's password: ,则SSH key 没有设置正确,需要按步骤重新检查确认。公钥是否添加在gitlab, 私钥是否在设备上。

Eg. git@gitlab.XX-company.com's password:



add and commit 

概念

仓库: 在gitlab web page 创建的仓库称为远程仓库,通过clone 复制下来存放在自己设备上的同名git project称为本地仓库。

本地仓库与本地文件的交互操作:add和 commit

本地仓库与远程仓库的交互操作:git pull (= git fetch then git merge ) git push

 

暂存区和add(rm) : 暂存区的文件能被git 识别为追踪中的变更,通过add 命令可以把一个变更文件放入暂存区。git status 可以看到未放入暂存区但已经有变更的文件及其状态(这里所说的变更,是通指本地文件的增,删,改三种状态)

用git status 看到的在changes to be committed: 下的文件,便是暂存区的文件。

提交 commit:commit 操作就是把暂存区的变更提交到本地仓库,使这些变更受控。只有暂存区中的文件能进行commit操作。

 

基本的操作:

git pull

rm test1.txt(删除文件)

vi test2.txt (修改文件)

touch test3.txt (新增文件)

git add -A

git commit -m commit all deleted ,modified,added files

git push

 

例子和解析:本地修改 --add--> 暂存区

远程库原有文件test1.txt  test2.txt

Clone 了一个本地库,也会有test1.txt  test2.txt

 

在本地库所在的目录操作:

删除test1.txt,修改了test2.txt ,新增一个test3.txt

用git status 查看,有三种状态

 

所有未放到暂存区的变更都包含在这三种情况里,

我们可以使用 -A 来代替三种所有状态,-u 表示修改和新增的。

 

git add -A

# -A : include modify+add+delete

熟悉之后一般我们都是使用选项来选择需要add 的文件 (-A)。下面再分解每一种情况单独被add 到暂存区里的情况。

 

Deleted:删除,原受控的文件被本地删除了,如果确认是要从库里删除了,可以用git rm tes1.txt 来将变更(删除)放到暂存区。执行完之后,再用status 看,它上升到to be commited 的状态分类里。( git add -A 也包含了rm)

Modified: 原受控的文件被本地修改了,如果确认是要修改,可以用git add tes1.txt 来将变更(修改)放到暂存区。执行完之后,再用status 看,它上升到to be commited 的状态分类里。

Unrtrcked: 未追踪未受控的文件,新增文件一般是这个状态。如果确认是要修改,可以用git add tes3.txt 来将变更(新增)放到暂存区。执行完之后,再用status 看,它上升到to be commited 的状态分类里。

 

以上 : git add -A = git rm test1.txt + git add test2.txt + git add test3.txt


例子:暂存区 --commit--> 本地仓库

 

Git status现在可看到暂存区有三个文件,用git commit 可以将文件提交到本地仓库。

 

不带文件名 ,会一次提交全部暂存区的文件:

git commit -m “commit all change for test123”

 

指定提交部分文件,需要要指定文件名:

git commit test1.txt -m “rm test.txt”

 

用git log -n 1 可以看到刚刚最新的提交记录

 


pull and push

概念

 

本地仓库与远程仓库的交互操作:git pull (= git fetch then git merge )和 git push

git push 即 把本地仓库里commits 通过push 操作,推送到远程仓库。

git pull  即 把远程仓库的更新(别人push到远程)同步并合并到本地仓库。

远程仓库包含 各方commit 的推送。

 

Pull

在操作之后应该进行一次git pull ,远程仓库的更新同步到本地仓库。

 

Push

如何查看本地仓库还未push到远程仓库的commits 有多少?

用git branch|grep '*' 查看本地仓库所在分支,此例为master

 

对应的远程分支用origin 区分:origin/master

git log master ^origin/master

  1.  如果使用git push 会把本地master比origin/master 多出来的commits推送到远程(即上面用add commit 提交到本地仓库的提交),使别人可以通过pull进行更新。
  1.  如果进行push 时远程有更新没有pull先下来,会有提示,需要先进行更新合并才能push。

 


Branch

概念

在分布式版本控制系统中,像 Git、Mercurial、Bazaar 以及 Darcs等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

Git 鼓励在工作流程中频繁地使用分支与合并。

 

https://git-scm.com/book/zh

以下介绍摘自git-book 分支简介

暂存操作会为每一个文件计算校验和,然后会把当前版本的文件快照保存到 Git 仓库中(Git 使用 blob 对象来保存它们),最终将校验和加入到暂存区域等待提交,当使用 git commit 进行提交操作时,Git 会先计算每一个子目录(本例中只有项目根目录)的校验和,然后在 Git 仓库中这些校验和保存为树对象。 随后,Git 便会创建一个提交对象,它除了包含上面提到的那些信息外,还包含指向这个树对象(项目根目录)的指针。如此一来,Git 就可以在需要的时候重现此次保存的快照。

 

分支创建便是分配一个新的指针,指向所指定的提交对象(快照),分支的基础代码便是来自此时的快照。往这个分支上增加新的commit 对象,分支指向便会往前移动到新的commit对象上去。

 

分支创建可以基于某个commit 的校验值,可以基于另外一个分支当前的代码(会指向此分支指针当前指向的commit 对象)。

 

Default Branch

一般新建库时库的本身为master分支,并且设置master 为默认分支。这表示,后续我们clone 为本地仓库时,它自动切换为默认分支。

git clone url

git branch -a 可以查看本地和远程分支,我们clone 库后处于默认分支下。

“*” 所在行的分支名,即当前分支。可以切换到其他分支。默认是master(只是git init 初始化时第一个分支时规定的名称,与其他分支无异)

默认分支是可以修改的。比如设置成了newMaster , 那么一个clone动作之后,代码所在的分支默认是在newMaster。

设置:setting -- repository -- default Branch

 


Create and Switch Branch

Gitlab 页面操作

知道了分支创建的原理,此页面需要提交的Create from (Existing branch name, tag, or commit SHA)的值,都是为了找到对应的commit对象所记录的快照,并让新分支的指针指向它。

 

Git 命令行操作

git branch test1  只创建本地新分支test1

git checkout test1 切换到分支test1

git checkout -b test1 创建新分支test1并切换到test1

 

git branch -a可以查看本地和远程分支

git branch 可以查看本地分支

git branch -r 可以查看远程分支

 

本地当前所在分支前面用*标识

切换到需要的本地分支之后,在此目录下所做的add/ commit, push 时会默认推送到对应的远程分支。

第一次不带参数push 时,会有一个警告让你设置一个push.default值。


Matching 表示push 时把本地所有分支的commit 推送到与本地所有分支匹配的远程分支。

Simple 表示push 时把本地当前所在分支的commit 推送到与之匹配的远程分支。Current与 simple 类似。

 

git config --global push.default matching

git config --global push.default simple

git config --global push.default current (建议设置)

 

 


Branch Compare

 

WEB Page

Source Branch : master

Target Branch:femtocoreMaster

Compare : 比较出来的结果是仅在mastar 上有,femtocoreMaster上没有的。


CLI

git log Target Branch..Source Branch

git clone git clone https://gitlab.XX-company.com/vmc/products.git

git log origin/femtocoreMaster..origin/master



Merge Request

通过分支比较可以得出两个分支的差异,如果要把这些差异合并向一方合并,需要使用merge request 。

 

创建:

使用issue 创建, 关联到issue

直接创建,与issue 无关,只为做分支间merge

 

Merge request 的入口有几种方式,不管从哪种方式进行,最终需要确认以下两个信息:

  1.  Source branch 和 target Branch ,从哪到哪
  2.  Compare 出来的结果是不是预想需要的changes


 创建了一个merge request 之后,就可以处理merge request 。

  •  Source Branch(用来处理merge request 的工作分支) 里commit 代码,并push 到 Source Branch。
  •  将Source Branch 的commit merge 到Target Branch 。

如果信息编辑有误,可以点击edit 重新编辑。

如果此项目设置了批准步骤,则需要approval 列表的人批准,才能点击下方的merge 操作。

点击merge 之后,如果全无冲突,merge直接完成。

如果两个branch 有冲突(多因为cherry-pick),则需要手动merge ,点击提示中的蓝色提示 command line ,弹框指导如何命令行操作。

 


ISSUE

每个project 都可以会有一个Issue列表,从#1 开始。

Project 名+ ISSUE # 可以唯一确定一个gitlab 中的bug。


创建ISSUE # :

New Issue: title ,Description ,Assignee 必填

 

为ISSUE创建merge request :

  1.  创建干净的工作分支, 分支默认名为issue title,可以编辑。
  2.  Source :可选填基于哪个分支创建,最后合并回哪个分支。
  3.  创建完成后,在上方有一条记录related merge requests 的链接。
  4.  去所在的merge request 所要求的工作分支上去提交代码,并merge 到目标上去



CI/CD

 

gitlab 的CI/CD ,即持续集成,持续构建并部署测试的过程,实质上是

1. 将持续集成的过程阶段(编译构建/打包/部署/测试)写在gitlab.yml中

2. 并将准备执行gitlab.yml脚本内容的服务器配置为gitlab服务器的一个runner。

3. 当gitlab 库中的提交时,便会自动触发一次在runner 上的持续集成过程。

 

http://blog.leanote.com/post/gua_l/gitlab-CI-CD

 


其他用法

 

  1.  Linux Shell中处理json 对象 (分解 gitlab API 返回的json 对象)-- jq

http://blog.leanote.com/post/gua_l/JQ-Linux-Shell

 

  1.  git 撤销操作

http://blog.leanote.com/post/gua_l/git-revert

 

  1.  git 查看两个commit 之间的修改

http://blog.leanote.com/post/gua_l/git-commit-history

 

  1.  GitLab GEO 异地主副服务器同步--文档翻译

http://blog.leanote.com/post/gua_l/57a16a1e7ea6

 

  1.  git 常用操作

http://blog.leanote.com/post/gua_l/git


Pre: shell 字符串长度

Next: shell 在ubuntu 里的报错 [: test: unexpected operator​

1214
Sign in to leave a comment.
No Leanote account? Sign up now.
0 comments
Table of content