【问题标题】:Convert Subversion repository to Mercurial将 Subversion 存储库转换为 Mercurial
【发布时间】:2009-11-01 16:53:49
【问题描述】:

我正在尝试将 SVN 存储库转换为 Mercurial,但遇到了一些麻烦。这些是我采取的步骤:(我在 Windows 上)

在扩展中打开“转换”

打开一个命令窗口,然后输入:

hg convert http://myversioncontrorepositoryhere

它说它正在初始化目标文件夹,然后询问:

Enter username for Administration at http://myversioncontrorepositoryhere:

然后输入我的用户名

 in Administration at http://myversioncontrorepositoryhere:

我假设这是我的密码,但它只是循环回到

Enter username for Administration at http://myversioncontrorepositoryhere:

我做错了什么?我很确定我输入了正确的用户名和密码。

【问题讨论】:

    标签: svn mercurial migration hgrc


    【解决方案1】:

    我不知道可能出了什么问题,但我想提出一个解决方法(这是我个人用于此任务的唯一方法!):首先svnsync svn 项目本地镜像,然后是 hg convert 本地镜像——这就是 O'Sullivan 在his book 中建议的内容(这个 URL 有,作为“书中的样本”,正是用于将项目从其他 VCS 导入到 hg 的相关附录——与特别强调svn!),虽然他的建议主要是出于对速度的考虑,但我怀疑遵循它也为我省去了身份验证和授权的麻烦,我希望它也能为你做同样的事情!-)

    【讨论】:

    • 我正在尝试执行 svnsync,但我不断收到此错误:svnsync: Repository has not been enabled to accept revision propchanges;要求管理员创建一个 pre-revprop-change 钩子所以我启用了 pre-revprop-change 钩子,但它仍然发生。
    • 取消那个——里面的钩子在windows下不起作用,它需要包含“@exit 0”
    【解决方案2】:

    改用hgsubversion;它更强大。我在 Windows 上与 Subversion 的 CLI 交互时遇到了很多奇怪的问题(主要通过使用 CMD 而不是另一个 shell 解决)。

    【讨论】:

    • hgsubversion 显然无法处理非 ASCII 文件名,决定不将它们解释为 UTF-8 而是拉丁文 1。你知道有什么办法吗?
    • 提交错误? :) 说真的,都是Python,应该可以应付的。
    【解决方案3】:

    我有幸通过简单地从本地结帐转换来解决身份验证问题:

    svn co http://myversioncontrorepositoryhere localrepo
    hg convert localrepo
    

    【讨论】:

    • 好点!一个缺点是你错过了trunk/ + branches/ + tags/ 转换......
    【解决方案4】:

    根据我的经验,转换具有大量项目和多年历史的真实 Subversion 存储库会涉及更多内容。主要是因为在 Subversion 中,为所有东西拥有一个巨大的 repo 是很好的。相反,建议 Mercurial 存储库更细粒度。

    我假设以下 Subversion 存储库布局:

    ├── project1
    │   ├── branches
    │   ├── tags
    │   └── trunk
    │       ├── package1
    │       └── package2
    └── project2
    

    转换应将package1package2 转换为具有自己历史记录的独立Mercurial 存储库。在这个答案中我对单路径感兴趣,但标签和分支的转换也是possible

    准备

    我通常在具有快速连接的远程服务器上进行转换。对于 Debian 系列,需要以下软件包。

    apt-get install mercurial subversion python-subversion
    

    然后应该启用转换扩展。

    echo -e "[extensions]\nhgext.convert=" >> ~/.hgrc
    

    在 Windows 上,确保您已完成 the prerequisites

    执行

    请注意,如果您尝试直接从远程 subversion 存储库进行转换,可能需要数小时,因此以下创建项目路径的镜像。那么每次转换都是几秒钟到几分钟的事情。

    cd /tmp
    svnadmin create svn-mirror
    
    # on Windows you may need to look at comments to accepted answer
    echo '#!/bin/sh' > svn-mirror/hooks/pre-revprop-change
    chmod +x svn-mirror/hooks/pre-revprop-change
    
    svnsync init file:///tmp/svn-mirror svn://subversion.repo/project1
    svnsync sync file:///tmp/svn-mirror
    
    echo 'include project1/trunk/package1' > package1-map
    echo 'rename project1/trunk/package1 .' >> package1-map    
    hg convert --filemap=package1-map svn-mirror package1
    
    echo 'include project1/trunk/package2' > package2-map
    echo 'rename project1/trunk/package2 .' >> package2-map    
    hg convert --filemap=package2-map svn-mirror package2
    

    然后在包目录中,您可以运行 hg serve -p 8080 并使用诸如 RhodeCode 之类的 mercurial 客户端或 repo 管理器从 http://your.host:8080 克隆。

    【讨论】:

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