上云管理之Git/GitHub/GitLab 详解(一)

news2024/11/5 1:40:55

上云管理之Git/GitHub/GitLab 详解(一)

  • 引言
  • 1. GIT软件安装
  • 2.初始化配置与提交代码
    • 2.1. 初始化配置
    • 2.2 本地仓库代码提交
      • 2.2.1 初始化仓库并提交代码
      • 2.2.2 再次提交已修改的代码
      • 2.2.3 文件夹层次结构代码提交
    • 2.3 GIT 的文件状态
  • 3.GIT 分支
    • 3.1. 分支的切换与删除
    • 3.2 合并分支
      • 3.2.1 Fast forward 合并
      • 3.2.2 3 way merge 合并
      • 3.2.2 3 way merge with conflict 合并
      • 3.2.2 4 rebase 合并

引言

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。本课程主要包含Git的基础知识和GitHub、GItLab的使用,课程涵盖Git底层原理,通过详细的讲解两款产品的特性。
Git是一个开源的分布式版本控制系统,由Linus Torvalds开发。Git是当前世界上最流行的版本控制系统之一,被广泛用于软件开发过程中的源代码管理。

特点

  1. 分布式架构:Git的每个开发者都拥有完整的代码仓库副本,包括标签、分支和标签。

  2. 非线性开发:支持快速切换分支,方便开发者并行开发。

  3. 离线提交:支持离线提交和合并,不需要持续联网。

  4. 灵活的工作流:支持多种工作流,可以灵活地管理开发流程。

  5. 离线合并:可以离线合并分支,然后一次性合并到主分支。

  6. 轻量级:Git是轻量级的,易于学习和使用。

  7. 可扩展性:Git有许多插件和工具支持,可以扩展其功能。
    基本概念

  8. 仓库(epository):Git仓库是Git用来管理项目的地方,包含所有的文件和历史记录。

  9. 分支(ranch):分支是Git中开发线,可以创建多个分支并行开发。

  10. 提交(ommit):提交是将更改保存到仓库。

  11. 合并(erge):合并两个或多个分支的更改。

  12. 标签(ag):标签是给特定的提交打上标记,通常用于版本发布版本。

  13. 远程仓库(emote):远程仓库是托管在服务器上的仓库,可以与其他人共享和协作。

基本操作

  1. 初始化仓库git init创建新的Git仓库。
  2. 添加文件git add添加文件到暂存区。
  3. 提交更改git commit提交暂存区的更改。
  4. 查看状态git status查看当前仓库状态。
  5. 查看历史git log查看提交历史记录。
  6. 检出文件git checkout检出文件到工作区。
  7. 创建分支git branch创建新分支。
  8. 切换分支git checkout切换分支。
  9. 合并分支git merge合并分支。
  10. 删除分支git branch -d删除分支。
  11. 克隆仓库git clone克隆远程仓库到本地。
  12. 推送更改git push推送更改到远程仓库。
  13. 拉取更改git pull拉取远程仓库的更改。

工作流程

  1. 创建仓库git initgit clone
  2. 开发新功能:创建新分支并开发。
  3. 提交更改git addgit commit
  4. 合并分支git merge合并分支。
  5. 推送更改git push推送到远程仓库。
  6. 拉取更改git pull拉取远程更改。
  7. 解决冲突:合并时解决冲突。
  8. 删除分支git branch -d删除分支。

Git是现代软件开发中不可或缺的工具,它提供了强大的版本控制功能,使得团队协作和代码管理变得容易。通过Git,开发者可以高效地管理代码,跟踪更改,并与团队成员共享和协作。

1. GIT软件安装

点击链接 git下载地址

在这里插入图片描述

点击下载 代码编辑器vscode下载地址
在这里插入图片描述
新建立一个文件夹git_test,在windows 自带的powershell 中打开vscode;

PS D:\> cd git_test
PS D:\git_test> code .

在扩展区安装git插件,安装git的两个插件,如果搜索不到则更新vscode至最新版;
在这里插入图片描述
在这里插入图片描述

2.初始化配置与提交代码

2.1. 初始化配置

在使用Git进行版本控制之前,通常需要配置用户信息,以便在提交时能够正确地记录更改的作者。配置用户信息可以通过以下命令完成:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

