Git 工作流程和 Gerrit

2024-04-26

我正在尝试使用 Gerrit 实现“git-flow”类型的工作流程,但我似乎无法弄清楚最后一块拼图。

我的问题有两个先决条件:

  • Gerrit 只会对一个分支执行合并
  • 我不允许将合并提交推送到 Gerrit。更改获得批准后,合并必须由 Gerrit 完成

我想解决的问题如下。考虑一下这个 git 情况:

Master 0 
        \
         \
Develop   0-----0-----0-----0

有一个具有一次提交的 master 分支和一个从 master 分叉出来并具有多个额外提交的开发分支。一段时间后,开发分支被合并回主分支以创建下一个生产版本。开发人员使用来自开发的主题分支并进行严格的变基。在推送之前,他们的提交总是基于最新的上游开发。这应该会导致线性历史记录并且仅快进提交。

现在假设有人从 master 创建了一个修补程序分支并合并回 master:

Master 0--------0 HF 
        \
         \
Develop   0-----0-----0-----0

此提交现在仅合并到主分支,但开发人员需要在其开发分支中进行此提交,以将错误修复合并到他们的更改中。通常,您会合并主分支来开发开发分支,但考虑到我的先决条件,这是不可能的,因为它将创建本地合并提交。

我的问题是:如何将主分支的新提交合并到本地开发分支中,以便开发人员的任何新更改都将包含错误修复?理想情况下,我会修改我的脚本,首先将错误修复更改应用到本地开发分支(合并但没有合并提交),然后重新设置开发人员的提交和推送。这样,错误修复将自动添加到他们的新更改中,并且将被视为新提交的一部分,而不是单独的提交。

我一直在思考可能的解决方案:

  • 精挑细选对开发分支的提交。我相信当下次开发与 master 合并时,这总是会导致重复提交。有没有办法解决?
  • 变基如下所述:http://davitenio.wordpress.com/2008/09/27/git-merge-after-git-cherry-pick-avoiding-duplicate-commits/ http://davitenio.wordpress.com/2008/09/27/git-merge-after-git-cherry-pick-avoiding-duplicate-commits/。由于开发分支已发布,这可能会导致问题,或者不会吗?

我希望我的问题很清楚。如果需要进一步说明,请告诉我。我知道我的工作流程非常严格,但与 Gerrit 结合使用将是理想的选择。如果无法完成,那么我可能会允许合并提交......


在考虑了各种选择之后,我决定放弃这种方法。在我看来,Gerrit 的大部分目标是单一集成分支开发。

当更改需要合并到两个分支时(例如,需要掌握和开发的修补程序),它会让您跳过各种麻烦,这相当于额外的工作/审查。我决定坚守其中一个分支。

