难以分辨文件的版本控制

时间:2017-03-29 18:02:47

标签: git svn mfc

我们部门目前正计划从SVN切换到Git,有几个问题需要解决 我们的某个产品使用MFC作为其用户界面。切换到Git时我们会遇到的问题是,如果没有像我们现在在SVN中的中央锁定机制那样,UI代码很难进行版本控制。
我们在UI中使用功能区栏。功能区栏的布局包含在XML文件中。问题是这个XML是一个单行,因此不容易区分(如果这个词甚至存在) 另一个问题是,有几个资源文件包含UI元素的ID,因此与UI布局文件紧密耦合。

使用SVN,我们使用锁定机制来锁定这些文件,以便我们的开发人员不会相互干扰 Git不支持这种机制的分散性,所以我想知道如何解决这个问题?

第一个也是最简单的想法是与其他团队成员协调对这些文件的更改,例如:通过聊天。这种方法的最大缺点是很容易忘记这一点,对于想要完成任务的单个开发人员而言,这是相当繁琐的。

第二个想法是同意一些专门允许更改这些文件的团队成员。这些成员之间必须相互沟通。

不幸的是,我还不是一个git专家,所以我无法想象任何更高级的方法来解决这个问题。
我想有类似的问题已经用git解决了但到目前为止我找不到任何东西 我想知道这个问题能否以某种方式解决?

1 个答案:

答案 0 :(得分:0)

没有一个真正的通用解决方案。但是,对于大多数分布式版本控制系统,合并是锁定的分布式等价物。

从我的原型书"概念和历史"引用(进行小格式更改)章节,"并发模型" section(VCS =版本控制系统,前缀C和D分别代表Centralized和Distributed):

无论是集中式还是分布式, 允许多个用户彼此独立工作的任何VCS 必须提供一些方法来处理潜在的冲突。 如前所述,一种方法是锁定: 在更改文件之前 用户必须获得锁定, 然后在提交更改时释放。 这个简单的方法有前面提到的明显问题 禁止并行工作。 可以使锁更精细 - 爱丽丝 可能会锁定文件的上半部分, 留下下半部分可供鲍勃锁定和改变 - 但是 这有缩放问题。 此外,用户和/或管理员 必须有办法打破锁 因为用户将锁定文件但失败 或忘记解锁它们(例如,在决定不提交之后)。

如果VCS提供合并模型, 两个或更多人可能在同一个文件上工作, 在CVCS中定义的会合点 在签入/提交时间,例如 - 他们 有机会调和他们的变化。 合并分支时也需要合并, 在现代DVCS中, 相同的方法通常用于这两种方法。

请注意,在DVCS中, 会合点(因此任何合并) 在签入后会发生。 鲍勃可能能够接受爱丽丝的工作 在做自己办理登机手续之前, 但因为系统是分布式的, 鲍勃不必等待爱丽丝 (反之亦然)。

\ {锻炼考虑 这种延期合并。它可以提供什么优势? 你能想到什么缺点?}

\ answer {一个优点 是签到过程完成。 由于合并是一个单独的步骤, 如果出现任何问题并且推迟合并, 这不会阻碍实际办理登机手续。 这似乎并不重要, 但在实践中它会产生很大的不同。 CVCS也可能允许这样做, 但并非所有人都这样做。 (CVS在这里特别臭名昭着。) 一个潜在的缺点 是合并发生时, 参与的程序员 - 经常是谁 可能是合并的最佳候选人 已转移到其他项目, 或忘记了他们为何做出某些改变的一些细节。}

上面没有进入合并驱动程序,但Git有一个小缺陷。您可以编写或选择一个合并驱动程序来处理或至少留下冲突,从而迫使用户处理复杂和机器管理不当的合并(例如XML文件)。这在实践中非常有效,除了一种情况:将提交 X Y 与公共基础 B 合并时,如果只有一个 X Y 已经修改了与 B 相关的文件,甚至从不咨询自定义合并驱动程序。在某些情况下,这会产生正确答案,而在某些情况下则不会。