哪些 Git 分支模型适合您?

2024-03-10

我们公司目前正在使用简单的主干/发布/修补程序分支模型,并且希望了解哪些分支模型最适合您的公司或开发流程。

  1. 工作流程/分支模型

    以下是我所看到的三个主要描述,但它们部分相互矛盾,或者不足以解决我们遇到的后续问题(如下所述)。因此,我们的团队到目前为止默认的解决方案并不是那么好。你在做更好的事情吗?

    • gitworkflows(7) 手册页 http://www.kernel.org/pub/software/scm/git/docs/gitworkflows.html
    • (nvie) 成功的 Git 分支模型 http://nvie.com/git-model
    • (reinh) 敏捷团队的 Git 工作流程 http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html
  2. 合并与变基(纠结与连续历史)

    应该一pull --rebase或者等待合并回主线直到任务完成?就我个人而言,我倾向于合并,因为这保留了任务开始和完成的视觉说明,我什至更喜欢merge --no-ff以此目的。然而它还有其他缺点。许多人还没有意识到合并的有用特性——事实并非如此可交换的 http://en.wikipedia.org/wiki/Commutativity(将主题分支合并到master并不意味着将master合并到主题分支)。

  3. 我正在寻找自然的工作流程

    有时会发生错误,因为我们的程序没有用简单的规则捕获特定的情况。例如,早期版本所需的修复当然应该充分基于下游,以便可以将上游合并到所有必要的分支中(这些术语的用法是否足够清晰?)。然而,在开发人员意识到它应该被放置在更下游之前,修复程序会进入主版本,如果它已经被推送(更糟糕的是,合并或基于它的东西),那么剩下的选项就是精挑细选,其相关的危险。您使用什么简单的规则?这还包括一个主题分支必然排除其他主题分支(假设它们是从公共基线分支)的尴尬。开发人员不想在完成一项功能后开始另一项功能,感觉他们刚刚编写的代码已经不存在了

  4. 如何避免产生合并冲突(由于cherry-pick)?

    造成合并冲突的可靠方法似乎是在分支之间进行挑选,它们永远不能再次合并?在任一分支中应用相同的提交来恢复(如何执行此操作?)是否可以解决这种情况?这是我不敢推动很大程度上基于合并的工作流程的原因之一。

  5. 如何分解为主题分支?

    我们意识到从主题分支组装完成的集成会很棒,但我们开发人员的工作通常没有明确定义(有时就像“四处探索”一样简单),并且如果某些代码已经进入“杂项”主题,根据上面的问题,它不能再从那里取出吗?您如何定义/批准/毕业/发布您的主题分支?

  6. 适当的程序,例如代码审查和毕业当然会很可爱。

    但我们根本无法让事情变得足够理顺来管理这个问题——有什么建议吗? 整合分支,插图?

以下是相关问题的列表:

  • 有哪些好的策略可以允许已部署的应用程序可热修复? https://stackoverflow.com/questions/143814/what-are-some-good-strategies-to-allow-deployed-applications-to-be-hotfixable
  • 内部开发使用 Git 的工作流程描述 https://stackoverflow.com/questions/1049917/workflow-description-for-git-usage-for-in-house-development/1050628
  • 用于企业 Linux 内核开发的 Git 工作流程 https://stackoverflow.com/questions/1856241/git-workflow-for-corporate-linux-kernel-development
  • 如何维护开发代码和生产代码? https://stackoverflow.com/questions/216212(感谢this https://stackoverflow.com/questions/216212/how-do-you-maintain-development-code-and-production-code/216219#216219 PDF!)
  • git 发布管理 https://stackoverflow.com/questions/1042400/git-releases-management
  • Git Cherry-pick 与合并工作流程 https://stackoverflow.com/questions/1241720/git-cherry-pick-vs-merge-workflow
  • 如何挑选多个提交 https://stackoverflow.com/questions/1670970/how-to-cherry-pick-multiple-commits
  • 如何使用 git-merge 合并选择性文件? https://stackoverflow.com/questions/449541/how-do-you-merge-selective-files-with-git-merge
  • 如何挑选一系列提交并合并到另一个分支 https://stackoverflow.com/questions/1994463/how-to-cherry-pick-a-range-of-commits-and-merge-into-another-branch
  • ReinH Git 工作流程 https://stackoverflow.com/questions/855266/reinh-git-workflow
  • 用于进行修改的 git 工作流程永远不会推回原点 https://stackoverflow.com/questions/582015/git-workflow-for-making-modifications-youll-never-push-back-to-origin
  • 择优合并 https://stackoverflow.com/questions/232771/cherry-pick-a-merge
  • 组合操作系统和私有代码的正确 Git 工作流程? https://stackoverflow.com/questions/2195826/proper-git-workflow-for-combined-os-and-private-code
  • 使用 Git 维护项目 https://stackoverflow.com/questions/2587721/maintaining-project-with-git
  • 为什么 Git 不能将文件更改与修改后的父级/主控合并。 https://stackoverflow.com/questions/2588824/why-cant-git-merge-file-changes-with-a-modified-parent-master
  • Git 分支/变基良好实践 https://stackoverflow.com/questions/2601967/git-branching-rebasing-good-practices
  • “git pull --rebase”什么时候会给我带来麻烦? https://stackoverflow.com/questions/2590260/when-will-git-pull-rebase-get-me-in-to-trouble
  • 大型团队如何使用 DVCS? https://stackoverflow.com/questions/787638/how-are-dvcs-used-in-large-teams

