git 基础

ops/2024/9/24 20:49:52/

【一】介绍

(1)软件开发模式

  • 瀑布式开发
    • 线性、顺序的开发流程,严格按照需求分析、设计、编码、测试、交付等阶段进行。
    • 每个阶段都必须在前一个阶段完成后才能开始,因此开发周期长,难以应对需求变更。
    • 适用于需求明确、稳定且不易变更的项目。
  • 敏捷开发
    • 强调快速迭代、持续交付和团队协作。
    • 将项目划分为多个小模块或迭代周期,每个迭代周期都包含需求分析、设计、编码、测试等完整流程。
    • 团队成员之间紧密协作,通过定期召开站立会议、评审会议等方式保持信息同步。
    • 灵活应对需求变更,及时调整开发计划。
  • DevOps
    • 强调开发、测试和运维之间的协作与整合。
    • 通过自动化工具和流程,实现软件从开发到部署的全程自动化。
    • 打破开发和运维之间的壁垒,实现持续集成、持续部署和持续监控。
    • 提高软件交付速度和质量,减少故障率和停机时间。

DevOps入门理解(DevOps是什么、瀑布模型、敏捷开发、DevOps、DevOps与虚拟化、容器、微服务)_ cmcc-devops ...

  • 最大区别
    • 瀑布式开发:注重流程和文档,适用于需求明确且不易变更的项目。但开发周期长,难以应对需求变更。
    • 敏捷开发:强调快速迭代和团队协作,能够灵活应对需求变更。适用于需求频繁变更的项目。
    • DevOps:注重开发、测试和运维之间的协作与整合,通过自动化工具和流程提高软件交付速度和质量。适用于需要快速响应市场变化的项目。

git_26">(2)git介绍

  • 基本用途

    • 代码共享:Git 允许开发者将他们的代码提交到版本库中,这样其他开发者就可以访问和查看这些代码。

    • 版本管理:Git 跟踪文件的每一次更改,并允许你保存这些更改作为一个“版本”。如果你需要回退到某个特定的版本,或者查看某个文件的历史,Git 可以轻松地帮助你做到。

    • 代码合并:当多个开发者在同一文件的同一部分上进行工作时,可能会出现冲突。Git 允许你解决这些冲突,并将不同开发者的更改合并到一起。

  • 版本管理软件对比

    • SVN(Subversion)集中式版本控制系统,它有一个中心仓库(repository),所有的开发者都从这个仓库中获取和提交代码。如果中心仓库出现问题,所有的开发者都会受到影响。
    • Git分布式版本控制系统,每个开发者都有一个完整的仓库副本。这意味着即使中心仓库不可用,开发者仍然可以继续在他们自己的副本上工作,并在之后将更改同步到中心仓库。Git 的这种分布式特性使得它更加灵活和健壮。

git__40">(3)git 相关内容补充

  • Git

    • Git 是一个开源的分布式版本控制系统软件,用于敏捷高效地处理任何或小或大的项目。
  • GitHub

    • GitHub 是一个基于 Git 的代码托管和协作开发平台。 是全球最大的开源代码托管平台之一,拥有大量的开源项目和社区。
  • Gitee

    • Gitee 是国内最大的开源代码托管平台之一,与 GitHub 类似,它提供了基于 Git 的代码托管和协作开发服务。Gitee 主要面向中文开发者,拥有大量的中文开源项目和社区。
  • GitLab

    • GitLab 是一个开源的 Git 仓库管理系统。GitLab 可以在本地服务器上部署,这使其成为一个非常适合公司内部的远程仓库解决方案。GitLab 还提供了完整的 DevOps 解决方案,包括 CI/CD、监控、安全扫描等功能,使团队可以在一个平台上完成整个开发流程。
  • Bitbucket

    • Bitbucket 专注于为企业和团队提供安全、可靠的代码托管服务,并提供了一些高级功能,如权限管理、数据备份和加密等,没有开源

【二】基本使用

(1)三个区

  • 工作区(Working Directory)

    • 工作区是用户直接操作代码的地方,通常是一个文件夹。在这个区域,可以创建新的文件、修改现有的文件、删除文件或者执行其他任何文件操作。一旦修改,该修改文件就会显示红色
  • 暂存区(Staging Area)

    • 暂存区是工作区和版本库之间的桥梁。当你对工作区的文件进行了修改后,需要将这些更改添加到暂存区,以便Git能够知道哪些更改应该被包含在下一次提交中。
  • 版本库(Repository)

    • 版本库是Git用来存储所有版本信息的数据库。当将暂存区的更改提交到版本库时,Git会创建一个新的提交对象,该对象包含了关于这次更改的所有信息,如提交者、提交时间、提交说明以及一个指向父提交的指针(对于初始提交来说,这个指针是空的)。
  • 远程仓库(Remote Repository)

    • 远程仓库是存储在第三方服务器(如GitHub、Gitee、GitLab等)上的Git仓库。可以将本地仓库的更改推送到远程仓库,也可以从远程仓库拉取他人的更改。

