【黑曜石】 gitlab使用手册

2022-03-28   398 次阅读


之后就要用gitlab来进行项目的管理了,正好趁这个机会来熟悉git一系列操作、用好这个以后肯定用得到的工具。

手册初衷

本次撰写手册的目的在于“利于使用”,所以不会对太过不常用的功能进行详细的介绍,只是针对基本的正常高频使用的语法来进行总结。说是gitlab的使用手册,不如说是想做成git的常用语法比较恰当。总而言之就是这样了.

下面会对GitLab的整体框架做一个小总结,但是不会很深也不会很全,只是万一出了问题,会最基础的分析哪个模块出了问题而已。不太需要的就不用看了

GitLab整体的框架结构

image.png

整体就是可以用SSH和HTTP/HTTPS两种方式来访问GitLab Workhorse,通过GitLab Workhorse来对postgreSQL和Redis进行数据传输和操控。

GitLab Workhorse是入口接口对内部的唯一路径,是一种代理
图中没有前面连线的sidekiq是Ruby on Rails项目中常用的后台任务处理系统,是一个轻量级的异步处理组件;虽然其本身没有提供太多复杂的功能,但是它的使用和部署非常简单。
Puma是很适合高速并发的一个ruby项目常用的web服务器。
Gitaly是唯一能对git数据库(commit)进行读写操作的组件Gitaly服务器是指任何本身运行Gitaly的节点.Gitaly客户端指的是任何运行向Gitaly服务器发出请求的进程的节点。

Sidekiq:It uses Sidekiq as a job queue which, in turn, uses Redis as a non-persistent database backend for job information, metadata, and incoming jobs.
PostgreSQL:The GitLab application uses PostgreSQL for persistent database information (for example, users, permissions, issues, or other metadata). GitLab stores the bare Git repositories in the location defined in the configuration file, repositories: section. It also keeps default branch and hook information with the bare repository.

参考于:https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/doc/development/architecture.md

所以说在使用gitlab时可以用http和ssh两种方式,本质上都是对workhorse的指令,然后workhorse将要读写的数据和进行的操作传到Puma的web服务器上(进行操控),并将指令传到Gitaly进行读写,并可以直接对redis和PostgreSQL进行一些操作,sidekiq作为进程的管理对redis和存长期数据库信息的PostgreSQL进行管理。这就是一个gitlab大体是怎么工作的

Git能怎么用?

Git操作则相对GitLab的整体设计来说简单了很多。我们需要知道的就是git在本地的仓库里是分成三块,工作区(working),暂存区(index)和最后一次上传的区域(HEAD)

image.png

git init

工作区也就是被识别为git仓库的本地文件夹。如果要一个文件夹被识别为git仓库?那就是靠识别.git文件存在与否。要创建一个git仓库,那就是在当前文件夹下运行

git init

而且并不能git init 后跟一个目录从而在指定目录建立git仓库,实际上git init唯一能添加的参数也就是 --bare来创建裸仓库,用于分享

git init (--bare)
#加上--bare后也就会创造一个裸仓库,也就是没有工作区的仓库。单纯只用于分享。

解释:因为同文件夹下没有.git文件,不能进行git操作,所以不会因为add,commit而造成内部文件不相同。所以随时pull,push都行,就是一个pure repository】

git add

git add是负责将文件从工作区上传到暂存区。说是暂存区,其实也就是.git文件夹里面的一个

git add fileName1 fileName2 #git add可以同时添加很多单个文件
git add fir # git add也可以直接选择一个文件夹全部上传
git add . # git add也可以当前文件夹全部上传

git status

git status用来查看各个区之间的区别,查看现在的分支是怎么样,以及有什么untracked的文件的。【就是修改过的文件】

可以使用git status -s,也就是short。好处是只输出一行,而且有在文件前面有A,AM,??这样比较易懂的标识符来参考

image.png

文件名后面的??是说没有被add到暂存区,只在工作区

image.png
文件名后面的A是说added,被add到了暂存区

image.png
commit后,再用git status就没有简短的提醒了,只有说离远端仓库有多少个commit这样的信息

git reset

git reset主要是改本地版本库中的信息的,某个编辑错了但没有commit的话可以使用git checkout

如果不小心把暂存区的数据commit了,我们可以用

