当主干/分支/标签结构混乱时,如何从 Subversion 迁移到 Mercurial?

2024-04-25

我想将存储库从 Subversion 转换为 Mercurial,但是当我最初设置存储库时,我以最懒的方式完成了它。随着时间的推移,该结构不断变形和恶化(此时已有 5 年历史)。尽管如此,我还是想保留尽可能多的历史,即使我必须弄脏并手动将东西缝合在一起。

话不多说,当前的结构如下所示:

svn://svn.example.com/Example
    + trunk
        + BigProject
        + BinaryDepedencies
    + branches
        + BigProject
            + branch1
            + feature1
            + maintenance1
            + ...
    + tags
        + BigProject
            + tag1
            + tag2
            + ...
    + projects
        + small_project1
        + small_project2
        + small_project3
        + ...

鉴于这只是最新的结构,这个存储库还有希望吗?如果没有希望,任何人都有一个在 Mercurial(或 bazaar)中手工重建历史的好方法。

另外,由于各种原因,我将无法使用 git,除非有一个防弹策略将这个特定的存储库从 Subversion 转换为 git 再转换为 hg/bzr。


一种策略可能是转换主干。如果你的躯干移动了,你可能需要玩一些游戏,但这应该不会太难。

你的武器库中的另一个工具可能是 hg->hg 转换和 rebase 扩展。当你将东西放入 hg 存储库后,你可以使用它们来摆弄你的树,并在转换它们后移植到分支上。或者在移动后移植您的主干历史记录的新片段。

这是一个很好的文档链接Mercurial 变基扩展 http://mercurial.selenic.com/wiki/RebaseExtension.

基本上,这是您要遵循的策略...首先,使用转换扩展名 http://mercurial.selenic.com/wiki/ConvertExtension or hgsvn http://pypi.python.org/pypi/hgsvn转换存储库的部分内容。这可能会导致多行主干,或者分支位于与主线不同的存储库中。

如果您有两部分 trunk 位于不同的存储库中,并且位于名为second直接跟在目录中名为first, 你可以这样做:

cd second
hg log -r 0
# Note the revision hash
cd ../first
hg tip
# Again, note the revision hash
hg pull -f ../second
hg rebase --source <revision hash from hg log -r 0> --dest <revision hash from hg tip>

这会将树干的一部分移植到树干的另一部分上。

如果您在单独的存储库中有一个分支,则过程会稍微复杂一些:

cd branch
hg log -r 0
# Note the revision hash
cd ../trunk
# Find the revision that the branch branches off from and note its hash.
# We will call this revision the 'branch base'.
hg pull -f ../branch
hg rebase --source <revision hash from hg log -r 0> --dest <revision hash of branch base>

