1.Git 工作流 #

Git 工作流描述了如何在团队中使用 Git 进行协作。不同的团队和项目可能会选择不同的工作流,但以下是一些常见的 Git 工作流:

1.1 集中式工作流 (Centralized Workflow): #

以下是一个简单的集中式工作流(Centralized Workflow)流程图:

            +------+
            |      |
            | 主分支 |
            |      |
            +---+--+
                |
   +----+       |       +----+
   |    |       |       |    |
   | 开发者A  +----->   | 开发者B |
   |    |       |       |    |
   +----+       |       +----+
                |
            +---+--+
            |      |
            | 主分支 |
            |      |
            +------+

在集中式工作流中:

  1. 所有开发者都从一个中心的主分支(或称为mastermain)克隆仓库。
  2. 开发者在本地进行更改。
  3. 开发者将他们的更改直接推送回主分支。

这种工作流确保了所有开发者都在一个单一的分支上工作,简化了管理,但也可能导致冲突,特别是在多人同时工作时。如果两个开发者几乎同时进行更改并尝试推送它们,那么可能需要一些冲突解决策略。

1.2 功能分支工作流 (Feature Branching): #

绘制“功能分支工作流”(Feature Branching)流程图需要展示主要分支、如何从主分支切出功能分支、开发、测试,以及如何将功能分支合并回主分支的流程。

下面是一个简单的示意图:

+----------------+     +-------------------+
|                |     |                   |
|    主分支      +<----+   功能分支1       |
|  (Main Branch) |     | (Feature Branch1) |
|                |     |                   |
+----+-----+-----+     +-------------------+
     |
     |   +-------------------+
     |   |                   |
     +<--+   功能分支2       |
     |   | (Feature Branch2) |
     |   |                   |
     |   +-------------------+
     |
     |   +-------------------+
     |   |                   |
     +<--+   功能分支3       |
     |   | (Feature Branch3) |
         |                   |
         +-------------------+

步骤说明:

  1. 从主分支(Main Branch)切出一个新的功能分支(Feature Branch)。
  2. 在功能分支上进行开发和测试。
  3. 完成开发后,合并功能分支回主分支。

注意:在实际操作中,可能还需要其他步骤,如解决合并冲突、代码审查等。

1.3 Gitflow 工作流: #

Gitflow 工作流是一个 Git 工作流设计,它定义了一个围绕项目发布的严格分支模型。以下是 Gitflow 工作流的简化版本的流程图:

这个流程图描述了 Gitflow 工作流中的主要分支和它们之间的交互。 开发者从develop分支开始,创建一个新的feature分支来开发新功能。一旦功能完成,它会被合并回develop分支。 当准备进行一个新的发布时,从develop分支创建一个release分支。 一旦发布准备好,release分支会被合并到masterdevelop分支。 如果生产中发现了错误,可以从master分支创建一个hotfix分支,修复错误后,将其合并回masterdevelop分支。

2.gitflow 工作流 #

2.1 创建项目 #

git init
git add -A
git commit -m"init"
git tag v1.0.0
git remote add origin git@gitee.com:zhang_renyang/tmall.git
git push origin master
git push origin v1.0.0

2.2 克隆项目 #

git clone git@gitee.com:zhang_renyang/tmall.git
cd tmall

2.3 创建开发分支 #

git branch
git checkout master
git pull
git branch develop
git checkout develop
或
git checkout -b develop
git push -u origin develop

2.4 创建特性分支 #

git branch feature/feature1
git branch feature/feature2
git push origin feature/feature1
git push origin feature/feature2

2.5 开发人员开发项目 #

2.5.1 开发人员 1 开发项目 #

git clone git@gitee.com:zhang_renyang/tmall.git
cd tmall
git branch -r
git checkout -b feature1 origin/feature/feature1
touch feature1.txt
git add -A
git commit -m"完成feature1"

2.5.2 开发人员 2 开发项目 #

git clone git@gitee.com:zhang_renyang/tmall.git
cd tmall
git branch -r
git checkout -b feature1 origin/feature/feature2
touch feature2.txt
git add -A
git commit -m"完成feature2"

2.6 开发人员合并到 develop 分支 #

2.6.1 开发人员 1 合并到 develop 分支 #

2.6.2 开发人员 2 合并到 develop 分支 #

2.7 创建预发布分支 #

git checkout -b  develop origin/develop
git pull
git checkout -b release/v1.1.0
git push origin release/v1.1.0

2.8 测试预发布分支 #

git clone git@gitee.com:zhang_renyang/tmall.git
git checkout -b release/v1.1.0 origin/release/v1.1.0

2.9 合并到 master #

合并release/v1.1.0分支到 master

2.10 打 tag #

git checkout master
git pull
git tag v1.1.0
git push origin v1.1.0

2.11 热修复 BUG #

