自学内容网 自学内容网

git 基础

【一】介绍

(1)软件开发模式

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

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

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

(2)git介绍

  • 基本用途

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

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

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

  • 版本管理软件对比

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

(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 版本号回滚到指定版本号的版本

(3)git忽略文件

  • 说明

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

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

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

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

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

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

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

      # 匹配所有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包),那么空文件夹也会被视为已被跟踪。
  • 后端项目忽略文件示例

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

【三】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时,建议经常进行提交和拉取操作,以保持你的本地仓库与远程仓库的同步。


原文地址:https://blog.csdn.net/weixin_48183870/article/details/138925329

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!