git workflow

news2024/11/23 12:44:34

git workflow

讲一下常用的 workflow,这个主要是根据自己个人工作经验,每个项目在实践上总会有些许的不同,求同存异。

单分支工作

最糟糕的 workflow 是所有人全都在 main/master 上干活,如果只是两三个人的 team 可能还能存活,但是如果工作的人数比较多的话,挺麻烦的……

第一点是成本,因为一些项目可能会继承了一些 CI/CD 的东西,每一次推送到主分支上都会引起 CI/CD,有一些的 pricing tier 上是按照重部署多少次收钱,因此可能会造成额外的成本。

第二点可能会破坏某个环境,假设你的 main 绑定了开发环境,如果有一些本地的变化使得这个分支没法运行了,那么就会直接搞得开发环境也无法运行。如果没有开发只有生产,那么就会造成项目停摆,客户无法继续使用产品。

第三点就是非常难以管理,有一些团队(比如说我之前的团队)会要求所有的人在每天结束的时候 commit 自己的变化,假设这里只有一个分支,下班时间大家都抢着往一个分支上推东西,那么可以想象一下每一次往上推都会因为 remote changes 被拒绝,拉下最新的代码又要修 merge conflicts 有多烦。

第四点就是这也非常的开发不友好,假设说某位开发有一些修改不是很确定,那么 ta 需要把当前不工作的版本推上云端去询问一下意见,这种情况下主分支肯定是没办法运行了,第二天别人来拉最新的代码,那么本地的版本也会不工作。

最后也就是新功能的开发,哪怕就是单人的项目,如果想要测试一些新的功能,或者是进行版本的迭代,仅仅在一个分支上工作也是非常难以满足需求的。

多分支协作

这也是常见的工作流方式,每一个子分支可以代表一个功能(feature),等到整个子分支实现之后,再将子分支合并到 main/master 上,如:

---
title: Example Git Branch Workflow
---
gitGraph
    commit
    branch feature
    commit
    branch feature2
    checkout feature2
    commit
    commit
    checkout main
    merge feature
    commit id:"deploy 4d89eb17" tag:"release"
    checkout feature2
    commit
    checkout main
    merge feature2
    commit id:"deploy ed34b75f" tag:"release"

在这里插入图片描述

主分支上负责两个功能:

  1. 合并已经实现的功能
  2. release

这样能够有效的解决前面提到的几个问题,并且,如果当前合并的功能可能会导致一些功能无法使用,这个 workflow 能够很快地回滚到上一个工作的版本。

合并分支

最暴力的做法就是直接 merge 到 main 分支上,如 git merge <branch-name>,然后推上去。但是在企业开发环境,这种事情是要禁止的 ❌

正常来说合并分支的做法是提一个 Pull/Merge Request,在群组里发个消息让对应的同事 review 一下。这个过程每个平台其实都不太一样呢,原因大概是因为 PR/MR 这个是每个平台自己实现的。

依旧之前做 demo 的 repo 为例,这里已经有了好几个 branch:

在这里插入图片描述

这时候我就可以切换到 Pull Request 下面:

在这里插入图片描述

点击 New PR,再选择对应的分支进行 PR,然后平台就会对比两个 branch 之间的差异:

在这里插入图片描述

在这里插入图片描述

如果可以 fast forward,那么 git 就会显示 able to merge 的标记,否则就会让人修复一下 merge conflict 再继续:

在这里插入图片描述

当别的同事过来看 PR 的时候,如果同意你的 PR,就可以选择直接 merge,否则也可以留下评论回复一下问题所在,交换意见,最后修改完再 merge:

在这里插入图片描述

我找了个有 conflict 的例子,大概就是这样的:

在这里插入图片描述

这个情况下不修复 conflict 的话,github 会阻止用户 merge 进去。

branch protection

branch protection 也是在 repo 的 settings 下面可以设置的,制定了 rule 之后可以防止别人使用 git push -f 强行将变化推到保护的分支上,或是删除主分支:

在这里插入图片描述

在这里插入图片描述

