svn - 在SVN中的分支之间合并单个文件是 "safe"吗?

标签 svn version-control merge

如何在SVN中合并单个文件的问题是answered before ,所以我的问题是:这样做安全吗?如果我最终在某个时候合并整个分支,SVN 会“得到”特定文件已经合并了吗?如果我在合并整个分支之前来回合并更改怎么办?

最佳答案

是的,您可以合并单个文件,但这样做通常被认为是不好的做法。

问题是 Subversion 使用了 svn:mergeinfo跟踪合并。如果文件没有这个 svn:mergeinfo属性,它使用 svn:mergeinfo的父目录。当您到处合并单个文件时,所有这些文件现在都有自己的 svn:mergeifno他们身上的属性(property)。

这会导致真正的问题吗?不。Subversion 工作正常。问题只是被感知。每次 Subversion 更新 svn:mergeinfo属性,即使该文件的内容没有更改,它也会创建该文件的另一个版本。

这是一个问题,当您将主干合并到分支时(反之亦然)。你运行这样的命令:

$ svn merge http://svn.mycorp.com/svn/project/trunk .

您看到 100 多个文件被修改,但您 知道 应该只合并 3 或 4 个文件。

检查这些文件,您会发现唯一的区别是 svn:mergeinfo属性已更改以表明您已将最新内容合并到这些文件中(即使它不会更改文件本身的内容)。没有真正的问题。只需允许 Subversion 更新这些文件的 svn:mergeinfo提交上的属性,一切都很好。是的,如果您执行 svn log,合并将显示在提交中更改了 100 多个文件。 ,但仔细审查会发现只有他们的 svn:mergeinfo属性已更改。

您不应该做的是还原这些文件。这将标志着更改没有合并到这些文件中(即使它没有更改它们的内容)。下一次合并将尝试重新合并前一次合并并造成更大的破坏。

有时,当开发人员看到这一点时,他们开始向我提示修改。毕竟,如果文件本身没有变化,为什么要修改这些文件?他们对所有 svn:mergeinfo 感到沮丧变化。

这就是为什么始终在项目的根目录而不是单个文件中合并被认为是最佳实践的原因。这样,只有项目根目录下的目录才能获得 svn:mergeinfo属性,项目中的所有其他文件都将使用该 svn:mergeinfo属性(property)。

如果您和您的所有开发人员都理解这一点,并且愿意忍受这种行为,那么合并单个文件就没有问题。由于这种并发症,通常不会这样做。

关于svn - 在SVN中的分支之间合并单个文件是 "safe"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12730180/

相关文章:

git - 禁用 git 暂存区

php - 合并两个 mp3 php

Python Pandas 合并数据帧而不重复列

svn - 检查文件是否已使用 Subversion svn 更改

svn - 如何完全卸载 TortoiseSVN 1.8.4

version-control - 如何在 git 仓库中放置一个虚拟文件?

SVN - 从分支创建分支是错误的吗?

firebase - 如何在firebase firestore中准确合并多个流

svn - 使 SVN 的外部定义万无一失?

android - Android Studio:如何获取当前所选产品 flavor 的名称?