我认为 Git 流程模型并不真正适合 Gerrit 设计。如果其他人将 Gerrit 与 Git 流程集成,我很想听听他们的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git 工作流程和 Gerrit 的相关文章

  • 如何从现有的远程分支创建本地分支?

    我想从现有的远程分支 假设是远程 A 创建一个分支 然后将更改提交到存储库 我已使用以下命令从现有的远程 A 创建本地分支 git checkout remote A git branch master remote A 现在我已经使用以下
  • Git Grep 颜色选项解释和/或比较

    我正在尝试自定义我的 Git 颜色 读完后文档 https git scm com docs git config 我找到了我想要设置的选项 除了 Grep 之外 一切都工作正常 我意识到 我过去并没有真正使用过它 我想用相同的调色板为其设
  • 通过 Git/SVN 将前缀 ? 添加到代码中

    怎么加前缀 v VersionNumber使用 Git SVN 高效地访问存储库中的每个文件 我发现 SO 使用这种做法为其存储库中的每个特定文件提供版本号 他们使用SVN 我想知道如何使用 Git 做同样的事情 举几个例子 1 2 在你的
  • Capistrano 3 运行每个命令两次(新安装)- 配置问题

    我刚刚完成第一次 Capistrano 安装 大部分内容都保留为默认设置 我配置了我的服务器 其身份验证 远程文件夹以及对 git 存储库的访问 我使用 capistrano 将 php 代码部署到我的服务器 上限分期部署 and 上限生产
  • 从 Git 中的分支父级中提取更改

    如何从 Git 中的分支的父级中提取更改 特别是在 github 配置的项目中 例如 假设我分叉了http github com originaluser originalproject http github com originalus
  • git推送失败:`拒绝更新签出的分支:refs/heads/master`

    我想将我对 JBoss 配置的本地修改存储在 git 中 为此 我设置了以下结构 lrwxrwxrwx 1 jboss jboss 19 Jan 24 11 53 current gt jboss as 7 1 0 CR1b drwxr x
  • Git Visual Studio 与 Bitbucket confluence 连接到现有项目错误/获取失败

    如何使用 Visual Studio 17 从现有 Bitbucket GIT 存储库中提取数据 Error git 因致命错误而失败 找不到 xyz 存储库 I added 这个迷雾 https marketplace visualstu
  • git 奇怪的彩色终端响应[重复]

    这个问题在这里已经有答案了 最近我被下面的彩色终端响应吓死了 它是由 git push 命令触发的 Does anybody have a clue where this colored response comes from 只是猜测 但
  • 具有服务器端挂钩的托管 Git 解决方案?

    已经有一个类似的 版本控制托管解决方案 带有预提交挂钩 关于SO的问题 然而 提出这个问题的用户只需要客户端钩子 我正在寻找一个允许您配置的 Git 主机服务器端 hooks 我寻找这个的原因是为了防止开发人员能够在特定分支上 push f
  • 签入时 git-tf 告诉我“无法锁定”;我该如何修复它?

    我正在使用 git tf 推送到 TFS 项目 有时 当我尝试检查 TFS 中的一个或多个提交时 我会收到如下消息 正在连接到 TFS 签入 MyProject 0 git tf 无法锁定 MyProject 这是什么意思 是什么让我无法锁
  • 将两个相似的远程 git 存储库合并为一个

    我已经做了一些搜索并阅读了 git 书籍和网络上的一些地方 例如 git 但我找不到正确的方法来做到这一点 我有两个 git 存储库 位于两台不同的机器上 这些 git 存储库中的每一个都保存程序的配置 当您比较两个存储库时 配置的某些部分
  • git push origin master 失败

    我正在尝试将现有文件夹上传到 gitHub 按照说明 我在 Windows 中输入了以下内容 git remote add origin email protected cdn cgi l email protection myname m
  • 即使在签出到另一个分支后也无法删除本地分支

    我正在尝试删除我的本地分支并尝试了我在这里找到的大多数解决方案 即签出到另一个分支然后运行git branch D or d
  • 没有共同的参考文献,也没有指定;什么也不做

    我有一个本地 git 项目 我想将其添加到 gitolite 中 显然这很难 所以我放弃了这个想法 我创建了一个新的 gitolite 存储库 将其添加到 gitolite admin conf gitolite conf 并提交并推送更改
  • 在 GitHub 上更新拉取请求后如何恢复审核流程?

    我分叉了 GitHub 存储库并创建了拉取请求 审稿人要求我修改 要求更改1 条评论请求由具有写入权限的审阅者进行更改 了解更多 https docs github com en github collaborating with issu
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • 获取引用而不下载对象[重复]

    这个问题在这里已经有答案了 我想检查 origin master 是否与我的 HEAD 不同 I do not想要git fetch 因为它可能非常昂贵 我滥用 git 的方式使得成本高得令人望而却步 任何允许我从远程获取提交列表或顶部提交
  • 理解 git log --stat 输出

    我试图理解的输出git log stat命令 第一个输出 commit 4c90aee323acc337a37040e02a0a3644f4155738 Date Fri May 1 22 46 11 2015 0400 Submittin
  • 我可以用一个命令销毁并重新创建 Git 远程分支吗?

    在 Git 中 我有时会在长期运行的分支上工作 我喜欢时不时地重新建立 master 基础 以便在准备好时使合并变得更容易 变基后 我无法将先前推送的分支推送到远程 因为我的分支的历史记录不再与该分支的远程历史记录一致 所以我必须先删除它
  • 计算机死机后 Git 存储库损坏

    我的电脑死机了 现在我的一个 git 存储库也坏了 当我尝试结账大师时 它告诉我 warning ignoring broken ref refs heads master error Your local changes to the f