这里的Your Nameyour.email@example.com应该替换为实际的用户姓名和电子邮件地址。配置这些信息后,每次提交(commit)都会使用这些信息。

  1. 配置用户名
    使用user.name配置项来配置用户名,这个名称将显示在提交历史中。

    git config --global user.name "John Doe"
    
  2. 配置用户邮箱
    使用user.email配置项来配置用户的电子邮件地址,这个地址将用于提交历史中识别提交者。

    git config --global user.email "john.doe@example.com"
    
  3. 全局配置
    使用--global选项来配置全局配置,这意味着配置将应用于当前用户在所有Git仓库。

  4. 应用范围

    • 全局配置:配置影响当前用户在所有Git仓库。
    • 本地配置:只影响当前仓库。
  5. 修改配置
    如果需要修改已经配置的用户信息,可以使用以下命令:

    git config --global user.name "New Name"
    git config --global user.email "new.email@example.com"
    
  6. 查看配置
    查看当前配置的信息,可以使用以下命令:

    git config --global --list
    
  7. 删除配置
    如果需要删除某个配置项,可以使用以下命令:

    git config --global --unset user.name
    git config --global --unset user.email
    
  8. 配置文件
    Git的配置信息存储在用户主目录下的.gitconfig文件中。

2.2 本地仓库代码提交

2.2.1 初始化仓库并提交代码

  1. 初始化仓库,之后本地仓库中会生成.git 文件
    在这里插入图片描述

在这里插入图片描述
2. 新建一个hello.txt 文件,并交由git管理,git 只存储文件的内容,不存储文件名,git会根据内容存储一个对象,对应的内容通过hash算法计算出一个hash值存储;

echo "hello">hello.txt
git add hello.txt
tree .git  查看结构
git status 查看git状态	

在这里插入图片描述

在这里插入图片描述
文件的名字在index目录下,可以通过以下函数查看

 git ls-files -s 查看索引区的文件名
 git cat-file -t 06oed3;查看对象的类型
 git cat-file -p 06oed3;查看对象的内容

在这里插入图片描述

3.提交代码至代码仓库,将索引库的代码提交至代码仓库
在这里插入图片描述

 git commit -m "lst commt";第一条记录进行提交

提交后会生成一个commit的对象,commit对象中的内容是tree对象已经相关提交者的信息,tree对象的内容是git add 的文件;
在这里插入图片描述

在这里插入图片描述

2.2.2 再次提交已修改的代码

假如实际需要修改已经commit的对象,使用vim 文件名进行操作 q 保存退出;之后重新提交,新提交的对象与前一次是一个父子关系

在这里插入图片描述

2.2.3 文件夹层次结构代码提交

新增文件夹,,新增文件夹不会生成新的待提交的内容,文件夹下有新文件,重新提交,会生成新的版本,三个版本的关系如下:

2.3 GIT 的文件状态

GIT的文件状态在工作区分为:untracked、modified,索引区的状态为staged,代码仓库中的状态为unmodified,这几个状态也可以相互转换。

git rm --cached  test.txt;从索引库中直接将add的文件删除
rm -rf test.txt;从工作区中直接将add的文件删除
git restore --staged text.txt ;索引区的代码版本回退到上一个版本;
git restore text.txt 工作区的代码回退到上一个版本;

在这里插入图片描述

3.GIT 分支

在Git中,分支(Branch)是一种允许开发者在开发新功能时,可以创建一个独立的开发线。分支,使得开发者可以并行开发不同的功能,而不会影响到主分支(通常是master或main)。

3.1. 分支的切换与删除

.git文件中的HEAD可以理解为是一个指针,它总是指向当前的工作分支和版本,可以使用cat .git/HEAD查看, 它里面报错了一个目录地址:例如:refs/heads/master,通过cat .git/refs/heads/master, 可以查看当前目录地址下的内容以及对应对象的类型。
在这里插入图片描述
GIT分支有相关的命令可以查看、创建等分支。

git branch 可以查看分支
* master
git log --oneline --decorate HEAD 查看当前HEAD指向的提交: 
d06dee4 (HEAD -> master) lst commit
git branch  branch_name  新建立分支
git branch -D  branch_name  删除分支,必须在工作分支删除另外一个分支,强制删除;
git branch -d  branch_name  删除分支前检查是否进行过合并,以防止删除未合并的分支;
git checkout branch_name  切换分支
git checkout -b new-branch-name  新建分支并切换到该分支
git checkout commit_name;git checkout -b branch_name;切换到特定commit对象上,新创建分支进行操作,可以恢复删除分支之后的动作;
git checkout hello.txt 索引区的文件会回退到工作区的内容
git branch -m <old_name><new_name> 为branch改名字;
git diff 工作区与索引区的区别
git diff --cached 索引区与代码仓库的区别

