给定UUID错误,将我的SVN从本地移动到Assembla

时间:2012-02-06 15:59:55

标签: svn tortoisesvn

我看了this post,准备使用--force-uuid

然而,我的程序员建议我也可以在我的服务器上进行新的结账,以防万一Assembla和现有的TortoiseSVN格式不一样(转到Assembla,让我们新鲜/干净)。

我并不完全相同,因为我最初并没有自己设置SVN,也不熟悉服务器/ SVN管理。

迫使UUID匹配是否存在任何可能的损害或风险?

非常感谢任何方向。

1 个答案:

答案 0 :(得分:1)

让我们从 服务器 中分离 客户端 ...

我假设Assembla是存储库的位置。这是您的Subversion 服务器

TortoiseSVN是您用于从服务器检出软件的软件。这是您的 客户

首先,我们来谈谈 服务器

服务器上的每个Subversion存储库都有一个所谓的通用唯一标识符(UUID)。这是在创建Subversion存储库时创建的。 Subversion如何生成UUID,并且知道整个世界的Subversion存储库中没有其他人不共享这个UUID?它确实没有,但是不太可能有另一个带UUID的Subversion存储库。根据时间,IP地址和MAC地址以及一些伪随机值,UUID为generated

由于UUID保证对于整个世界中的任何Subversion存储库都是唯一的,因此您的Subversion客户端可以使用它来确保它与您从原始结账时所使用的存储库进行通信。

当您将Subversion存储库从一个位置移动到另一个位置时,您必须创建一个新的Subversion存储库,您可以在其中加载数据。由于这与以前的存储库实际上是相同的,因此Subversion加载命令允许您将新的Subversion存储库的UUID重置为与旧版本相同。

请注意这已完成:

  1. 在服务器上
  2. 当您将数据导入存储库时
  3. 这不是由您的客户端软件完成的,因为这是问题的 服务器端


    现在,我们将讨论您的Subversion 客户端 ,在本例中为TortoiseSVN

    当Subversion客户端签出工作目录时,它会跟踪您执行签出的URL以及该存储库的UUID。

    让我们看一下使用TortoiseSVN的工作目录。右键单击Subversion checkout文件夹,然后选择下拉上下文菜单底部的 Properties 不要进入TortoiseSVN子菜单!从上下文菜单底部选择属性菜单项。

    单击 Subversion 选项卡。你会看到几条信息。其中两个是结帐发生的URL,以及存储库的UUID。

    右键单击结帐文件夹并执行TortoiseSVN->重新定位时,您可以更改结帐发生的URL。但是,您无法更改该结帐的UUID。

    那是因为您的Subversion客户端正在使用它来确保即使您已将Subversion存储库移动到新服务器,也要与同一存储库进行通信。


    如果您移动了存储库,但是没有确保UUID是相同的,您可以做什么?以下是从最佳到最差的几种解决方案。

    • 做一个全新的结账。这是 BEST 选项。在移动Subversion存储库之前,您应该检查所有更改。如果没有,您可以使用状态查找更改并将其复制到新的结帐时。
    • 使用旧的转储文件重新加载存储库,这次请确保使用--force-uuid标记。
    • 可以通过手动编辑UUID来更改Subversion服务器上的UUID。 Subversion服务器的UUID存储在服务器上的db / uuid文件中。您可以在旧的结账中找到旧的UUID(见上文)。只需更改Subversion存储库目录中db / uuid文件中的UUID即可。记住一个错误的举动,你完全破坏了你再次读取你的存储库的能力。你的公司将丢失整个源代码,破产,你工作中的每个人都会失去工作并永远恨你。没有压力。
    • 破解您的Subversion结帐,将UUID更改为新的UUID。 UUID位于您已检出的每个目录中的.svn\entries文件中。如果您使用的是基于Subversion 1.7的客户端,则所有投注均已关闭。我相信UUID可能是加密的。这可能有效,但是如果您尝试提交更改,它可能会创建一个损坏的检出项,最终会损坏主存储库。