如果是比较大的项目,就可以设置不同的 patterns,比如说除了 main 这个固定分支外,有可能所有在 release/ 下面的也不能删除,或是其他的环境 qa/ 等。

其他一些设定就是包括 PR 必须要被 review 等,下面就加了一个 PR 必须要被 review 的规定,于是之前的 PR 就被 block 了:

在这里插入图片描述

fork

clone 是将项目克隆到本地,但是远程的 reference 还是原始的项目。fork 会将项目 clone 自己的账户下,这样就有了不同的 repo。

我个人倒是没试过 fork open source 的项目,不过 fork 完了项目之后,还可以提 PR,将自己的变化推回原本的项目中。

我倒是没什么 forked 的项目,不过 UI 上会有一些提示,然后问你要不要做 PR,所以这里就多嘴提一句了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/458993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

忆暖行动|“四方食事,不过人间一碗烟火”

四方食事,不过人间一碗烟火 外婆&#xff0c;如果要您选择一个乡村很有代表的食物&#xff0c;您会选择什么&#xff1f; 当然是米饭&#xff0c;人要吃饭&#xff0c;没有米饭就没有力气劳作&#xff0c;而且大米还能做很多美食&#xff0c;比如米饼&#xff0c;米糕&#x…

亚马逊测评有哪些误解?

亚马逊平台是全球性的互联网电商网络平台&#xff0c;成立至今&#xff0c;平台站点覆盖了全球多个国家&#xff0c;各个地区之间的商品交易也变得更加频繁&#xff0c;随着平台商家增多&#xff0c;为了提高自身排名&#xff0c;越来越多的商家开始找人为他们的店铺和产品进行…

Git比较好用的一些操作

git stash 可以缓存一些修改&#xff0c;不用做提交。例如当前分支做了修改&#xff0c;不想提交&#xff0c;有需要切换分支时候。 常用命令&#xff1a; git stash list&#xff1a;查看缓存列表 git stash list git stash save “备注信息”: 缓存当前分支所有修改 git …

快乐数链表篇

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1&#xff…

【数据库数据恢复】ORACLE常见数据灾难的数据恢复可能性分析

Oracle数据库常见数据灾难&#xff1a; 1、ORACLE数据库无法启动或无法正常运行。 2、ORACLE ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件损坏。 5、ORACLE DUMP文件损坏。 Oracle数据库常见数据灾难的数据恢复可能性分析&#xff1a; 1、O…

正则表达式 - 简单模式匹配

目录 一、测试数据 二、简单模式匹配 1. 匹配字面值 2. 匹配数字和非数字字符 3. 匹配单词与非单词字符 4. 匹配空白字符 5. 匹配任意字符 6. 匹配单词边界 7. 匹配零个或多个字符 8. 单行模式与多行模式 一、测试数据 这里所用文本是《学习正则表达式》这本书带的&a…

统计学习方法第二章——感知机

x.1 前言 perceptron感知机是二分类的线性分类模型&#xff0c;输入为实例的特征向量&#xff0c;输出为实例类别(取-1&#xff0c;1)。perceptron旨在求出将训练数据进行线性划分的分离超平面&#xff0c;属于classification判别模型&#xff0c;策略为基于误分类的损失函数&…

MCU短按长按的功能

.外设&#xff1a;一个io口、一个定时器。 为了降低上手的门槛&#xff0c;本文仅使用一个IO口作演示。 实现思路 使用定时器&#xff0c;定时20ms来读取简化的按键状态机。 这里简化了状态机&#xff0c;大家只需明白三个概念。 状态&#xff1a;数量为有限个&#xff0c;记…

css初入门:网页布局之网格布局-grid

文章目录 网格布局-grid1、设置网格布局2、网格布局介绍3、网格容器grid-template-columns属性grid-template-rows 属性justify-content 属性justify-items属性align-content 属性 4、网格项目grid-column-start、grid-column-start、grid-column属性grid-row-start、grid-row-…

ChatGPT来了,必须紧跟时代潮流!