注意:分支删除后,在分支上提交的特定对象不会被删除,也就是在索引库中的对象不会被删除,这些对象称为垃圾对象。

3.2 合并分支

实际开发中是创建分支,修改代码后合并到master主分支,然后再通过master部署代码,方便分布式开发过程中,多人协同作业.
在这里插入图片描述
下载git图形化界面工具sourcetree

3.2.1 Fast forward 合并

通过HEAD的移动来完成branch 的合并,fast forward是最简单的分支合并,它的前提是假设合并前没有人曾经修改过master 的代码,以下为fast forward合并例子:

git checkout -b bugfit; 新建立分支
echo 'test'>test2.txt;新建立文件
git add test2.txt; 
git commit test2.txt;此时已经提交待代码仓库,当前的分支为bugfit
git checkout master;切换到主分支
git merge bugfit;合并分支
git reset ORIG_HEAD;回退合并分支

3.2.2 3 way merge 合并

正常协同开发的时候,不同的开发都拿到的是master的代码分支,修改代码后各个开发的分支为C3,C4,
, 这2个分支都是基于master的修改,假如C3在C4之前进行合并,那么C3合并的时候,代码就会发生差异,3 way merge 通过新生成一个commit,来达到合并的目的,如果C3和C4是修改的同一个文件,就需要借助人为来合并,到底取舍那一个。

3.2.2 3 way merge with conflict 合并

C3和C4是修改的同一个文件,就需要借助人为来合并,到底取舍那一个,t通过一下示例进行说明

ls
echo 'test'>test.txt
git add test.txt;
git commit -m '1th commit';在master上新建立的文件修改
git checkout -b bugfit;
vim test.txt;编辑该文件增加内容
add from bugfit;
git add  test.txt;
git commit -m '2th commit';在 bugfit 上新建文件并提交
git checkout master;切换到master分支
vim test.txt;
add form master;
git add test.txt;
git commit -m '3th commit';
git merge bugfit;合并分支
系统会提示冲突,需要人为手工修改冲突
修改之后再提交
git add test.txt
git commit;

在这里插入图片描述

3.2.2 4 rebase 合并

rebase,字面上的意思是“基地重建”,在 Git 中,它指的是将一系列提交转移到另一个基准之上。与合并(merge)不同,rebase 在整合多个分支的修改时,会创建新的提交历史

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2232232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10款录屏软件来助你视频回放!!

现在互联网的普及&#xff0c;实时在线视频交流已是家常便饭&#xff0c;有时我们需要进行视频回顾&#xff0c;这就需要借助录屏软件。不管是用于游戏录制、课程制作、教学培训还是项目汇报等&#xff0c; 一款好的录屏软件都能起到事半功倍的效果。今天&#xff0c;我就来跟大…

Python复习2

一、封装函数 #自己封装len函数 s1 "hello,python" print(f"s1的长度为{len(s1)}")def my_len(data):count0for i in data:count 1print(f"{data}的长度为{count}")my_len(s1) 二、容器的排序&#xff08;排序之后的结果都会变成列表&#xf…

利用EasyExcel实现简易Excel导出

目标 通过注解形式完成对一个方法返回值的通用导出功能 工程搭建 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

基于java+SpringBoot+Vue的校园资料分享平台设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

VuePress文档初始化请求过多问题探讨

1. 背景 公司有部门使用VuePress 1.0搭建平台的帮助文档&#xff0c;前期文档不是很多&#xff0c;所以没有暴露出特别明显的问题。但随着文档的逐步迭代和内容的增多&#xff0c;出现了大量的并发请求&#xff0c;总共有218个请求&#xff0c;导致服务器带宽耗尽、响应速度下降…

入门 | Kafka数据使用vector消费到Loki中使用grafana展示

一、Loki的基本介绍 1、基本介绍 Loki 是由 Grafana Labs 开发的一款水平可扩展、高性价比的日志聚合系统。它的设计初衷是为了有效地处理和存储大量的日志数据&#xff0c;与 Grafana 生态系统紧密集成&#xff0c;方便用户在 Grafana 中对日志进行查询和可视化操作。 从架构…

C语言 运算符

时间&#xff1a;2024.11.4 一、学习内容 1、算数运算符&#xff08;加、减、乘、除法和取余&#xff09; 通用细节&#xff1a; 1.整数计算&#xff0c;结果一定是一个整数 2.小数计算&#xff0c;结果一定是一个小数 3.整数和小数计算&#xff0c;结果一定是一…

LLM | 论文精读 | AAAI | EarthVQA:向可查询地球迈进的多模态视觉问答研究