git reset HEAD^ # 作用是让暂存区和版本库都回到上一版本
git reset HEAD^^ # 作用是让暂存区和版本库都回到上上个版本
# 以此类推

git reset 后可以加的选参有**--mixed --soft和--hard**。
如果不指定的话默认是--mixed,也就是动暂存区和版本库。--soft是只动版本库。--hard是工作区,暂存区,版本库都回到上一个版本

也可以指定某一个文件回到上一版本

git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  

git commit

git commit是在工作区文件add到暂存区后,从暂存区上传到本地版本库的指令。

一个git commit可以是这样的

git commit [file1] [file2] # 可以一次提交多个文件
git commit #不加的话默认提交暂存区所有文件

如何后悔一个commit?那就git reset一下,这是专门负责对HEAD区进行操作的指令。上面也有写

commit的时候会把自己设置的个人信息,以及一些可选的message一起commit上去作为一个版本

git checkout

git checkout功能比较多。

1:可以切换和新建branch

git checkout branchName #切换到某个branch(可以用git branch -a来看所有本地和远程分支)
git checkout -b newBranchName #新建一个分支并且切换过去。若本地已有同名分支就报错
git checkout -B newBracnchName #对比上面的是,就算有同名分支也强行建一个

image.png
这里我用git checkout -b 新建了一个分支,发现远程确实还是没有的,只有本地有。

2:可以从暂存区恢复工作区文件

git checkout -- <path> 
# 这个path也是可以一次多个文件,也可以所有文件。总之是对工作区的操作

image.png

3:可以合并分支

提供几个方式来合并

git checkout -p <branch> # 当前分支与要去的分支给一个图形界面对比,还可以对比单个文件
git checkout --merge <branch> # 单个文件内内容不同会造成冲突,以要去的那个为准

4:commit的log一团糟时,将现在的所有内容搞一个完全一样但记录干净的分支

git checkout --orphan <new_branch>

git branch

git branch也有很多功能,这里按照功能介绍

1:查看远程和本地有什么样子的分支及其对应关系

git branch -r #查看远程所有分支
git branch -v #查看本地所有分支和其哈西值
git branch -vv #查看本地所有分支和其哈希值,以及与远程仓库的对应关系
git branch -a #查看所有本地和远程仓库

image.png

2:修改分支的名字

git branch -m <oldName> <newName> #只是在本地更改,git branch -r在push之前是不会变的

要注意的是如果branch名字与远程上的branch名字不一样的话,git push会报错、这时要手动将这边的HEAD push到远程指定名字的branch里才行,不能直接git push。

image.png

而如果这里使用git push origin HEAD,就是在远程新建一个那样的分支。
image.png
因为远程分支是不能改名的,只能删了再push一个,所以这个其实就是给远程的分支改名

2:删除本地和远程分支

git branch --delete <branchName> #删除本地分支,
git push origin --delete <branchName> #删除远程分支,要先确认。

删除本地分支时,若没有merge的话会提醒,确定删除就用-D删除。并且删除之前要先checkout到别的分支上再删除

删除远程分支时,分支名字不支持补全,也不给确认。要git branch -a知道名字并确定不需要了后再删除。

4:新建分支

git checkout -b/-B <branchName> 
git branch <branchName>
git checkout --orphan <branchName>
#都可以建立新的分支。除了--orphan是建立一个干净的分支外其他的没区别

git log

就是查看提交(commit)记录的
在这里记录的,没动.git的话都能回到版本

git log

image.png

所以message要好好写。。不然乱糟糟的可丢人

fugitve使用

fugitve是vim上方便的进行git操作的神器了。。安装配置什么的有点太多了我就不提了,这里附上外网一个很好的使用教程,用国内网就能看,看了后肯定学到很多。

外网很好的使用教程

fugitive基本都是在vim内进行Git的操作

不同的就是Gwrite就是当前文件到暂存区
Gread从暂存区读原版
Gedit对比,之类的。现在还不是很熟悉,之后再补充

附上很好玩和实用的参考网站

  1. https://www.runoob.com/manual/git-guide/ 明了且好玩的网站,适合入门
  2. https://www.yiibai.com/git/git_basic_concepts.html 比较专业且全的网站,适合查阅

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

无论在未来前做什么,未来都会普通的到来