大家好&#xff0c;我是瓜叔。 正如标题所示&#xff0c;最近几周令人难以置信的兴奋。几乎每天都有surprise的新AI产品发布&#xff0c;特别是ChatGPT-4和AI绘画。这是一种科幻即将成为现实的感觉。例如&#xff0c;看看下面的网络图像&#xff0c;它是由AI生成的。当我看到它…

我的HackerOne漏洞赏金平台漏洞挖掘流程

简介 高强度在hackerone平台挖了一周的漏洞&#xff0c;在这里分享一下经验 选定目标 hackerone有两种src&#xff0c;一种是给钱的&#xff0c;一种是免费的&#xff0c;我一般都是选的有钱的去挖 假如我选择了这个作为今天的挖洞目标 首先需要往下滑&#xff0c;看他不收…

银行系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 ​​​​​​​ 本系统源码地址&#xff1a;​​​​​​​https://download.csdn.net/download/qq_50…

科大讯飞的2022:夯实“根据地”业务,以技术创新点燃大模型产业落地的“星星之火”...

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 4月20日晚&#xff0c;科大讯飞正式公布2022年度及2023年度第一季度业绩报告。财报数据显示&#xff0c;公司2022年度实现营业收入188.20亿元&#xff0c;同比增长2.77%&#xff0c;实现毛利76.84亿元&#xff0c;较上年增长…

局域网 - CSMA/CD

文章目录 1 概述1.1 局域网的拓扑结构 2 CSMA/CD2.1 三种监听算法2.2 冲突检测原理2.3 二进制指数后退算法 3 扩展3.1 网工软考真题 1 概述 1.1 局域网的拓扑结构 2 CSMA/CD 对 总线型、星型 和 树型 拓扑访问控制协议是 CSMA/CD&#xff08;Carrier Sense Multiple Access/ …

Android硬件通信之 WIFI通信

一&#xff0c;简介 1.1 随着网络的普及和通信技术的发展&#xff0c;网络的传输速度也越来越快&#xff0c;wifi技术也还成为手机设备最基本的配置。我们可以通过wifi实现手机与手机之前的信息传输&#xff0c;当然也可以与任意一台有wifi模块的其它设备传输。 1.2 wifi与蓝…

mysql 命令集

数据库操作 查看库命令 show databases; 使用某个库&#xff08;可以不用分号 &#xff1b;&#xff09; use 库名 查看库下所有的表 show tables; 显示一个表下的所有字段和类型 desc user(表名); 查看一个表的建表语句 show create table user\G 创建数据库db1 cre…

gitee教程精简版

$ git config --global user.name "Your Name" $ git config --global user.email "emailexample.com" 设置名字和邮箱 初始化 git init git add test.txt 将文件预先添加到git仓库 git commit -m "刚刚我创建了一个文本"提交给git仓库&#x…

Android硬件通信之 蓝牙Mesh通信

一&#xff0c;简介 蓝牙4.0以下称为传统蓝牙&#xff0c;4.0以上是低功耗蓝牙&#xff0c;5.0开始主打物联网 5.0协议蓝牙最重要的技术就是Mesh组网&#xff0c;实现1对多&#xff0c;多对多的无线通信。即从点对点传输发展为网络拓扑结构&#xff0c;主要领域如灯光控制等&…

物联仓储系统ZigBee组网原理

在嵌入式项目物联仓储系统中&#xff0c;使用cortexM0模拟仓库&#xff0c;cortex-A9模拟服务器&#xff0c;两块开发板之间使用ZigBee技术实现数据接收和发送&#xff0c;本文就介绍一下ZigBee组网的原理和相关步骤。 1.组网概述 组建一个完整的zigbee网状网络包括两个步骤&am…

VSCode连接远程服务器调试代码详细流程

文章目录 1.远程连接服务器2. 打开项目文件目录3. 配置调试环境 在研究人工智能项目时&#xff0c;很多时候本地机器性能不够&#xff0c;只能把代码拉倒服务器上&#xff0c;然后利用服务器资源来运行代码。遇到问题时需要调试&#xff0c;本文详细介绍利用VScode来调试远程服…