随机推荐

  • CUDA线程执行顺序

    我有一个 CUDA 程序的以下代码 include
  • 如何实现 Spring XD 接收器?

    到目前为止 我已经实现了 Spring XD 处理器 例如像这样 MessageEndpoint public class MyTransformer Transformer inputChannel input outputChannel
  • Rcpp 调试 - 致命错误:Datetime.h:没有这样的文件或目录; xtsAPI.h:没有这样的文件或目录

    我正在使用 Rcpp 来处理 Datetime 和 xts 数据 但是 我收到错误No such file or directory以下代码的第 2 行和第 3 行均出现错误 include
  • 如何使用 js/uml 对 JavaScript 文件进行逆向工程?

    Goal 我的目标是从我的 JavaScript 项目 由多个 js 文件组成 中获取 UML 模型并将其存储为 XMI 我已经走了多远 我在网上搜索了一下 发现js uml是第一个去的地方 我已经设法让 js uml 插件与 Eclips
  • C# 指针与 C++ 指针

    我一直在学习编程 并选择 C 和 C 编程作为第一语言 更具体地说 我有一本旧的 C 书 有人好心地借给我 我用它来学习 C 我使用 Visual Studio Express 并使用 C 和 C 编写 我感兴趣的一个领域是直接内存管理的能
  • 什么时候应该使用Environment.Exit来终止控制台应用程序?

    我在工作中维护着许多控制台应用程序 我在其中一些应用程序中注意到的一件事是它们调用了Environment Exit 0 示例程序如下所示 public class Program public static void Main strin
  • 将JS代码的值赋给DIV

    我试图让 JS 代码中的变量显示在表内的 DIV 中 为了简单起见 我削减了代码 只是想让它正常工作 Firebug 正在报告 document getElementById valuelabel is null 这是代码 table tb
  • Visual Studio:直接在语句 a()->f(b(),c(),d()) 中进入 f() 的热键/方法

    在调试时 我当前处于这个 下一个 语句 system
  • 向列组合添加唯一约束的迁移

    我需要的是迁移以将唯一约束应用于列的组合 即对于一个people表 组合first name last Name and Dob应该是独一无二的 add index people firstname lastname dob unique
  • 通过Post获取Materialize css中的chips数据

    我正在尝试使用 Materialise css 芯片获取数据 但是当我尝试使用表单提交时没有收到任何数据 添加芯片后 我检查输入字段值是否为空 我写了一段jquery代码来验证这一点 showvalues on click function
  • 在 VB6 应用程序中使用 .NET dll

    我在 c net 中编写了一个 dll 它在应用程序中调用另一个第三方 NET dll 当我使用用 c NET 编写的控制台应用程序以及使用以下代码对其进行测试时 效果很好 Assembly u Assembly LoadFrom dllL
  • 提取给定节点的所有父节点

    我正在尝试使用以下命令提取每个给定 GO Id 节点 的所有父级EBI RDF sparql 端点 https www ebi ac uk rdf services sparql 我是根据this https stackoverflow c
  • WCF 反序列化的对象属性的空值

    我有一个 WCF Web 服务used工作顺利 它在某处停了下来 我不知道为什么 代码和界面从未改变 web config 也没有改变 至少与 Web 服务部分无关 我有一堂课 DataContract public class QuizS
  • 更改 Qt 中的标签

    我正在尝试制作一个由按钮和标签组成的简单程序 当按下按钮时 它应该将标签文本更改为程序内 QString 变量中的任何内容 到目前为止 这是我的代码 这是我的 widget h 文件 class Widget public QWidget
  • 使用取消嵌套函数插入 - 跳过序列列中的数字

    我正在尝试在插入中使用 unnest 功能 这样做时 序列号会为每个插入跳过一个数字 请帮我解决这个问题 mydb d tab1 Table public tab1 Column Type Modifiers id integer not
  • 我们可以在一个 Android Studio 项目中拥有多个应用程序吗?

    我正在使用 Android Studio 来开发 Android 应用程序 但我听说在 Android Studio 中 最好在一个应用程序中只包含一个应用程序 每个应用程序一个项目 如果这是正确的 那么为许多项目打开许多框架将非常浪费 但
  • 为什么 are.filter(String) 也返回数字? [复制]

    这个问题在这里已经有答案了 我正在做一些小练习来保持我对 js 怪癖的了解 我尝试编写一些简单的过滤器 它返回一个新数组 其中包含某些元素 例如字符串 数字 ecc 当给定数组中也有数字时 我对 arr filter String 产生的结
  • 为什么 SQL 标准允许重复行?

    中的一个核心规则 http en wikipedia org wiki Codd 27s 12 rules对于关系模型来说 元组 行 所需的唯一性是 数据库中的每个单独的标量值must通过指定包含表的名称 包含列的名称和首要的关键包含行的值
  • 实现导航侧栏加载

    我正在尝试在左侧实现一个带有链接列表的导航侧边栏 a 这样 单击每个链接时 对应的 div 将被加载到右侧 当我有一个函数onclick财产在 a 它在浏览器控制台上给我错误 未捕获的引用错误 callFunction 未定义 这是我的实现
  • Git 工作流程和 Gerrit

    我正在尝试使用 Gerrit 实现 git flow 类型的工作流程 但我似乎无法弄清楚最后一块拼图 我的问题有两个先决条件 Gerrit 只会对一个分支执行合并 我不允许将合并提交推送到 Gerrit 更改获得批准后 合并必须由 Gerr