首页 > 解决方案 > 支持完全手动更新或合并的源代码控制服务器或客户端

问题描述

我们正在开发一个大型 c# 项目,该项目最初是在 tfs 源代码控制下,后来被转移到 git,最终由于各种原因以 svn 源代码控制结束。

此应用程序的更新通常需要跨多个复杂的 c#、js 和 cshtml 文件进行更改,因此经常会发生不同的任务最终更改相同的页面和代码部分,但针对完全不同的问题,因此我们经常发生多个并发、非- 冲突、条件更改和相同功能的其他代码流部分。

我们的问题是,我们使用过的每一个源代码控制系统都会在我们更新后弄乱我们的文件,因此我们希望找到一个源代码控制系统或一个允许对所有文件进行 ACTUAL MANUAL UPDATE 的客户端。我们花了太多时间来确保更新是正确的,所以我们宁愿手动更新以确保一切正常。我们的意思是,由于更改的性质,仅举出我们遇到的两个最简单的问题,一些下拉列表被分配了一个值,该值被来自不同编码器的另一个更新覆盖,稍后向下,或者同一个隐藏输入框有多个赋值。显然这不是更新工具的错,但这正是由于我们工作的性质而发生的事情。

唯一“有效”的是在实际更新/拉取之前手动检查每个文件中的差异(使用存储库检查),在我们的本地版本中手动编辑更改,从而“欺骗”更新工具进入 -not-update on它的条款,但这很耗时。

关于实际冲突,我们使用了 tortoisesvn 自动使整个文件无效的能力,因此这些文件的比较和冲突解决是有意手动进行的,并允许我们根据自己的喜好对问题进行排序。

所以我们好心问:有人知道允许在更新/拉/取期间实际手动更新所有文件的源代码控制客户端或服务器吗?

我们想象的与任何冲突解决工具类似,但适用于更新。基本上我们不希望更新悄悄地改变我们的代码,但我们希望看到每一次更新都会发生以决定“左转或右转”,并避免追踪某些东西为什么停止工作的痛苦工作。

谢谢

标签: gitsvntfsmerge

解决方案


您可以使用git merge --no-commit合并另一个分支而不提交它,以便您可以检查更改,然后提交您想要的。我不相信有任何 Git 托管工具允许这样做,因此您需要在命令行执行每个手动合并。

但是,正如其他人所提到的,这不是解决您问题的好方法。虽然 Git 支持这一点,但它会很痛苦,而且它不是任何版本控制系统的预期用途。最好弄清楚到底发生了什么样的问题,并考虑可能的解决方案。

例如,如果您发现项目列表和这些项目的计数不同步,那么您可能决定计算计数而不是在代码中显式编写它。

如果你发现你有多个项目使用相同的常量值,你可以将这些值保留在一个按值排序的列表中,这样如果两个独立的更新共享相同的值,Git 就会发生冲突。然后,开发人员可以查看整个更改并确定作为解决冲突的一部分需要更新的内容。

这类问题在开发过程中确实很少发生,但通常会使用众所周知的技术来解决这些问题,以帮助工具在可能的情况下失败,并使用自动化测试来使细微的破损变得明显。我强烈推荐这种方法,而不是试图对工具进行微观管理。


推荐阅读