百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

GitLab实战操作指南

csdh11 2025-01-13 12:04 24 浏览

一、Git原理

1、Git是什么?

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

2、Git有什么特点?

简单来说就是:高端大气上档次!

3、GIt与SVN区别

SVN管理:

属于集中式版本控制系统,版本库是集中存放在中央服务器,必须联网才能工作,脱离局域网,采取互联网提交大文件会比较慢

Git管理:

属于分布式版本控制系统,根本没有“中央服务器”,安全性高,每个人的电脑上都是一个完整的版本库,即电脑硬盘上会有个版本这样,你工作的时候,就不需要联网了。即使中央服务器出了问题,从其他人那复制一个就好了

4、Git 工作流程

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

下图展示了 Git 的工作流程:

二、Git 配置

1、配置个人的用户名称和电子邮件地址

$ git config --global user.name "username"

$ git config --global user.email yourmail

2、在客户端生成ssh key

  • 安装客户端后在桌面任意空白处右击
  • 打开Git Base Here然后输入下面命令
  • 打开本地git bash,使用如下命令生成ssh公钥和私钥对
  • ssh-keygen -t rsa -C 'xxx@xxx.com' 然后一路回车(-C 参数是你的邮箱地址)
  • 然后打开~/.ssh/id_rsa.pub文件(~表示用户目录,比如我的windows就是C:\Users\Administrator),复制其中的内容
  • 打开gitlab,找到Settings -->Profile -->SSH Keys--->Add SSH Key,并把上一步中复制的内容粘贴到Key所对应的文本框,在Title对应的文本框中给这个sshkey设置一个名字,点击Add key按钮

三、Git常用操作

1、创建一个版本库

Ps:只是一个空目录哦

$ mkdir mytest

2、通过git init命令把这个目录变成Git可以管理的仓库

$ git init

Initialized empty Git repository in C:/Users/userAccount/Desktop/test/.git/

ps:目录下会自动生成.git,误删,毕竟全靠它做版本管理

第一步,用命令git add告诉Git,把文件添加到仓库:

$ git add readme.txt

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

第二步,用命令git commit告诉Git,把文件提交到仓库:

$ git commit -m "test add file"

[master (root-commit) 5a92835] test add file

1 file changed, 1 insertion(+)

create mode 100644 mytest/readme.txt

3、版本的操作内容操作查看

本地版本操作:(连续操作一个文件并提交好多次)

git log日志查看命令

$ git log

commit d9669171c9c5890fd282c40a7e7fe0c372074233 (HEAD -> master)

Date: Thu Apr 4 14:52:23 2019 +0800

test third version

commit 6b39a4a6ce09c472e7f9c09e50c79c78b2efee16

Date: Thu Apr 4 14:51:11 2019 +0800

test second version

commit 9e42e41abf01d85e163b3d63c41bf5b099920d47

Date: Thu Apr 4 14:47:32 2019 +0800

test first version

commit dca156cf9c72b17f5d1aaff88ebfbfc79d5b91e2

Date: Thu Apr 4 14:46:39 2019 +0800

test add file

:

比较直观的方式查看

$ git log --pretty=oneline

4、版本回退操作

比如返回上一个版本

$ git reset --hard HEAD^

HEAD is now at 6b39a4a test second version

Git的版本是生成是十六进制生成的,我的上一版本是如截图:

再查看日志当前版本是否为6b39a4a

回滚到某个指定版本

$ git reset --hard dca156cf

HEAD is now at dca156c test add file

再查看日志当前版本是否为dca156cf

优势:回滚很快呀

5、git status查看状态

比如我对readme.txt内容做了修改,再输入git status查看状态

git checkout -- file可以丢弃工作区的修改,即撤销修改

$ git checkout -- readme.txt

再次输入git status 发现文件回滚到改动之前了

6、删除文件操作

先增加一个文件

$ git add delete.txt

再删除文件

$ rm delete.txt

查看文件状态

$ git status

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

new file: delete.txt

Changes not staged for commit:

(use "git add/rm <file>..." to update what will be committed)

(use "git checkout -- <file>..." to discard changes in working directory)

deleted: delete.txt

提交修改

$ git commit -m "remove test.txt"

[master cc6aa8f] remove test.txt

1 file changed, 0 insertions(+), 0 deletions(-)

create mode 100644 mytest/delete.txt

7、将本地仓库和远程仓库相关联

$ git remote add origin git@172.16.5.128:RefainZero/demo.git

把本地库的所有内容推送到远程库

$ git push -u origin master

从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

Everything up-to-date

8、从远程仓库获取代码

$ git clone git@172.16.5.128:RefainZero/demo.git

Cloning into 'demo'...