这会将树枝嫁接到主树上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当主干/分支/标签结构混乱时,如何从 Subversion 迁移到 Mercurial? 的相关文章

  • 如何将 git 存储库转换为 Mercurial?

    我一直在使用 git 作为源代码存储库开发 java 应用程序 我想与其他 java 开发人员分享该项目 hg 似乎是他们最常用的 我的问题是如何将 git 存储库转换为 hg 如果我尝试谷歌搜索 将 git 转换为 hg 并且每次搜索命中
  • 预提交钩子 git 错误

    我正在尝试在 python 中执行预提交 git hook 以检查文件的行长度是否小于 80 个字符 但是我收到没有此类文件 目录的错误 我在 fedora 上并设置了 usr bin python help 将不胜感激 usr bin e
  • 如何将/ff分支提升到HEAD

    我有一个受保护的分支 只有在集成构建上的集成构建通过后 才应提升 快进该分支 我目前尝试通过在集成分支的拉取请求上构建集成来解决这个问题 一旦成功 只需将发布分支快速转发到集成分支的尖端 但是 当我在 TFS 构建系统上构建分支时 它将检出
  • 从 bazaar 转换为 git 并同步它们的正确方法

    我在 bazaar 中有一个开发存储库 我想将其转换为 git 并保持同步 我需要这个 因为我将与不了解 bazaar 的人分享我的代码 首先我需要将我的 bazaar 存储库转换为 git 我用谷歌搜索了一下 发现this http as
  • 连接两个 Git 存储库的历史记录?

    我有一个旧的 Git 存储库 请调用它app 然后 一年后 我想从头开始重建应用程序 所以我创建了一个新的存储库 称之为app 2 现在 我意识到我应该创建一个新分支或其他东西 而不是一个新的存储库 因为我想移动app 2在之上app然后摆
  • 如何修复 git 子模块错误 fatal: Needed a single revision Unable to find current origin/master revision in submodule path?

    我不断收到这个问题 fatal Needed a single revision Unable to find current origin master revision in submodule path coq serapy 我试过了
  • 通过 Git/SVN 将前缀 ? 添加到代码中

    怎么加前缀 v VersionNumber使用 Git SVN 高效地访问存储库中的每个文件 我发现 SO 使用这种做法为其存储库中的每个特定文件提供版本号 他们使用SVN 我想知道如何使用 Git 做同样的事情 举几个例子 1 2 在你的
  • Capistrano 3 运行每个命令两次(新安装)- 配置问题

    我刚刚完成第一次 Capistrano 安装 大部分内容都保留为默认设置 我配置了我的服务器 其身份验证 远程文件夹以及对 git 存储库的访问 我使用 capistrano 将 php 代码部署到我的服务器 上限分期部署 and 上限生产
  • 从 Git 中的分支父级中提取更改

    如何从 Git 中的分支的父级中提取更改 特别是在 github 配置的项目中 例如 假设我分叉了http github com originaluser originalproject http github com originalus
  • 迁移范围的独特性

    我一直在尝试找到一种方法来实现这一目标 但我找不到任何尝试 即使如此 我想也许我的方法是完全错误的 也就是说 我应该做什么移民如果我希望两个字段的组合是唯一的 请注意 我不希望它们成为索引 而只是数据库字段 例如 对于下面的迁移 我可以单独
  • 如何在 NetBeans 中执行“git Blame”?

    NetBeans 内置了对 git 的支持 我可以做一个git blame在 NetBeans 内 如果是这样 怎么办 I googled https www google nl search q netbeans git blame它 但
  • git log over 使用 --follow 时限制输出? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 在以下服务
  • 如何从 Visual Studio 2013 将现有解决方案添加到 GitHub

    我浏览了许多关于 VS 2013 中新的 Git 集成的网页 它们不涉及向 Github 添加现有解决方案 事实上 我找不到太多关于使用 GitHub 而不是 Visual Studio Online 的信息 谁能告诉我如何从现有解决方案开
  • 将新文件推送到新存储库 Git

    我是 git 新手 还没有完全了解工作流程 因此 我在 github com 上创建了一个存储库 并且能够从我的计算机推送所有文件 现在我已经在 github 上创建了一个新的存储库 并在我的计算机上创建了一个新文件夹 所有内容都从新文件夹
  • 无法验证主机真实性

    我第一次做git pull 在git中提示无法确定主机的真实性 与我生成的私钥相比 RSA密钥指纹不正确 我只是想知道如何更新它以便它读取正确的文件以及为什么它首先读取错误的指纹 我遇到了类似的问题 这意味着远程主机未知 不受信任 修复方法
  • SVN 预提交挂钩,用于避免更改标签子目录

    有没有人对如何添加避免更改标签子目录的预提交挂钩有明确的说明 我已经在互联网上搜索了很多 我找到了这个链接 SVN Hooks 拒绝更改 https metacpan org pod SVN Hooks DenyChanges 但我似乎无法
  • 樱桃选择问题:还应用了之前提交的更改

    在我的项目中 我几个月前发布了一个版本 在该版本发布之后 我在 master 分支上做了很多更改 如果我遇到上一个版本中存在的一些错误 我会在主分支上修复它们 然后将它们挑选到我在上一个版本中创建的分支 然后我可以提供一个仅包含错误修复的新
  • git push origin master 失败

    我正在尝试将现有文件夹上传到 gitHub 按照说明 我在 Windows 中输入了以下内容 git remote add origin email protected cdn cgi l email protection myname m
  • 无法通过 HTTPS 克隆私有 Github 存储库

    我在通过 HTTPS 克隆私有 GitHub 存储库时遇到问题 如果我尝试使用以下方式克隆我的存储库 git clone https github com username repository 我收到错误 fatal remote err
  • 在家庭和办公室进行开发,GIT 会比使用 xcopy 的 SVN 更容易吗?

    如果出于安全原因 源代码只能存储在我的家庭计算机和办公室计算机上 如果传输代码的唯一方法是 USB 密钥 那么哪种源代码控制是最好的 SVN还是GIT 注意 两台计算机之间没有网络连接 我推荐git 无论哪种方式 您都需要 USB 密钥上的