另请查看塑料 SCM 上写的内容任务驱动开发 http://www.plasticscm.com/features/task-driven-development.aspx,如果塑料不是您的选择,请学习nvie的分支模型 http://nvie.com/posts/a-successful-git-branching-model/和他的支持脚本 https://github.com/nvie/gitflow.


DVCS 新开发人员需要认识到的最麻烦的功能是出版流程 https://stackoverflow.com/questions/2473124/source-control-distributed-systems-vs-non-distributed-whats-the-difference/2473315#2473315:

  • 您可以导入(获取/拉取)您需要的任何远程存储库
  • 您可以发布(推送)到您想要的任何(裸)存储库

由此,您可以遵循一些规则来使您的问题变得更容易:

  • 仅在尚未推送分支时才对分支进行变基(自上次变基后未推送)
  • 只推送到裸仓库(自 Git1.7 起强制)
  • follow Linus 关于变基和合并的建议 http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html

Now:

工作流程/分支模型:

每个工作流程都是为了支持发布管理流程 https://stackoverflow.com/questions/216212#216228,这是为每个项目量身定制的。
我可以添加到您提到的工作流程中的是:每个开发人员不应该创建一个功能分支,而只能创建一个“当前开发”分支,因为事实是:开发人员通常不知道他/她的分支到底会产生什么:一个功能,几个(因为它最终是一个过于复杂的功能),没有(因为没有及时准备好发布),另一个功能(因为原始功能已经“变形”),...

只有“集成商”应该在“中央”存储库上建立官方功能分支,然后开发人员可以获取该分支来重新设置/合并适合该功能的工作部分。

合并与变基(纠结与连续历史):