git checkout master
git pull origin master
git checkout -b hotfix/hotfix1
touch hotfix1.txt
git add -A
git commit -m"fix(): add hotfix1.txt"
git push origin hotfix/hotfix1

2.12 合并 hotfix 到 master #

2.13 创建新的 tag #

git checkout master
git pull origin master
git tag v1.1.1
git push origin v1.1.1

2.14 删除分支 #

  1. 删除本地分支:
git branch -D 分支名称
git branch -D hotfix/hotfix1
git branch -D release/v1.1.0
git branch -D feature/feature1
git branch -D feature/feature2
  1. 删除远程分支:
git push origin --delete 分支名称

git push origin --delete hotfix1
git push origin --delete v1.1.0
git push origin --delete feature1
git push origin --delete feature2

参考 #

1. git #

Git是一个分布式版本控制系统。下面是一些基本概念和命令:

  1. 仓库 (Repository): 一个存放项目代码的地方。

  2. 提交 (Commit): 将代码的更改保存到仓库。

  3. 分支 (Branch): 代码的不同版本。默认主分支名为mainmaster

  4. 克隆 (Clone): 复制仓库到本地。

  5. 拉取 (Pull): 从远程获取最新的更改。

  6. 推送 (Push): 将本地的更改发送到远程仓库。

  7. 合并 (Merge): 将一个分支的更改合并到另一个分支。

常用命令:

2. sourcetree #

SourceTree是一款流行的图形界面 Git 和 Mercurial 版本控制工具。它为用户提供了一个直观的界面,使得版本控制操作变得更加简单和直观,而无需依赖命令行。

以下是 SourceTree 的基本功能和使用:

  1. 仓库管理:

    • 克隆: 通过 URL 克隆远程仓库到本地。
    • 打开现有仓库: 添加并管理本地的 Git 仓库。
    • 创建新仓库: 在本地创建一个新的 Git 仓库。
  2. 提交:

    • 可以查看未提交的更改、暂存更改,并进行提交。
  3. 分支和标签:

    • 创建、删除和切换分支。
    • 创建和删除标签。
  4. 合并和变基:

    • 合并分支。
    • 变基操作。
  5. 拉取和推送:

    • 从远程仓库拉取更改。
    • 推送本地更改到远程仓库。
  6. 历史和日志:

    • 查看提交历史。
    • 查看各个提交的详细差异。
  7. 冲突解决:

    • 如果合并或拉取操作导致冲突,SourceTree 提供了工具来帮助解决这些冲突。
  8. 子模块和子仓库:

    • 如果使用 Git 子模块或 Mercurial 子仓库,SourceTree 也支持这些功能。
  9. 图形界面:

    • 一个直观的图形化的提交历史,方便用户理解分支、合并和其他操作的流程。
  10. 其他功能:

  11. 如 stash、cherry-pick、回滚等高级功能都可以在 SourceTree 中轻松完成。

  12. 闪退解决方案

  13. 删除 C:\Users\zhangrenyang\AppData\Local\Atlassian\SourceTree.exeUrl***

3. push #

git push命令中,-u选项是--set-upstream的简写。使用-u--set-upstream选项时,它会做以下两件事:

  1. 推送分支到远程仓库:它会将当前分支推送到指定的远程仓库。

  2. 设置上游跟踪:除了推送分支,它还会设置远程分支为当前分支的上游(或称为"跟踪")分支。这意味着,在未来,当你从这个分支执行git pullgit push(不带其他参数)时,Git 会知道默认从哪个远程分支获取或推送更改。

设置上游跟踪分支的好处是,它简化了日常的 Git 操作。例如,如果你已经设置了上游跟踪分支,那么下次你想从远程仓库更新当前分支时,只需简单地运行git pull,而无需指定远程仓库和分支名。同样,当你想推送更改时,只需运行git push

总之,-u选项在推送分支的同时,还帮助你设置上游跟踪,从而简化了后续的 Git 操作。

4. semver #

SemVer 是“Semantic Versioning”的缩写,也就是“语义化版本”。它是一个版本命名规范,旨在帮助开发者更容易地理解软件之间的依赖关系和兼容性。

按照 SemVer 的规范,一个版本号应该由三部分组成:MAJOR.MINOR.PATCH,例如2.5.0。每一部分的意义如下:

  1. MAJOR: 主版本号。当你做了不兼容的 API 改变时,你需要增加这个数字。
  2. MINOR: 次版本号。当你增加了向后兼容的新功能时,你需要增加这个数字。
  3. PATCH: 补丁版本号。当你做了向后兼容的问题修复时,你需要增加这个数字。

除了主要的版本号,SemVer 还允许在版本号后面添加标签和构建元数据。例如:1.0.0-alpha+20130313144700

其中:

为什么使用 SemVer?

总结:SemVer 是一个版本命名规范,旨在清晰、系统地表示版本信息,使得开发者和用户都可以更容易地理解软件版本之间的关系。