随机推荐

  • ASP.Net Identity 2,双因素安全代码时间跨度

    我们通过电子邮件将 2FA 与 ASP Net Identity 2 结合使用 这在大多数情况下工作正常 但在某些情况下 安全代码发送到用户电子邮件时会出现延迟 安全代码的 6 分钟窗口就会变得太短 有没有办法调整 2FA 代码的时间窗口
  • 错误“标记不是预处理器子表达式中的有效二元运算符”

    如果我构建并运行一个项目 基本上是由 Mac OS 10 6 上的 Qt 框架生成的存根 我会得到以下错误输出 Users home Qt5 0 1 5 0 1 clang 64 include QtCore qisenum h 53 Er
  • Ghostscript 9.07:PDF/X-1a:2001:缺少 PDF/X 输出意图

    您能告诉我如何嵌入 PDF X 输出意图吗 当我检查预检时 我报告 PDF X 1a 2001 PDF 文件中缺少 PDF X 输出意图 PDF 文件中遇到的问题 1 PDF X 1a 2001 PDF X version is not P
  • VS2017 构建失败 - DOCKER_REGISTRY

    我正在开始使用 Docker 并熟悉 NET Core 和 Visual Studio 2017 我创建了一个名为 WebApplicationCore21 的新 Web 应用程序 Razor Pages 并启用了 Docker 支持 并立
  • 复制延迟 - 超过 max_slot_wal_keep_size,WAL 段未删除

    Summary 我们正在使用max slot wal keep size来自 PostgreSQL https www postgresql org docs current runtime config replication html1
  • Ember.js - 根据对象属性更新 CSS 宽度

    正如中提到的 安多罗夫的回答 https stackoverflow com a 32593118 565877 OP的理想代码 div style width 1 现在从 Ember 1 10 开始几乎可以正常工作 我是 Ember js
  • 在项目之间共享 ASP.NET MVC 部分视图

    在应用程序之间共享公共部分视图的最佳方式是什么 我创建了一个单独的程序集 其中包含 ascx 文件中的部分视图 一些与该视图配合使用的脚本以及一个 HtmlHelper 扩展方法 以便更轻松地创建部分视图 但是 当从 ASP NET MVC
  • TensorFlow 数据集的函数 cache() 和 prefetch() 有何作用?

    我正在关注 TensorFlow图像分割 https www tensorflow org tutorials images segmentation教程 其中有以下几行 train dataset train cache shuffle
  • Django REST Framework 分页链接不使用 HTTPS

    我正在为某个运行良好的 DRF 端点设置分页 但是 当部署在使用 HTTPS 的服务器上时 下一页和上一页的链接是通过http 代替https 这会导致浏览器阻止对下一页 上一页的请求 我已经仔细检查了初始请求是否已通过 HTTPS 发出
  • Android Studio 中的“应用更改”按钮被禁用(灰色)

    我已将项目的 minSdkVersion 设置为 19 并启用 Instant Run 我已在运行 API 21 的设备中部署了该应用程序 但 应用更改 按钮呈灰色 当我将鼠标悬停在该按钮上时 它显示 No Active App launc
  • 如何禁用 django 中应用程序的一种模型的迁移

    我有一个使用 2 个数据库的应用程序 1 个是默认数据库 另一个是自定义数据库 所以我的模型中有两个使用默认数据库 其他模型使用自定义数据库 我不想在运行 make migrations 命令时迁移自定义数据库模型 请帮忙 您可以通过设置选
  • 使用 NAN 替换强制转换非数字 numpy 数组

    考虑数组 x np array 1 2 a 绑定转换为浮点数组会引发异常 x astype np float ValueError could not convert string to float a numpy 是否提供任何有效的方法将
  • scala案例类问题

    我有两个关于 案例类的问题 可以用作 case head tail gt 它是如何工作的 意思是 Scala 用于将 List 实例与 case 类进行匹配的流程到底是什么 鉴于我有一个类 MyClass 带有运算符 op 我可以创建一个名
  • AWS ECS架构

    我有一个 React 前端和 Flask 后端 我想用 ECS 部署它们 我想让反应应用程序面向公众 并将烧瓶服务器隐藏起来 无法从外界访问 根据我的阅读 该方法应该如下 为 Flask 服务器创建公共子网和私有子网 并在公共子网上创建 N
  • 如何使用 kubectl 列出 kubernetes 中应用的自定义资源定义

    我最近应用了这个 CRD 文件 https raw githubusercontent com jetstack cert manager release 0 11 deploy manifests 00 crds yaml With ku
  • 类成员函数的 std::bind

    我有这个代码 include
  • 有什么方法可以判断我的 iPhone 应用程序在运行时是否在调试器下运行?

    如果我的错误处理代码在调试器下运行 我希望它的行为有所不同 具体来说 如果我在手机上运行 未连接到调试器并且断言失败 我想将错误发送到我的服务器 当我在gdb下时 我想闯入调试器 虽然我可以想象苹果将如何编写代码 但我找不到任何关于测试调试
  • MVC 3 保持短网址

    我有 MVC3 应用程序 我想在其中保留短 URL 最好的或干净的方法是什么 假设我有两个控制器 帐户和主页 我在帐户控制器中拥有所有与帐户相关的任务登录 注销 配置文件 常见问题解答等 家庭控制器中的所有主要任务 如任务 A 任务 B 和
  • 未找到 GnuTLS Libnetttle 3.4

    当我尝试配置 GnuTLS 时 收到错误消息 未找到 Libnetttle 3 4 我安装了 nettle 3 4 1 1 库文件位于 usr lib 中 即使我指定了环境变量NETTLE LIBS直接地 export NETTLE LIB
  • 当主干/分支/标签结构混乱时,如何从 Subversion 迁移到 Mercurial?

    我想将存储库从 Subversion 转换为 Mercurial 但是当我最初设置存储库时 我以最懒的方式完成了它 随着时间的推移 该结构不断变形和恶化 此时已有 5 年历史 尽管如此 我还是想保留尽可能多的历史 即使我必须弄脏并手动将东西