当前位置: 首页 > article >正文

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

上云管理之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.kler.cn/a/379974.html

相关文章:

  • 爬虫学习4
  • DCN网络进行新冠肺炎影像分类
  • 代码随想录第十五天| 110.平衡二叉树 、 257. 二叉树的所有路径 、404.左叶子之和、222.完全二叉树的节点个数
  • 针对解决前后端BUG的个人笔记
  • ICPC区域赛成都站【赛后回顾+总结】
  • 基于Openwrt系统架构,实现应用与驱动的实例。
  • 中汽测评观察 亲子出行健康为先,汽车健康用材成重要考量
  • PHP常量
  • Unity 生命周期的事件顺序
  • 32.Redis高级数据结构HyperLogLog
  • [数组排序] 0912. 排序数组
  • 使用python与Flask对pdf格式文件进行删改
  • 【新手入门软件测试--该如何分辨前后端问题及如何定位日志--前后端问题分辨与日志定位查询问题】
  • 论文笔记(五十四)pi0: A Vision-Language-Action Flow Model for General Robot Control
  • 使用MongoDB Atlas构建无服务器数据库
  • 金和OA-C6 ApproveRemindSetExec.aspx XXE漏洞复现(CNVD-2024-40568)
  • WordCloudStudio:AI生成模版为您的文字云创意赋能 !
  • 【大数据学习 | kafka】简述kafka的消费者consumer
  • excel的宏1
  • AI信息速递 20241105
  • 如何在BSV区块链上实现可验证AI
  • 基于ant组件库挑选框组件-封装滚动刷新的分页挑选框
  • [C++]使用cpphttplib的http服务上传和下载
  • golang运行某个类下所有的基准测试
  • 得物多模态大模型在重复商品识别上的应用和架构演进
  • Django ORM详解: model转字典的几种方法