【问题标题】:How to undo subversion misuse?如何撤消颠覆滥用?
【发布时间】:2012-11-13 22:30:59
【问题描述】:

我被要求解决因不正确使用 subversion 引起的问题(据我所知)。

这里是历史,它已经被一段时间的过去、用户的困惑等所破坏,但这是我能弄清楚的最好的。预期目标是在给定时间点归档文件集(主要是标记存储库,但用户不知道这一点)。

  • 用户已签出工作目录
  • 用户没有创建标签,而是通过 unix 复制命令(不是 SVN 移动或 SVN 复制)将文件复制到其工作副本中的子文件夹。
    • 例如工作副本是 /var/tmp/working,他们将文件复制到 var/tmp/working/todays_date
  • 用户注意到这个新目录中缺少一些 .svn 目录,因此他们将 .svn 文件夹从另一个目录(他们不确定在哪里)复制到带有“标签”的目录中。

这是最好的解决方法吗?

我想尝试以下方法:

  • 递归删除错误子目录下的所有.svn文件夹
  • 将目录从 repo 复制到本地
  • 在最后一次提交之前检查工作目录
  • 用“导出的”文件覆盖新工作目录的文件
  • 完成正常的更新/提交过程
  • 创建标签

这有意义吗?还是我对其他问题敞开心扉?

其他问题

  • 教育此用户以使其不再这样做的最佳方式是什么?

更新:更多信息

从用户那里得到以下信息:

  • 我完成了这项工作,然后尝试执行 svn add。
  • 然后我做了 svn 提交,这给了我一些错误。
  • 那时我移动了 .svn 文件,然后它终于完成了 svn 添加和提交,没有错误
  • 但是 svn log 不显示提交的日志消息。

所以看起来用户复制了 .svn 文件夹以尝试进行提交,然后它显然确实添加并提交了,但我们不确定它是否这样做,因为我们在日志中找不到它.

【问题讨论】:

    标签: svn version-control


    【解决方案1】:

    您应该只更新根 svn 文件夹。 它将恢复已删除(移动)的文件,其他未被索引的文件将不会被触及。

    然后你可以使用svn delete命令来清理,或者svn move或者svn copy。但是,如果您这样做,您将丢失 ew“尚未编制索引的文件”和更改。所以也许,svn 删除更容易(但你会丢失历史,因为 svn 无法知道新文件是从另一个文件移动的)

    【讨论】:

    • 我考虑过这一点,但有人担心主干在修订后取得了进展。我在想我可能需要复制整个目录(以防万一发生灾难),然后更新到我可以告诉的工作副本的最新版本(svn log 似乎也很奇怪)。我只是很紧张,因为我不知道用户命令的历史,所以我根本不能相信这个设置。
    • 如果您的所有更改都是新的未编入索引的文件,那么执行还原这些文件将保持不变
    • 您好,请查看更新——添加了来自用户的更多信息。不确定如何判断已提交和尚未提交的内容。
    • 哎呀这是大错特错^^。首先让我们复制用户接触的所有文件以进行备份,然后删除 .svn 所在的文件夹,然后更新。它应该重建 SVN 树。然后让用户重新进行更改。然后提交。 (为什么第一次提交不成功很奇怪,也许他需要在提交之前清理和更新文件夹)
    【解决方案2】:

    如我所见,你必须解决 2 个任务

    • 撤消主干中子目录周围的错误提交
    • 恢复用户的 WC

    是吗?

    1. 通过新提交撤消提交并反向合并错误提交
    2. 将用户的工作副本更新到此提交

    【讨论】:

    • 您好,感谢您的回复!请查看更新——我添加了来自用户的更多信息。您能否解释或链接到反向合并概念?可能是票,但我不确定,特别是如果在他遇到此问题时已对 repo 进行了其他提交。
    • @SeanKilleen - 见this discussion
    • @SeanKilleen - 也来自旧 SVN Book 的 Undoing Changes(在更高版本的书中消失)
    【解决方案3】:

    因此,在与小组协商后,我们能够执行以下操作来解决问题:

    • 已备份文件夹
    • 使用 rsync 创建了没有 .svn 文件夹的文件夹结构的干净副本:

    rsync -avr --exclude='.svn*' /originaldirectory /cleandirectory

    • 更新了工作副本
      • 事先确认此用户的更改是这部分结构中唯一重要的更改
    • 解决了优先使用用户本地工作副本文件的冲突。
    • 尝试提交以找到不正确的目录结构
    • 从文件结构中删除了这些树并重新更新了存储库以再次将它们拉下
    • 最好用干净的文件覆盖所有文件内容,以确保它们是最新的
    • 强制添加结构中的所有文件。
    • 承诺。
    • 完成后创建了一个标签。

    不用说,我们很快就会和他们一起讨论 Subversion 的最佳实践。谢谢大家的指点!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-08
      • 2011-02-12
      • 2022-10-08
      • 2021-06-01
      • 2014-04-12
      • 2013-01-29
      • 2011-03-24
      • 1970-01-01
      相关资源
      最近更新 更多