e6a3520f-1460-400d-bbfc-3e5185ec0fb8

(2)常用命令

  • 初始化和状态相关
命令描述
git init初始化当前文件夹作为Git仓库,创建.git文件夹(不要删除)
git init 文件夹在当前文件夹下创建新文件夹,并初始化为新的Git仓库(可分步操作:mkdir 文件夹 && cd 文件夹 && git init
git status查看仓库状态,显示工作区哪些文件被修改、新增或删除
git status -s查看仓库状态的简约显示,用字符代替描述
  • 提交相关(Committing Related)
命令描述
git add 文件名/文件夹把工作区的文件或文件夹变更提交到暂存区
git add .把工作区所有变更提交到暂存区
git commit -m '注释'把暂存区的变更提交到版本库,并添加注释
git config --global user.name '用户名'全局设置Git的用户名(提交时需要)
git config --global user.email '用户邮箱'全局设置Git的用户邮箱(提交时需要)
git config user.name 'xxx'局部设置Git的用户名(提交时需要,仅对当前仓库有效)
git config user.email '4@qq.com'局部设置Git的用户邮箱(提交时需要,仅对当前仓库有效)
  • 日志相关(Logging Related)
命令描述
git log查看版本日志,显示所有的提交历史(q退出
git reflog显示HEAD的引用日志,包括所有的提交和回滚操作
git log --after 2018-x-y查看2018年x月y日之后的提交日志
git log --before 2018-x-y查看2018年x月y日之前的提交日志
git log --author author_name查看指定开发者的提交日志
  • 回退相关(Rolling Back Related)
命令描述
git checkout .撤销工作区所有文件的变更
git checkout 文件名撤销工作区指定文件的变更
git reset HEAD .撤销暂存区所有文件的提交
git reset 文件名撤销暂存区指定文件的提交
git reset --hard HEAD^回滚到上一个版本
git reset --hard HEAD~HEAD^相同,回滚到上一个版本
git reset --hard HEAD^^^回滚到上三个版本
git reset --hard HEAD~3HEAD^^^相同,回滚到上三个版本
git reset --hard 版本号回滚到指定版本号的版本

git_122">(3)git忽略文件

  • 说明

    • 在Git仓库中,有时我们并不希望跟踪所有文件和文件夹的更改,特别是那些与项目构建、配置或临时文件相关的内容。为了告诉Git哪些文件或文件夹应该被忽略,我们可以使用.gitignore文件。
    • .gitignore文件是一个文本文件,位于仓库的根目录下,用于列出应该被Git忽略的文件和文件夹模式。
  • 忽略规则

    • 文件或文件夹名:直接写文件名或文件夹名,会匹配所有目录下的同名文件或文件夹。

      git">node_modules  
      .idea  
      .vscode  
      __pycache__
      
    • 根目录文件或文件夹:在文件或文件夹名前加/,仅匹配仓库根目录下的文件或文件夹。

      git">/logs/error.log
      
    • 路径中的文件或文件夹:指定路径,匹配该路径下的文件或文件夹。

      git">b/a.txt
      
    • 通配符:使用*作为通配符,匹配任意字符(包括零个)。

      git"># 匹配所有.log和.pyc的文件
      *.log 
      *.pyc
      
    • 否定模式:在模式前加!,表示不忽略该文件或文件夹。

      git">!importantfile.txt
      
    • 忽略所有但指定:可以使用通配符与否定模式结合,忽略所有但指定文件。

      git"># 匹配所有migrations下的py文件
      **/migrationsmigrations/__init__.py/*.py  
      # 排除migrations下的__init__.py文件
      !**/migrations/__init__.py
      
  • 注意事项

    • .gitignore文件只影响尚未被跟踪的文件。如果文件已经被Git跟踪(即已经提交到仓库),则.gitignore文件中的规则不会对其产生影响。要停止跟踪这些文件,你需要从Git仓库中删除它们(使用git rm --cached命令)。
    • #符号用于在.gitignore文件中添加注释,注释行不会被Git视为忽略规则。
    • 空文件夹本身不会被Git跟踪,但是如果空文件夹中有被跟踪的文件(如.gitkeep文件或包含__init__.py的Python包),那么空文件夹也会被视为已被跟踪。
  • 后端项目忽略文件示例

    • git">__pycache__/ 
      *.pyc  .idea/  
      .vscode/  # 测试文件
      scripts/  # 迁移文件  
      **/migrations/*.py  
      !**/migrations/__init__.py  # 日志文件  
      *.log
      

git_201">【三】git多分支

(1)Git分支流

  • Git分支流,也称为Git分支模型Git分支策略,是Git版本控制系统中用于管理项目代码不同版本和功能的分支方式。

  • 简单介绍Gitflow分支模型

    • 主分支(master/main):这是项目的核心分支,包含了已经发布到生产环境的代码。通常,只有发布到生产环境的代码才会合并到这个分支。这个分支应该总是处于稳定状态,并反映项目的最终版本。

    • 开发分支(develop):这是用于日常开发的分支,包含了为下一个版本所做的最新开发修改。开发人员会在这个分支上进行新功能开发、代码优化等工作,并等待将这些更改合并到主分支中。

    • 功能分支(feature branches):这些分支是从开发分支创建的,用于开发新的功能。每个新的功能都可以创建一个新的功能分支。当功能开发完成后,可以将该分支合并回开发分支。

    • 发布分支(release branches):当开发分支达到稳定状态并准备发布时,会从开发分支创建一个发布分支。在这个分支上,可以进行必要的发布前测试、修复bug等工作。一旦准备就绪,就可以将发布分支合并到主分支和开发分支。

    • 补丁分支(hotfix branches):这些分支用于修复生产环境中的紧急bug。它们通常直接从主分支创建,并在修复完成后合并回主分支、开发分支和相关的发布分支。

(2)分支操作

以下是一个表格,对Git命令进行分类和简要说明,特别是关于分支管理的部分:

命令描述
git branch列出所有本地分支。当前所在分支前面会有星号(*)标记。
git branch -a列出所有本地和远程分支。
git branch 分支名创建一个新的本地分支,但不会切换到该分支。
git switch 分支名切换到指定的本地分支。从Git 2.23版本开始,推荐使用git switch代替git checkout来切换分支
git checkout 分支名切换到指定的本地分支(老方法)。
git checkout -b 分支名创建一个新的本地分支并立即切换到该分支。
git branch -d 分支名删除一个已合并的本地分支。
git branch -D 分支名git branch --delete --force 分支名强制删除一个本地分支,即使它尚未合并。
git merge 分支名将指定分支的更改合并到当前分支。在合并过程中,可能会出现冲突,需要手动解决。
  • 注意事项

    • 在合并分支之前,最好先确保工作目录是干净的(即没有未提交的更改)。可以使用git status命令来查看当前工作目录的状态。

    • 如果在合并分支时遇到冲突,Git会暂停合并过程并提示解决冲突。需要手动编辑冲突的文件,解决冲突后重新提交更改。

    • 在使用Git时,建议经常进行提交和拉取操作,以保持你的本地仓库与远程仓库的同步。


http://www.ppmy.cn/ops/41996.html

相关文章

解决axios发送post请求,springMVC接收不到数据问题

今天发现一个问题: vue组件中无法正确接收并处理axios请求 这个问题已经困扰我好久了,在电脑面前坐了两天只能确定前端应该是正确的发送了请求,但发送请求后无法正确接受后端返回的数据。 问题:vue组件无法接受后端数据 错误代码如…

什么是直接内存(NIO)

直接内存不受 JVM 内存回收管理,是虚拟机的系统内存,常见于 NIO 操作时,用于数据 缓冲区,分配回收成本较高,但读写性能高,不受 JVM 内存回收管理。 举例 当上传一个较大文件(200M)…

服务器docker启动

一、写sh文件 写一个sh文件,方便后续启动 docker stop nacos docker stop rabbitmq docker stop redis docker stop xxl-job-admin docker stop mysql docker stop gogs docker stop elasticsearch docker stop kibanadocker start nacos docker start rabbitmq d…

android 界面布局中图片按键的实现

在Android界面布局中实现图片按键,通常可以通过ImageButton或者ImageView结合OnClickListener来完成。下面分别介绍这两种方法: 1. 使用ImageButton ImageButton是Android提供的一个控件,它继承自ImageView,因此可以显示图片,并且具备按钮的功能,即可以监听点击事件。 …

大语言模型量化方法对比:GPTQ、GGUF、AWQ

GPTQ: Post-Training Quantization for GPT Models GPTQ是一种4位量化的训练后量化(PTQ)方法,主要关注GPU推理和性能。 该方法背后的思想是,尝试通过最小化该权重的均方误差将所有权重压缩到4位。在推理过程中,它将动态地将其权重去量化为f…

C++基础与函数解析 | 函数的声明与定义 | 函数调用 | 函数详解 | 函数重载 | 重载解析 | 递归函数 | 内联函数 | 函数指针

文章目录 一、函数基础1.基本函数定义2.函数的声明与定义3.函数调用 二、函数详解1.参数2.函数体3.返回类型 三、函数重载与重载解析1.函数重载2.重载解析 四、函数相关的其他内容1.递归函数2.内联函数3.constexpr函数(C11起)4.consteval 函数 (C20 起 )…

[AI]-(第1期):OpenAI-API调用

文章目录 一、OpenAI API中使用GPT-3.5-turbo模型充值方式使用模型计费方式价格说明相关限制和条款 二、接入一个OpenAI API流程1. 获取OpenAI API 密钥2. 集成ChatGPT到小程序3. 处理用户输入4. 调用OpenAI API5. 返回回复至小程序6. 持续优化7. Postman请求示例 三、通用AI客…

Visual Studio Add-in开发

https://www.cnblogs.com/kekec/p/10522250.html https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2017/extensibility/vsct-xml-schema-reference?viewvs-2017 https://github.com/search?lC%2B%2B&p2&qvisualstdio&typeReposi…