remote: Counting objects: 16, done.

remote: Compressing objects: 100% (5/5), done.

remote: Total 16 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (16/16), done.

9、解决冲突

1)、先制造一个冲突

情景,readme.txt中的,文本默认是test

git status

修改本地的readme.txt中文本内容为“20191635”

在服务器也修改了readme.txt,修改文本内容为“就想冲突下”

2)、提交本地的代码到远程仓库

在服务器执行git pull(获取最新代码)

不负众望,果然发生代码冲突

3)、解决文件中冲突的的部分

打开冲突的文件

4)、把冲突标记删掉,把冲突解决正确

提交修改,并同步到远程仓库

$ git add readme.txt

$ git commit -m '解决冲突的测试'

[master 0feb18f] 解决冲突的测试

$ git push origin master

Counting objects: 8, done.

Delta compression using up to 8 threads.

Compressing objects: 100% (4/4), done.

Writing objects: 100% (8/8), 740 bytes | 740.00 KiB/s, done.

Total 8 (delta 0), reused 0 (delta 0)

To 172.16.5.128:RefainZero/demo.git

ca9bc5e..0feb18f master -> master

再次从服务器上获取最新代码,验证是否冲突

$ git pull

Already up to date.

四、附:Gitlab显示的提交内容

相关推荐

探索Java项目中日志系统最佳实践:从入门到精通

探索Java项目中日志系统最佳实践:从入门到精通在现代软件开发中,日志系统如同一位默默无闻却至关重要的管家,它记录了程序运行中的各种事件,为我们排查问题、监控性能和优化系统提供了宝贵的依据。在Java...

用了这么多年的java日志框架,你真的弄懂了吗?

在项目开发过程中,有一个必不可少的环节就是记录日志,相信只要是个程序员都用过,可是咱们自问下,用了这么多年的日志框架,你确定自己真弄懂了日志框架的来龙去脉嘛?下面笔者就详细聊聊java中常用日志框架的...

物理老师教你学Java语言(中篇)(物理专业学编程)

第四章物质的基本结构——类与对象...

一文搞定!Spring Boot3 定时任务操作全攻略

各位互联网大厂的后端开发小伙伴们,在使用SpringBoot3开发项目时,你是否遇到过定时任务实现的难题呢?比如任务调度时间不准确,代码报错却找不到方向,是不是特别头疼?如今,随着互联网业务规模...

你还不懂java的日志系统吗 ?(java的日志类)

一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...

谈谈枚举的新用法--java(java枚举的作用与好处)

问题的由来前段时间改游戏buff功能,干了一件愚蠢的事情,那就是把枚举和运算集合在一起,然后运行一段时间后buff就出现各种问题,我当时懵逼了!事情是这样的,做过游戏的都知道,buff,需要分类型,且...

你还不懂java的日志系统吗(javaw 日志)

一、背景在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志。经常听到的这样一句话就是“打个日志调试下”,没错在日常的开发、调试过程中打印日志是常干...

Java 8之后的那些新特性(三):Java System Logger

去年12月份log4j日志框架的一个漏洞,给Java整个行业造成了非常大的影响。这个事情也顺带把log4j这个日志框架推到了争议的最前线。在Java领域,log4j可能相对比较流行。而在log4j之外...

Java开发中的日志管理:让程序“开口说话”

Java开发中的日志管理:让程序“开口说话”日志是程序员的朋友,也是程序的“嘴巴”。它能让程序在运行过程中“开口说话”,告诉我们它的状态、行为以及遇到的问题。在Java开发中,良好的日志管理不仅能帮助...

吊打面试官(十二)--Java语言中ArrayList类一文全掌握

导读...

OS X 效率启动器 Alfred 详解与使用技巧

问:为什么要在Mac上使用效率启动器类应用?答:在非特殊专业用户的环境下,(每天)用户一般可以在系统中进行上百次操作,可以是点击,也可以是拖拽,但这些只是过程,而我们的真正目的是想获得结果,也就是...

Java中 高级的异常处理(java中异常处理的两种方式)

介绍异常处理是软件开发的一个关键方面,尤其是在Java中,这种语言以其稳健性和平台独立性而闻名。正确的异常处理不仅可以防止应用程序崩溃,还有助于调试并向用户提供有意义的反馈。...

【性能调优】全方位教你定位慢SQL,方法介绍下!

1.使用数据库自带工具...

全面了解mysql锁机制(InnoDB)与问题排查

MySQL/InnoDB的加锁,一直是一个常见的话题。例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?下面是不同锁等级的区别表级锁:开销小,加锁快;不会出现死锁;锁定粒度...

看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

一、什么是死锁加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获...