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

news/2024/11/8 14:48:53/

上云管理之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.ppmy.cn/news/1545378.html

相关文章

2-142【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真

【软件无线电原理与应用作业】基于matlab的圆形阵列的波束形成进行仿真&#xff0c;具有14页文档。假设发射信号载频为1GHz&#xff0c;圆形阵列半径为0.8米&#xff0c;在圆周上均匀布置30个阵元。1.画出指向0度的方向图。2.如果目标在0度&#xff0c;有一不相干的干扰信号在3…

测试开发面试题记录

1. TCP与UDP的区别及应用场景 TCP (传输控制协议)&#xff1a; 特点&#xff1a;面向连接&#xff0c;可靠性高&#xff0c;数据顺序保证&#xff0c;流量控制和拥塞控制。应用场景&#xff1a;文件传输&#xff08;FTP&#xff09;&#xff0c;电子邮件&#xff08;SMTP&#…

丹摩征文活动|详解 DAMODEL(丹摩智算)平台:为 AI 开发者量身打造的智算云服务

本文 什么是 DAMODEL&#xff08;丹摩智算&#xff09;&#xff1f;DAMODEL 的平台特性快速上手 DAMODEL 平台GPU 实例概览创建 GPU 云实例 储存选项技术支持与社区服务结语 在人工智能领域的飞速发展中&#xff0c;计算资源与平台的选择变得尤为重要。为了帮助 AI 开发者解决高…

保障性住房管理:SpringBoot技术优势分析

3系统分析 3.1可行性分析 通过对本城镇保障性住房管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本城镇保障性住房管理系统采用SSM框架&#xff0c;JA…

低代码环境中的领域与根实体解析

在现代软件开发中&#xff0c;低代码平台的兴起使得开发者能够更快速地构建应用程序。在这一过程中&#xff0c;理解领域&#xff08;Domain&#xff09;和根实体&#xff08;Root Entity&#xff09;的概念变得尤为重要。这些概念不仅帮助开发者组织和管理复杂系统中的数据和业…

Transformer究竟是什么?预训练又指什么?BERT

目录 Transformer究竟是什么? 预训练又指什么? BERT的影响力 Transformer究竟是什么? Transformer是一种基于自注意力机制(Self-Attention Mechanism)的神经网络架构,它最初是为解决机器翻译等序列到序列(Seq2Seq)任务而设计的。与传统的循环神经网络(RNN)或卷…

免费数据集网站

1、DataSearch https://datasetsearch.research.google.comhttp://DataSearch 2、FindData findata-科学数据搜索引擎https://www.findata.cn/ 3、Kaggle Kaggle: Your Machine Learning and Data Science CommunityKaggle is the world’s largest data science community …

MySQL rand()函数、rand(n)、生成不重复随机数

文章目录 一、rand()与rand(n)二、rand()使用示例2.1、rand()与order by/group by使用随机排序分组2.2、round()与rand()的组合使用2.3、rand与ceiling的组合使用2.4、rand与floor组合使用2.5、rand与md5组合使用 三、总结3.1、rand()与rand(n)的区别 有时候我们想要生成一个唯…