GitLab实战操作指南 gitlab教程
liuian 2024-12-24 14:18 39 浏览
一、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显示的提交内容
相关推荐
- 打开新世界,教你用RooCode+Copliot+Mcp打造一个自己的Manus
-
本文耗时两天打造,想要一遍走通需要花点时间,建议找个专注的时间开搞!这不仅是个免费使用claude3.5的方案,也是一个超级智能体方案,绝对值得一试!最近Manus真是赚足了眼球,然而我还是没有邀请码...
- Git仓库(git仓库有哪些)
-
#Git仓库使用方法流程详解##一、环境搭建与基础配置###1.1安装与初始化-**安装Git**:官网下载安装包,默认配置安装-**配置全局信息**:```bashgitconfig...
- idea版的cursor:Windsurf Wave 7(ideawalk)
-
在企业环境中,VisualStudioCode和JetBrains系列是最常用的开发工具,覆盖了全球绝大多数开发者。这两类IDE各有优势,但JetBrains系列凭借其针对特定语言和企业场景的深度...
- Ai 编辑器 Cursor 零基础教程:推箱子小游戏实战演练
-
最近Ai火的同时,Ai编辑器Cursor同样火了一把。今天我们就白漂一下Cursor,使用免费版本搞一个零基础教程,并实战演练一个“网页版的推箱子小游戏”。通过这篇文章,让你真正了解cursor是什么...
- ChatGPT深度集成于苹果Mac软件 编码能力得到提升
-
【CNMO科技消息】近日,OpenAI发布了针对MacOS的桌面应用程序,并宣布了一系列与各类应用程序的互操作性功能,标志着ChatGPT正在从聊天机器人向AI智能体工具进化。此次发布的MacOS桌面...
- 日常开发中常用的git操作命令和使用技巧
-
日常开发中常用的git操作命令,从配置、初始化本地仓库到提交代码的常用git操作命令使用git前的配置刚使用git,先要在电脑上安装好git,接着我们需要配置一下帐户信息:用户名和邮箱。#设置用户名...
- Trae IDE 如何与 GitHub 无缝对接?
-
TraeIDE内置了GitHub集成功能,让开发者可以直接在IDE里管理代码仓库和版本控制。1.直接从GitHub克隆项目如果你想把GitHub上的代码拉到本地,Trae提供了...
- China's diplomacy to further provide strong support for country's modernization: FM
-
BEIJING,March7(Xinhua)--ChineseForeignMinisterWangYisaidFridaythatChina'sdiplomacywil...
- 三十分钟入门基础Go(Java小子版)(java入门级教程)
-
前言Go语言定义Go(又称Golang)是Google的RobertGriesemer,RobPike及KenThompson开发的一种静态、强类型、编译型语言。Go语言语法与...
- China will definitely take countermeasures in response to arbitrary pressure: FM
-
BEIJING,March7(Xinhua)--Chinawilldefinitelytakecountermeasuresinresponsetoarbitrarypre...
- Go操作etcd(go操作docker实现沙箱)
-
Go语言操作etcd,这里推荐官方包etcd/clientv3。文档:https://pkg.go.dev/go.etcd.io/etcd/clientv3etcdv3使用gRPC进行远程过程调...
- 腾讯 Go 性能优化实战(腾讯游戏优化软件)
-
作者:trumanyan,腾讯CSIG后台开发工程师项目背景网关服务作为统一接入服务,是大部分服务的统一入口。为了避免成功瓶颈,需要对其进行尽可能地优化。因此,特别总结一下golang后台服务...
- golang 之JWT实现(golang gin jwt)
-
什么是JSONWebToken?JSONWebToken(JWT)是一个开放标准(RFC7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON方式安全地传输信息。由于此信息是经...
- 一文看懂 session 和 cookie(session cookie的区别)
-
-----------cookie大家应该都熟悉,比如说登录某些网站一段时间后,就要求你重新登录;再比如有的同学很喜欢玩爬虫技术,有时候网站就是可以拦截住你的爬虫,这些都和cookie有关。如果...
- 有望取代 java?GO 语言项目了解一下
-
GO语言在编程界一直让人又爱又恨,有人说“GO将统治下一个十年”,“几乎所有新的、有趣的东西都是用Go写的”;也有人说它过于死板,使用感太差。国外有Google、AWS、Cloudflar...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
python使用fitz模块提取pdf中的图片
-
《人人译客》如何规划你的移动电商网站(2)
-
Jupyterhub安装教程 jupyter怎么安装包
-
- 最近发表
-
- 打开新世界,教你用RooCode+Copliot+Mcp打造一个自己的Manus
- Git仓库(git仓库有哪些)
- idea版的cursor:Windsurf Wave 7(ideawalk)
- Ai 编辑器 Cursor 零基础教程:推箱子小游戏实战演练
- ChatGPT深度集成于苹果Mac软件 编码能力得到提升
- 日常开发中常用的git操作命令和使用技巧
- Trae IDE 如何与 GitHub 无缝对接?
- China's diplomacy to further provide strong support for country's modernization: FM
- 三十分钟入门基础Go(Java小子版)(java入门级教程)
- China will definitely take countermeasures in response to arbitrary pressure: FM
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- react-admin (33)
- vscode切换git分支 (35)
- vscode美化代码 (33)
- python bytes转16进制 (35)