将更改从master转移到我的工作分支?


16

我们两个人在做某事。我们正在使用这种分支结构

  • dev-A
  • dev-B

我们俩都在单独的分支(dev-A,b)上工作,并且每当完成时-我们将更改推广到master。

但是这样做的缺点是我们无法获得其他开发人员所做的更改。一切都存在于主树中-但是我们无法获得其他开发人员所做的最新更新。

有没有办法解决这个问题,还是我们应该更改分支结构(按功能)?

Answers:


16

我已经看到了在两种主要情况下使用的开发人员分支:

  1. 开源社区,这些分支实际上是存储库的分支,因此项目维护人员可以锁定对主存储库的访问,并需要通过拉取请求进行集成。这使贡献者的生活更加困难,但对于维护人员而言却更加容易,这当然是关键所在,并且这是GitHub上非常成功的模型。

  2. 团队和组织没有持续的集成,并且没有部署不稳定的记录,更糟的是其构建不稳定的记录。这些团队通常尝试使用开发人员分支来保护主线的稳定性,结果通常是,发布之前漫长而痛苦的合并期,然后是更长而痛苦的稳定期,有时直到发布才会发生。

我不希望这成为为什么需要CI的恼,但从您的问题中可以很明显地看出,您知道自己没有足够频繁地集成更改,因此IMO没有必要围绕这个问题进行讨论。

除非您实际上是在一个地理上分散的团队中工作,并且需要“控制”外部开发人员的更改,否则每个开发人员的分支机构的模式实际上没有多大意义。对于git来说,这尤其没有意义,因为从技术上来说,每个开发人员都已经拥有自己的存储库。大多数组织应该非常频繁地进行集成-例如每天进行几次。

我目前是由35个贡献者组成的小组的一部分,该贡献者分为4个独立的团队,大多数人每天至少检查2-3次,有些人检查10-15次;看到建筑物损坏是很不寻常的,而让它们停留几分钟以上的情况极为罕见。大多数时候,Git毫不费力地处理合并,以至于远程开发人员分支只是不必要的开销。只需在推送之前进行拉取,本地合并和运行提交测试,这很简单。

如果您绝对必须推迟集成以保护主分支的稳定性,那么典型的,经过验证的模型是使用不稳定的分支 -有时称为开发分支,如成功的Git分支模型中所述。如果开发人员至少每天至少不能一次成功地合并到该分支中(该分支仅需要构建,就可以正常运行),那么您将遇到质量/学科问题,而不是版本控制问题;通过使用非集成的开发人员分支掩盖它只能解决该问题,并且这样做实际上使最终合并比实际需要的更加痛苦和不稳定。

功能分支并不是最坏的情况,但是IMO很少有足够大的项目来保证它们。如果您的项目非常大(即同时处理大量功能),则将其拆分为单独的自治组件将获得比记录源代码控制问题更好的结果。

如果需要,您可以忽略此建议,很多团队也可以这样做,但是上面链接的分支模型如此流行和成功的原因之一是,该模型旨在持续集成一起工作,而不是与之相反。


我认为,从将所有内容都集成到一个分支中以及从每天/每小时构建(使用Jenkins或类似工具)的意义上讲,持续集成的重要性不能足够强调。
sleske 2014年

15

在工作分支中,如果要执行以下操作:

git commit -am "Committing changes before merge"
git merge master

您也可以从其他开发人员分支合并

git checkout dev-A
git merge dev-B

要做的是 master中的更改合并到您的开发分支中。


是的-那是一种方式。我希望git可以为此提供一个优雅的工作流程。
Utkarsh Sinha

2
如果每个开发人员都有自己的本地工作存储库和开发人员要从中推送和提取的共享中央存储库,那么git通常效果最好。这样,您每个人都可以在同一分支中工作,并通过拉入并通过推送到中央存储库进行更改来获取更新。那可能就是您要寻找的优雅。除非有冲突,否则git会自动为您处理合并。 git flow是工作的一个不错的补充。
scaryrawr 2012年

完美 在几个地方,对于这个确切的问题有很长的答案,但是git merge master在签出功能分支时,我一直在寻找。谢谢
Drenai '17

3

如果dev-A和dev-B是不同项目的不同分支,那么@scaryrawr回答的最好。

但是,如果dev-A和dev-B实际上是完全相同的代码(相同的项目),则另一种选择是两者都可以在一个分支上工作。例如,您创建了一个名为'devWork'的主分支。你们都签出devWork,对其进行处理,提交并推送更改。推送的更改不在Master上,而是在devWork上,然后分支的其他用户只需在本地执行PULL即可获取推送的更改。

然后,您可以按照标准方法将devWork上的工作返回给Master等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.