论文标题: EarthVQA: Towards Queryable Earth via Relational Reasoning-Based Remote Sensing Visual Question Answering 作者: Junjue Wang, Zhuo Zheng, Zihang Chen, Ailong Ma, Yanfei Zhong 期刊: The Thirty-Eighth AAAI Conference on Artificial Intelligence (AA…

总结拓展十五:SAP物料分割评估

一、概述 在SAP中&#xff0c;物料的分割评估是指&#xff0c;对同一个物料做不同的价值设置。即&#xff0c;根据不同的条件&#xff0c;核算其价格及记录价格的相关属性。 二、物料主数据设置 1、物料主数据-会计1视图 只有价格控制“V”可以分割评估。 2、设置评估类型…

ai翻唱部分步骤

模型部署 我是用的RVC进行的训练&#xff0c;也可以使用so-vits-svc。 通过百度网盘分享的文件&#xff1a;RVC-beta 链接&#xff1a;https://pan.baidu.com/s/1c99jR2fLChoqUFqf9gLUzg 提取码&#xff1a;4090 以Nvida显卡为例&#xff0c;分别下载“RVC1006Nvidia”和…

[综述笔记]Deep learning for brain disorder diagnosis based on fMRI images

论文网址&#xff1a;Deep learning for brain disorder diagnosis based on fMRI images - ScienceDirect 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向…

HarmonyOS:UIAbility组件概述

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。 UIAbility的设计理念&#xff1a; 原生支持应用组件级的跨端迁移和多端协同。支持多设备和多窗口形态。 UIAbility划分原则与建议&#xff1a; UIAbility组件是系统调度的基本单元&#xff0c…

jeecgbootvue2菜单路由配置静态文件夹(public)下的html

需求:想要在菜单配置src/assets/iconfont/chart.html显示页面(目的是打包上线以后运维依然可以修改数据) 官网没有相关数据&#xff1a;菜单配置说明 JeecgBoot 开发文档 看云 问题现象: 我把文件放在src/assets/iconfont/chart.html然后在vue中作为 iframe 的 src 属性&am…

【Vue框架】基础语法练习(1)

其实更多知识点已经在Vue.js官网十分清楚了&#xff0c;大家也可以去官网进行更细节的学习 https://cn.vuejs.org/ 说明&#xff1a;目前最新是Vue3版本的&#xff0c;但是Vue2已经深得人心&#xff0c;所以就是可以支持二者合用。它们最大的区别就是Vue3是组合式API&#xf…

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …

qt QScrollArea详解

1、概述 QScrollArea是Qt框架中的一个控件&#xff0c;它提供了一个可滚动的视图区域&#xff0c;用于显示超出视图大小的内容。这个控件非常有用&#xff0c;尤其是在处理大型表格、文本区域、图像集合或任何需要滚动浏览的内容时。QScrollArea本身不直接显示内容&#xff0c…

【ChatGPT】搜索趋势分析

【ChatGPT】搜索趋势分析 为了分析 ChatGPT 在过去一年的流行趋势&#xff0c;我们可以查看 Google Trends 的数据 安装依赖pytrends pip install pytrends运行以下 Python 脚本 import pandas as pd import matplotlib.pyplot as plt from pytrends.request import TrendR…

Mac如何实现高效且干净的卸载应用程序

使用Mac卸载应用程序&#xff0c;你还在使用废纸篓这个办法吗&#xff0c;看不见卸载了什么&#xff0c;看不见清理了多少&#xff0c;真的不会有残留吗 XApp Mac上的卸载专家&#xff0c;强大的垃圾逻辑检测&#xff0c;垃圾扫描更全面&#xff0c;卸载更干净 使用简单&#…

安科瑞AMB400分布式光纤测温系统解决方案--远程监控、预警,预防电气火灾

安科瑞戴婷 可找我Acrel-Fanny 安科瑞AMB400电缆分布式光纤测温具有多方面的特点和优势&#xff1a; 工作原理&#xff1a; 基于拉曼散射效应。激光器产生大功率的光脉冲&#xff0c;光在光纤中传播时会产生散射。携带有温度信息的拉曼散射光返回光路耦合器&#xff0c;耦…

GitHub上传自己的项目

目录 一、安装Git插件 1&#xff09;下载 2&#xff09;安装 二、创建Gothub的创库 三、通过Git上传本地文件到Github 四、其他 1、部分指令 2、如果已经运行过git init并设置了[user]&#xff0c;下次可以直接用 一、安装Git插件 1&#xff09;下载 下载地址&#x…