我喜欢你提到的我的回答(“内部开发使用 git 的工作流程描述 https://stackoverflow.com/questions/1049917/workflow-description-for-git-usage-for-in-house-development/1050628")

我正在寻找自然的工作流程:

对于修复,它可以帮助将每个修复与错误跟踪中的票证相关联,这有助于开发人员记住他/她应该在哪里(即在哪个分支上,即“用于修复”的专用分支)提交此类修改。
然后,钩子可以帮助保护中央存储库免受未经验证的错误修复或不应推送的分支的推送。 (这里没有具体的解决方案,这一切都需要适应您的环境)

如何避免产生合并冲突(由于cherry-pick)?

正如所述雅库布·纳伦布斯基 https://stackoverflow.com/users/46058/jakub-narebski in 他的回答 https://stackoverflow.com/questions/1241720/git-cherry-pick-vs-merge-workflow/1248741#1248741,挑选应该保留在极少数需要的情况下。
如果你的设置涉及大量的挑选(即“这并不罕见”),那么有些事情就不对劲了。

会在恢复中应用相同的提交(如何做到这一点?)

git revert http://www.kernel.org/pub/software/scm/git/docs/git-revert.html应该解决这个问题,但这并不理想。

如何分解为主题分支?

只要分支尚未被推送到任何地方,开发人员就应该将其提交历史重新组织(一旦他/她最终看到开发采取更明确和稳定的形式):

  • 如果需要的话可以有多个分支(其中一个是由明确识别的功能组成)
  • 一个分支内的一组连贯的提交(请参阅修剪 Git 签入 https://stackoverflow.com/questions/2302736/trimming-git-checkins/2302947#2302947)

适当的程序,如代码审查和毕业?

集成分支(在专用集成中)存储库可以帮助开发人员:

  • 在远程集成分支之上重新调整他/她的开发(pull --rebase)
  • 本地解决
  • 将开发推向该仓库
  • 请与积分器核实,确保不会造成混乱;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪些 Git 分支模型适合您? 的相关文章

  • 过早退出 Qualtrics 中的循环和合并块

    我目前正在进行一项 Qualtrics 调查 受访者必须解决一长串字谜问题 然后回答一些人口统计问题 为了使变位词部分更容易 我使用了循环和合并块 第一个字段是要解决的变位词 第二个字段是变位词的解决方案 因此调查可以根据受访者的答案来检查
  • 将插入与 select 语句合并

    这对我有用 MERGE Table1 AS tgt USING SELECT TOP 1 FROM Table2 SELECT itmid FROM Table3 WHERE id id as a WHERE id id AS src ON
  • 如何归档旧的 git 标签?

    我的 git 存储库中有一些不再重要的旧标签 我想存档标签 以便在运行 git tag 时默认情况下它们不会显示 我不想删除它们 因为我想保留历史记录 我怎样才能做到这一点 可以将标签保留在存储库中并避免将它们列为标签 它还可以避免默认克隆
  • 如何使用 BFG 删除受保护的提交

    使用 BFG 清理存储库时 https rtyley github io bfg repo cleaner https rtyley github io bfg repo cleaner 遇到以下情况 Protected commits T
  • 为什么某些 Git 分支名称中包含斜杠?

    我正在阅读本教程https www atlassian com git tutorials syncing git fetch https www atlassian com git tutorials syncing git fetch
  • 如何忽略Git中以数字开头的文件?

    在某个文件夹中 我有名为foo jpg bar png等等 我想将它们保留在版本控制中 除了那些命名为1 baz png 2 zaz jpg等 因为它们实际上是生成的 我应该添加什么条目 gitignore 正则表达式如 0 9 似乎不起作
  • 使用 Dropbox 作为跨多台机器的 git 工作目录 - 提交不能完美同步

    首先 我想强调这个问题与在 Dropbox 上托管我的中央存储库无关 而且我对使用 git 还很陌生 我能找到的其他涉及 Dropbox 和 git 的问题都没有真正回答我的问题 它们要么是关于使用 Dropbox 托管您的存储库 要么是关
  • 从 Jenkinsfile 中获取有关其他分支的信息

    Jenkins Blue Ocean 与链接的 Bitbucket Server 实例在同一本地网络上运行 Jenkins 中的多分支项目能够为本地 Bitbucket 服务器上链接的 Bitbucket 存储库的每个分支创建一个分支 但在
  • git stash 和编辑帅哥

    我完全喜欢git add p and git stash但我偶尔会遇到以下问题 该问题是通过以下命令序列重现的 git add p my file 然后我手动编辑大块 using e 因为 git 建议的分割不适合我 git stash k
  • 错误:GitHub 目前无法显示这么大的文件 - 但该文件只有 1.06 MB [已关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我通过两种不同的方式将 HTML 文件上传到 GitHub 存储库 拖放以及使用终端上的 Git 添加 提交 推送 在这两种情况下
  • Visual Studio 2013删除已删除的git分支

    我遇到这个问题 在 VS2013 中 当我从源创建一个新分支时 源分支的下拉列表列出了曾经创建的所有分支 这包括长期从本地存储库和远程 源存储库中删除的分支 如何删除已删除的分支 Visual Studio 将它们保存在本地缓存中 您可以从
  • 忽略提交之间 git-diff 的*所有*空白更改

    我正在检查代码库并修复空白奇怪之处并通常纠正缩进等事情 并且我想确保我没有无意中进行任何其他更改 所以我正在做git diff w显示所有已更改文件中的差异 同时忽略空白差异 问题是这实际上并没有忽略all空白差异 至少是什么I认为仅仅是空
  • 获取签出修订版的 git 标签?

    我正在做 git tag current tag example to test task git checkout tag example to test task HEAD is now at 75fdde3 commit commen
  • 在另一列中查找重复值时,如何将列数据存储为逗号分隔值? [复制]

    这个问题在这里已经有答案了 如果任何公司的产品都相同 我必须组合或内爆子数组值 预期输出应该类似于 0 gt array company gt 1 6 product gt 5 我的数组是 array 0 gt array company
  • 如何在 git 中删除 subversion 远程?

    我有一个最初使用 git svn 创建的 git 存储库 现在我有一个推送到的 git 服务器 但 svn 存储库已丢失 我可以删除 svn 远程吗 如何 您可以编辑 git config文件并删除与要删除的遥控器关联的部分 您要删除的行可
  • “Git 推送非快进更新被拒绝”是什么意思?

    我正在使用 Git 来管理我的两台计算机和我的开发 我尝试将更改提交到 GitHub 但收到此错误 无法将一些参考推送到
  • Git:当文件位于嵌套 git 存储库中时强制“添加”

    我想添加一个包含在父存储库中的嵌套 git 存储库中的文件 我正在开发一个在我的项目中使用的库 然而git add nested repo myfile不做任何事情 我可以尝试重命名 git文件在进行提交时 但是当我重命名回时 我担心会出现
  • Git 中的专有+开源设置? (例如铬/铬)

    您将如何设置一个拥有专有版本和开源版本 例如 Chrome 和 Chromium 的代码存储库 对于 Git 您会使用两个分支还是两个存储库 您如何使 私有 版本与开源版本保持同步 如果是我 我会有两个存储库 这样 您就可以对每个版本拥有不
  • 使用 GIT 自动增加 AssemblyFileVersion

    好吧 我知道这可能不是传统的 但除此之外 我使用 AssemblyFileVersion 作为我的 构建名称 字符串 它的格式如下 File Version information for an assembly consists of t
  • 使用 Git 的 Spring Cloud 配置服务器 - 无法克隆或签出存储库连接超时

    我正在使用 GIT 在 Spring Cloud Config Server 上进行 POC Spring Boot 1 5 3 RELEASE 爪哇1 8 弹簧工具套件https github com kishornpatil https

随机推荐

  • maven3 - maven-antrun-plugin - “无法创建任务或键入 if”

    我正在尝试在 Maven 构建中使用 if ant 任务 我发现很多文章建议使用 ant nodeps 依赖项 最终所有这些技巧在 maven3 ant 1 8 1 maven antrun plugin 1 6 上都不起作用 发生 Ant
  • 哈希表和键顺序

    有没有办法在添加键时保持哈希表中键的顺序 就像推 弹出机制一样 Example hashtable hashtable Add Switzerland Bern hashtable Add Spain Madrid hashtable Ad
  • C++在什么情况下会将变量初始化为零? [复制]

    这个问题在这里已经有答案了 每个变量在使用之前都应该正确定义和初始化 为其赋值 然而在某些情况下 C 会将变量设置为默认值零 就像下面这个例子 class A static int val int val 10 This is the us
  • 如何使用 jQuery Deferreds 数组? [复制]

    这个问题在这里已经有答案了 我有一个应用程序 要求按特定顺序加载数据 根 URL 然后是架构 最后使用各种数据对象的架构和 url 来初始化应用程序 当用户浏览应用程序时 数据对象将被加载 根据架构进行验证并显示 当用户对数据进行 CRUD
  • python Flask在html页面上显示图像[重复]

    这个问题在这里已经有答案了 我正在尝试传递图像的文件名并将其渲染在模板上 尽管我传递了实际名称 但它不会显示在页面上 app route methods GET POST app route start methods GET POST d
  • 如果在 runAsync 调用之后链接,那么 thenRunAsync(与 thenRun 相对)是否有任何区别?

    在下面的代码中 调用有什么区别吗thenRunAsync 我应该打电话吗thenRun反而 CompletableFuture runAsync this doWork executorService thenRunAsync this h
  • PHP同名变量

    我正在尝试将我用 PHP 制作的登录系统与 PHPBB 登录系统集成 我的问题是我包含了 PHP 登录文档 其中包含一个名为 user但我的登录系统使用 user以及 例如 我的登录函数在名为 user 的类中执行 而 phpbb 登录类是
  • 推荐的拆分 Maven 项目的解决方案?

    在 Maven 中拆分大型企业项目的最佳方式是什么 很容易理解如何像这样垂直划分事物 你有一个 DAO 项目 DAO 项目是一个依赖项 服务项目 Service 项目是一个依赖项 的网络项目 有没有人对 Maven m 中大型项目的分区 拆
  • 并行异步调用时如何获取最大出站请求?

    通过 Fiddler 分析下面的代码 我意识到使用并行扩展我最多可以获得 2 个出站请求 new string http stackoverflow com http superuser com http serverfault com h
  • 对于密集负载应用程序来说,.Net 4.5 中的 async HttpClient 是一个糟糕的选择吗?

    我最近创建了一个简单的应用程序 用于测试可以以异步方式生成的 HTTP 调用吞吐量与经典多线程方法的比较 该应用程序能够执行预定义数量的 HTTP 调用 并在最后显示执行这些调用所需的总时间 在我的测试期间 所有 HTTP 调用都是对我的本
  • 使用函数而不调用模块[重复]

    这个问题在这里已经有答案了 我将 Canopy 与 Jupyter 笔记本一起使用 我想知道是否有一种方法可以使用模块中的函数而无需调用模块 例如 如果我有 import numpy as np print np sin 2 我希望能够只输
  • 可可移动鼠标

    我正在 Snow Leopard 上编写 Mac OS X 应用程序 我有一个由 NSTimer 定期触发的步骤方法 在这种方法中 我想将鼠标移动到屏幕中央 不按下或释放任何按钮 这是我所拥有的 void step NSTimer time
  • Python 的 os.system() 是否等待进程结束?

    The Python手册 http docs python org library os html os system没有提及是否os system cmd 等待或不等待进程结束 引用手册 在子 shell 中执行命令 字符串 看起来它确实
  • 明天的 Wiki 应包含哪些功能? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 明天的 wiki 应该包含哪些功能 他们如何整合 AJAX 等 Web 2 0 功能 他们目前还缺少哪些其他功能 做什么you想查看您最喜欢的 Wik
  • TextView 上的 OnClick 事件停止 CardView 上的 RippleEffect

    我在 CardView 中有一个 TextView 通过添加 OnClick 事件并添加属性来在 CardView 上启用 Lollipop 的涟漪效果时 android foreground android attr selectable
  • 如何使用FastAPI返回JSON格式的数据?

    我在两者中编写了具有相同功能的相同 API 应用程序FastAPI and Flask 但是 当返回 JSON 时 两个框架之间的数据格式不同 两者使用相同的json库 甚至相同的代码 import json from google clo
  • 为什么 PyLint 会警告没有 __init__ ?

    我们有许多似乎不需要的Python类 init 将它们初始化为空是完全可以接受的 甚至是更好的选择 PyLint 似乎认为这是一件坏事 我是否错过了一些关于为什么没有的见解 init 是难闻的气味吗 或者我应该压制这些警告并克服它 你用这些
  • 如何进行C++对齐数组分配?

    我想修改数组分配 float a new float n 使用对齐的分配器 我倾向于尝试使用placement new 和 posix memalign 或新的 c 11 等效项 但请注意数组的新放置对于数组分配来说是有问题的 https
  • 相机意图/活动 - 避免保存到图库

    我正在使用相机活动捕捉照片 我用MediaStore EXTRA OUTPUT额外参数 图像正确保存到提供的路径 也将其保存到图库文件夹 这样我就可以在 图库 应用程序中查看图像 我可以避免这种情况吗 File file new File
  • 哪些 Git 分支模型适合您?

    我们公司目前正在使用简单的主干 发布 修补程序分支模型 并且希望了解哪些分支模型最适合您的公司或开发流程 工作流程 分支模型 以下是我所看到的三个主要描述 但它们部分相互矛盾 或者不足以解决我们遇到的后续问题 如下所述 因此 我们的团队到目