【问题标题】:Subversion Merge between multiple working copies?多个工作副本之间的颠覆合并?
【发布时间】:2010-10-02 12:53:30
【问题描述】:

我们已经完全失去了我们的存储库,并且我们有 8 名开发人员进行了未提交的更改。假设无法从备份中恢复。

如果一个人可以访问所有工作副本(文件副本或远程共享),是否可以将我们工作副本中的更改合并到一个工作副本中?然后可以将最终的工作副本导入到新的存储库中。

简而言之,你可以在没有服务器的情况下合并两个不同的工作副本吗?

编辑:请不要因为没有备份而对我撒尿;那部分是我无法控制的。假设他们每晚都会备份。

跟进:这就是我们所做的:

  1. 从最新开始 所有开发人员的工作副本。
  2. 已将其导入新的存储库。
  3. 从最新的工作副本修订版到最旧的工作副本,仅复制到随后提交更改的文件中。
  4. 洗涤-漂洗-重复 6 次。 (2 个开发者没有未提交的更改)。
  5. 导出所有旧的工作副本,将它们拉上拉链并存储起来,以便在需要时妥善保管。
  6. 将发布管理数据库中的修订更新为现在非常年轻的存储库。

【问题讨论】:

  • 当需要合并来自多个开发人员的工作时,我利用了 Git。 Git 非常擅长创建和合并分支。 git-svn 工作得很好。基本上,您在 SVN 中标记您“开始”的代码。使用 git-svn 基于该标签创建一个 git 存储库。复制您更改的文件。检查差异。提交更改。然后从 SVN 更新到最新版本(这会将 SVN 更改合并到本地更改中)。然后将您的更改推送回 SVN。一个 git repo 可用于执行多个合并和推送。雅各布

标签: svn backup recovery


【解决方案1】:

由于您丢失了存储库(很抱歉),您也丢失了整个历史记录。

你现在所能做的就是从头开始。

  1. 创建一个新的存储库
  2. 创建文件夹结构
  3. 将第一个用户的工作副本导出到新文件夹
  4. 将导出的文件夹导入到存储库中
  5. 所有其他用户现在签出新的工作副本
  6. 所有其他用户现在“导出”他们的原始工作副本以覆盖新的工作副本

“导出”是指创建工作副本的副本,但其中没有隐藏的 .svn 文件夹。

【讨论】:

  • 谢谢,这听起来很简单。不好玩,但不难;)
【解决方案2】:

您好,这是一个棘手的问题。 但这是我会做的。

  1. 创建一个新的存储库。
  2. 创建 8 个分支和 1 个主干
  3. 导入开发人员在分支上的工作。
    • 分支 1 上的开发人员 1
    • 分支 2 上的开发人员 2
    • 等等等等
  4. 然后开始从分支 1 合并到主干。 当你的后备箱状况稳定时, 你继续分支 2 等等

当你完成这项可怕的工作时, 教开发人员尽早并经常检查... 以及如何使用分支...

/约翰

【讨论】:

    【解决方案3】:

    您的问题不在于您丢失了服务器,而在于 repo 本身。除了重新创建一个新的 repo 并仔细分类各种工作副本以供导入之外,我看不出你能做什么。祝你好运。

    PS:没有备份对你不利...

    PPS:DVCS 可以通过在每个开发人员的沙箱中为他们中的大多数人提供完整的 repo 副本自然地解决这种问题。

    【讨论】:

    • 我简化了我的问题。还添加了有关备份的注释。 :D
    • 明白。无论如何,我的观点仍然存在,无论是对如此重要的事物进行自己的备份,还是对 DVCS :)
    【解决方案4】:

    最简单的方法是创建您自己的服务器,创建一个测试存储库,在其中添加一个(最稳定的)构建,然后一次合并一个工作副本。但是,是的,您丢失了所有历史记录,因为您丢失了旧的 repo。

    然后您可以从该测试中创建您的主存储库。

    【讨论】:

      【解决方案5】:

      我会尝试只选择一个工作副本来导入新的 repo,然后使用 svn switch 将剩余的 7 个工作副本重新指向该新 ​​repo,可能使用 relocate,让他们相信它是同一个 repo但搬迁。只需尝试从丢失的存储库中为初始导入选择一个没有(或尽可能少)结构更改的工作副本:例如只是文件编辑。

      当然,如果上述方法不起作用,请对工作副本进行大量备份:)

      【讨论】:

      • 我认为我必须这样做。不知道 WC 将如何应对比头部更高的转速。是的,我已经制作了两份自己的 WC。
      • 在进行初始导入后,您也许可以使用 svnadmin dump/load 来修改修订版本号。不知道这有多容易,我从未使用过 svnadmin 转储中的转储文件格式。
      • 工作副本不应该被切换/破解/编辑以指向与原始存储库具有不同历史记录的存储库..因为这对于 subversions 更新策略是不可能的(仅发送与基础版本的差异双方都知道)。
      【解决方案6】:

      Subversion 将文件的原始版本保存在本地工作副本中。创建一个新的存储库,复制最旧的工作副本,还原工作副本 COPY 上的更改,然后将该工作副本导入新的存储库。

      svn 导入:http://svnbook.red-bean.com/en/1.0/re12.html

      导入后,您可以使用 svn switch --relocate 将其他工作副本重新指向您的新存储库,并提交更改。

      svn 开关 --relocate: http://svnbook.red-bean.com/en/1.1/ch04s05.html

      【讨论】:

      • switch --relocate 可能不起作用,因为修订号等不匹配...
      • switch --relocate 仅应在存储库移动时使用。而不是在您更改历史记录时使用..(工作副本中的 uuid 可以防止这种情况发生;并确保您不会丢失如果你仍然尝试工作)
      【解决方案7】:

      从最原始的工作副本在与旧版本相同的位置创建一个新存储库(这样您可以在新存储库中捕获更多历史记录)。

      如果它不起作用,请从新存储库的签出中放入 .svn-directories。 (例如结帐,并删除除 .svn 目录之外的所有内容)

      【讨论】:

        猜你喜欢
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多