【问题标题】:Why is "local delete, incoming delete upon update" of a directory a conflict?为什么目录的“本地删除,更新时传入删除”会发生冲突?
【发布时间】:2013-07-01 15:48:22
【问题描述】:

这更像是一个假设性问题,但我一直想知道为什么这个案例被认为是冲突。如果我在本地删除了一个已经从存储库中删除的目录,为什么不能像您期望的那样解决?我没有想到哪些极端情况会使冲突状态成为必要?

【问题讨论】:

  • 因为 subversion 是一个愚蠢的版本控制系统。

标签: svn tree-conflict


【解决方案1】:

我开始深入研究这个问题,我认为这可能是因为 SVN 并不完全确定 delete 是一个简单的删除,还是实际上是一个 move(一个 copy 和一个 @ 987654325@)。来自documentation,它指出:

由于 Subversion 中的移动是作为复制操作后跟删除操作实现的,并且这两个操作在更新期间不容易相互关联,所以 Subversion 可以警告您的只是对本地修改的传入删除操作文件。此删除操作可能是移动的一部分,也可能是真正的删除操作。

所以听起来很安全,SVN 会警告你,而不是你应该更新。当然,它可以忽略删除“冲突”,并简单地复制新移动的文件夹,但我认为一些元数据可能会在本地丢失。

一种可能的解决方法是在本地恢复您的更改,并让传入的更新处理删除。

【讨论】:

  • 那么你如何解决它?
  • @homemade-jam “最简单”的方法就是恢复您的更改并让传入的人删除同一个目录。
  • 好的。恕我直言,svn 对移动文件的支持太糟糕了。
  • 对于未来的读者:我在一个同事移动的文件上出现了冲突,后来我从旧位置删除了。因此,尽管该文件既不在我的工作副本中,也不在该位置的存储库中,但我还是有了这个。尽管如此,尽管没有任何操作对工作副本或 repo 进行任何可见的更改,但 Sneakys 建议仅 svn revert 文件然后更新仍然解决了它。
【解决方案2】:

当您要求 SVN 对无法执行更改的目标文件或文件夹启用更改(合并或更新)时,会出现树冲突。在您的情况下,您要求 SVN 启用删除本地副本中不存在的文件夹。为什么有必要?这对你来说更像是一个警告,对我来说,当一个人试图移动一个目录而另一个人试图在另一个分支中删除它时,它很有帮助。树木冲突就像你描述的那样,是真实的。这两个人必须通过决定如何处理该文件夹来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2011-04-16
    • 2017-07-11
    • 2013-09-08
    相关资源
    最近更新 更多