Git:无休止的合并。我厌倦了他们

时间:2011-05-28 11:40:43

标签: git version-control

最近我开始在Git工作,有8人团队。 我们决定在每个个人分支中单独工作(有人在某处阅读)是一种很好的做法。 在这样的拓扑中工作了一段时间后,我很生气地从主服务器获取/合并更改所需的时间并将其推回/合并。 我花在问题上的时间有一半 - 需要与某人的变化合并。

我想每2个小时从主人那里得到最新的变化。但每次我都要花时间将它们合并到我的分支中。

我认为git没问题,我们选择了错误的工作流程。我们可以避免经常合并并且总是有最新的主人登记吗?

UPD。

正如Neil注意到的那样 - 我们中的一些人正在同时处理一段代码。我们将在其他VCS中合并 - 这是真的。但不像git那么频繁!

例如:我想重命名项目中的类。本课程广泛用于项目中。我在我的分店里做过。好吧,我每次都从主人那里得到 - 从我的队友那里合并。然后我决定最终将它合并到主人。另一个合并。我做到了。然后我的队友拉了另一个合并。因此,团队合并的时间浪费了。

我不是在责备git。我认为这有更好的工作流程。现在我们决定拒绝使用分支机构并直接与主人合作,希望没有人会破坏我们的构建。

UPD。 2

还经常发生我正在与我从未修改过的代码合并。这很奇怪,因为我必须解决我不知道的代码冲突。可能还有一些避免这些合并的变通办法吗?

4 个答案:

答案 0 :(得分:14)

如果您需要手动解决许多合并冲突,那么您的问题就是应用程序中的代码布局 - 这意味着有几个人在同一个源文件上不断工作。您可能需要考虑使代码更加模块化,以便各个开发人员在处理不同功能时不必更改相同的文件。如果不这样做,您将遇到与所有VCS合并的问题。

答案 1 :(得分:10)

似乎有多个人正在处理同一个文件并且经常更改它。这意味着您的任务部门或项目模块化是错误的。

更新:

  • 就个人而言,我认为如果分支是特定功能而不是特定于人,分支会更好。无论如何你决定在同一个分支(主)上工作。 经常推送很快。但要确保每次推送足够稳定以便编译。
  • 还要维护另一个稳定分支,以便维护应用程序的稳定版本。

答案 2 :(得分:5)

只要其他人将更改推送到中央存储库,每次您将存储库与中央存储库同步时,就会发生合并。我猜你的意思是你每次都厌倦了解决冲突。

此问题与git无关,它与您正在使用的分支模型以及您要更改的代码部分有关。如果你想完全摆脱合并,那么如果你想摆脱合并冲突,开始查看冲突是什么以及如何以更正交的方式工作,这是不可能的。

可能有人正在更改文件并使用与其他人不同的行结尾进行推送。该文件将始终与使用另一行结尾的人发生合并冲突,例如如果你有人在unix和windows上开发。

答案 3 :(得分:5)

可能有三种工具可以帮助您

  • 使用 rebase 保持历史记录的线性。这只会解决冲突问题,但这个想法是在推送到存储库之前,或者请求维护者从您的存储库请求提取,在当前版本之上使用git rebase。注意:不要对已发布的历史记录执行此操作。这可以确保其他人不必解决冲突。

    脸颊上的舌头:如果你厌倦了合并,你可以git pull --rebase而不是;-)虽然这不会帮助你解决冲突

  • 如果您发现自己一次又一次地解决相同的冲突,请尝试启用 git rerere - 这是 re <的工具/ b>使用 re 重新冲突合并的解决方案。

    您需要设置配置变量rerere.enabled才能启用此命令。

  • 如果标准3向文本合并不适合您,但可以通过以编程方式解决合并冲突,则可以设置合并驱动程序指定的文件。请参阅gitattributes联机帮助页中的merge属性说明。


替代解决方案是改变工作方式。

而不是先拉动,解析合并,然后推送到“中央”存储库,您可以要求维护者从您那里获取更改(git request-pull可能会有帮助)。

如果您是维护者,您可以要求开发人员修改他/她的更改,以便它可以干净地合并(例如,通过在当前版本之上进行重新定位),或者要求他们合并。他们可能更清楚如何解决冲突。