【一】介绍
(1)软件开发模式
- 瀑布式开发
- 线性、顺序的开发流程,严格按照需求分析、设计、编码、测试、交付等阶段进行。
- 每个阶段都必须在前一个阶段完成后才能开始,因此开发周期长,难以应对需求变更。
- 适用于需求明确、稳定且不易变更的项目。
- 敏捷开发
- 强调快速迭代、持续交付和团队协作。
- 将项目划分为多个小模块或迭代周期,每个迭代周期都包含需求分析、设计、编码、测试等完整流程。
- 团队成员之间紧密协作,通过定期召开站立会议、评审会议等方式保持信息同步。
- 灵活应对需求变更,及时调整开发计划。
- 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仓库。可以将本地仓库的更改推送到远程仓库,也可以从远程仓库拉取他人的更改。
(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~3 |
与HEAD^^^ 相同,回滚到上三个版本 |
git reset --hard 版本号 |
回滚到指定版本号的版本 |
(3)git忽略文件
-
说明
- 在Git仓库中,有时我们并不希望跟踪所有文件和文件夹的更改,特别是那些与项目构建、配置或临时文件相关的内容。为了告诉Git哪些文件或文件夹应该被忽略,我们可以使用
.gitignore
文件。 .gitignore
文件是一个文本文件,位于仓库的根目录下,用于列出应该被Git忽略的文件和文件夹模式。
- 在Git仓库中,有时我们并不希望跟踪所有文件和文件夹的更改,特别是那些与项目构建、配置或临时文件相关的内容。为了告诉Git哪些文件或文件夹应该被忽略,我们可以使用
-
忽略规则
-
文件或文件夹名:直接写文件名或文件夹名,会匹配所有目录下的同名文件或文件夹。
gitnode_modules .idea .vscode __pycache__
-
根目录文件或文件夹 :在文件或文件夹名前加
/
,仅匹配仓库根目录下的文件或文件夹。git/logs/error.log
-
路径中的文件或文件夹:指定路径,匹配该路径下的文件或文件夹。
gitb/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多分支
(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时,建议经常进行提交和拉取操作,以保持你的本地仓库与远程仓库的同步。
-