Gitflow + Forking workflow(在Stash上)是什么?

5

是否可以在分叉思维基础上使用Gitflow?如果可以,如何创建本地功能分支,将其推送到您的源并请求拉取?您会拉取请求一个分支以使其对其他人可用吗?我特别感兴趣的是这与Atlassian Stash如何配合使用。

谢谢!


1
git-flow 会如何与分叉冲突? - Chris
我的意思是 - 这将如何工作? 因此,上游应该有开发和主分支... 功能/发布/错误修复分支等放在哪里? 在单独的分叉中吗? 你如何协作? 可以将在个人叉上创建的分支拉请求合并到上游吗? ... 我的问题说得通吗? :) - Mr Mikkél
2个回答

10

我是一名Stash开发人员。

我认为克里斯的问题实际上是针对技术上分叉或不分叉,对gitflow应该没有影响。特性/bugfix分支可以存在于主资源库中,也可以在分叉中。但是,版本发布分支在分叉中真的没有太多意义,因为这不是你通常想要具有分歧副本的东西(尽管您可能会从分叉中向发布分支提出错误修复拉取请求)。

通常来说,在使用分叉或在单个存储库中使用分支的情况下,如果您想要特性和错误修复,那么创建拉取请求到上游存储库是表明您想要合并到dev/master分支的最佳方法,然后成为有关更改的代码审查和讨论的适当位置。

当您在一个分支上“协作”时,您是否意味着允许多个人同时工作,还是只进行代码审核。假设前者,那么没有什么阻止您拥有一个个人分叉,您已经授予了某人权限,您可以将它们都推送到同一个分支,或者您可以在自己的分叉之间创建拉取请求,然后最终返回上游存储库。任何你喜欢的。

具体关于Stash,这里有一些答案,可能会让你了解Stash如何与GitFlow交互:

https://answers.atlassian.com/questions/220237/stash-branching-model-vs-git-flow

https://answers.atlassian.com/questions/165443/git-flow-with-stash

分叉vs分支的一些思考 - Stash团队大多使用单个存储库和bugfix / feature分支。原因有以下两点:

  1. 至少目前看来,在Bamboo(或您选择的CI)中具有分支构建要容易得多。 Bamboo可以轮询该存储库,查找与正则表达式匹配的分支,并创建每个分支的构建,而无需任何手动干预。对于分叉会变得稍微复杂一些。

  • 团队内可见性 - 您可以自动查看人们正在处理的工作,而无需转到Stash或跟踪每个个人分支。

  • 当两个团队之间缺乏信任或需要一些形式的隔离(例如开源)时,使用Fork是完美的选择。但是,如果您所在的组织中“信任”团队中的每个人,我认为拥有一个单一的代码库使事情更加容易/简化。这只是我的个人意见。

    希望有所帮助?


    2
    完全一样。您将修复错误或热修复分支推送到主/顶级存储库,然后创建拉取请求时,源分支和目标分支(通常为主分支或发布分支)将位于同一存储库中,而不是源分支是一个派生分支。派生仓库实际上只对隔离/权限有用。 :) - charleso
    1
    不,我的问题不是为什么要分支 - 因为我认为分支是必不可少的。我的问题是为什么你要立即集成。为什么在你正在开发的功能完成之前就污染主干 - 或者任何你合并到的分支? - Mr Mikkél
    没错。有两个原因。1. 维护一个特性分支的成本可能更高,并且可能导致持续的合并冲突。2. 它越快进入主分支,我们就能越快、更长时间地使用它。有些功能难以逐步实现,特别是涉及数据库更改的情况,我们可能不会合并这些情况。例如,我们为存储库钩子做了这样的事情。正如我所说 - 这确实取决于情况,没有一种大小适合所有。 - charleso
    我个人认为我们应该尽量避免长时间运行的功能,但毫无疑问,这需要更多的前期投入,例如功能标志和更多的代码路径。通常情况下,我会更喜欢这种痛苦而不是长时间运行的功能分支,但这只是我的个人观点。 - charleso
    我更倾向于在发布开发开始时创建发布分支。有时我们会同时有多个发布,而且经常会在不同的时间点将功能添加到给定的发布中。例如,我们可能会开始一个功能发布,然后决定在继续进行功能发布之前需要进行维护发布,因此为这些发布分支创建分支会很好。 - Mr Mikkél
    显示剩余12条评论

    -1

    我认为在使用git-flow和fork的时候,必定会出现一个问题:如果要跟踪上游(这是理想的),上游更改将放在哪里呢?事实上,当我几分钟前偶然发现这个帖子时,第一件事就是想到了这个。

    问题在于,当你最终使用“git flow feature finish feature/whatever”命令时,它将合并回您的分支开发分支。这很好。但是,最终您将达到“git flow release start X.X.X”和“git flow release finish X.X.X”,这将导致合并回您的分支主分支。如果您一直盲目地将上游更改直接拉入主分支,则您的分支可能会开始与您维护分支的预期目标产生分歧。我认为,您真正想做的是从上游挑选代码。

    这种情况下,跟踪上游的常规方法适用:创建一个“upstream”分支并将其设置为跟踪上游。不,git-flow不会对该“upstream”分支执行任何操作,但是仅因为您正在使用git-flow,这并不意味着您不能创建其他分支。或者使用git的其他功能,而git-flow不一定显示特殊处理。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接