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

Git:无休止的合并。I';我厌倦了他们,git,version-control,Git,Version Control,最近,我开始在Git与8人团队一起工作。 我们认为,在每个个人分支中分别工作是一种好的做法(有人在某处读到过)。 在这种拓扑中工作了一段时间后,我对从master获取/合并更改并将其推回/合并所需的时间感到恼火。 我花在问题上的一半时间需要与某人的更改合并 我想每2小时从master那里得到最新的更改。但每次我都要花时间把它们合并到我的分支中 我假设git是正常的,我们选择了错误的工作流。我们怎样才能避免频繁的合并,并且总是让最新的主服务器签入 UPD. 正如Neil正确地注意到的,我们中的一些

最近,我开始在Git与8人团队一起工作。 我们认为,在每个个人分支中分别工作是一种好的做法(有人在某处读到过)。 在这种拓扑中工作了一段时间后,我对从master获取/合并更改并将其推回/合并所需的时间感到恼火。 我花在问题上的一半时间需要与某人的更改合并

我想每2小时从master那里得到最新的更改。但每次我都要花时间把它们合并到我的分支中

我假设git是正常的,我们选择了错误的工作流。我们怎样才能避免频繁的合并,并且总是让最新的主服务器签入

UPD.

正如Neil正确地注意到的,我们中的一些人正在同时处理一段代码。我们将在其他风投中得到合并——这是真的。但不像git那样频繁

例如:我想在项目中重命名类。该类在项目中广泛使用。我在我的分公司成功了。好的,我每次都会从我的队友那里得到主合并。然后我决定最终将其合并到master。另一个合并。我成功了。然后,我的队友又拉了一次合并。所以,团队中花在合并上的时间几乎被浪费掉了

我不是在责怪git。我认为有更好的工作流程。现在我们决定拒绝使用树枝,直接和师父一起工作,希望没有人会破坏我们的建筑

UPD。2


而且,我经常会与从未修改过的代码合并。这很奇怪,因为我必须解决我不知道的代码冲突。可能还有一些解决方法可以避免这些合并?

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

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

更新:

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

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

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


可能有人正在更改文件,并使用与其他人不同的行尾向上推。此文件总是与使用另一行结尾的人发生合并冲突,例如,如果您有人同时在unix和windows上进行开发。

有三种工具可以帮助您

  • 通过使用重设基址使历史保持线性。这只会解决冲突,但其思想是,在推送到存储库之前,或在维护人员请求从存储库中拉取之前,在当前版本之上使用。注意:不要对已发布的历史记录执行此操作。这可以确保其他人不必解决冲突

    开玩笑:如果你厌倦了合并,你可以
    git-pull--rebase
    取而代之;-)尽管这无助于你解决冲突

  • 如果您发现自己在一次又一次地解决相同的冲突,请尝试启用——这是一个重用冲突合并的记录解决方案的工具

    要启用此命令,需要设置配置变量
    reere.enabled

  • 如果标准的三向文本合并不适用于您,但可以通过编程解决合并冲突,则可以为指定文件设置合并驱动程序。请参阅手册页中的
    merge
    属性说明


另一种解决办法是改变工作方式

您可以要求维护人员从您这里提取更改(在这里可能会有所帮助),而不是首先提取、解析合并,然后推送到“中心”存储库


如果您是维护人员,您可以要求开发人员修复他/她的更改,使其能够干净地合并(例如,通过在当前版本上重新设置基址),或者要求他们合并。他们可能更了解如何解决冲突。

合并过程中会发生什么,您有很多合并冲突吗?+1。Git不是解决项目管理问题的灵丹妙药。如果您正在修改与其他人相同的代码——仅仅因为Git允许您这样做,并不意味着您应该这样做。试着互相交谈。我同意代码的布局很重要。此外,冲突将出现在任何风险投资中。没关系,当我在公共代码上合并时。但在git中,我对代码进行了合并,而我并没有接触到这些代码。另外,当我在alerady解决的冲突上进行合并时,这也很奇怪(Reerre应该能帮上忙)。谢谢。git Reerre——这是我缺少的东西。处理这一问题的一种有点(IMO)严厉的方法是,强制所有代码在使用c之前通过代码格式化程序