如何将现有的 Mercurial 存储库转换为使用子存储库并保持历史记录完整?

2024-01-26

我一直在阅读有关子存储库以及如何使用转换扩展和文件映射将现有文件夹从 Mercurial 存储库提取到子存储库的内容。我可以成功地做到这一点。如果我有以下文件夹结构:

C:\Project
---Project\root.txt
---Project\SubFolder
---Project\SubFolder\fileinsubfolder.txt

我可以创建 SubFolder 的子存储库。以大致相同的方式,我可以将其他所有内容提取到单独的存储库中(在本示例中,第二个存储库只有 root.txt 文件)。之后,我可以将 SubFolder 存储库作为子存储库添加到第二个存储库。但是,尽管两个存储库都有完整的历史记录,但这些历史记录并未链接 => 将根存储库更新到较早的状态不会将子存储库置于此时应有的状态。仅当更新到已了解子存储库并具有 .hgsubstate 文件的修订版时,更新到一致的旧版本(根和子存储库均自动更新)才有效。

我想到的替代方案就是忘记当前存储库中 SubFolder 中的文件,并在 SubFolder 中初始化一个新存储库,同时添加 .hgsub 文件。我希望在这里实现的是从此时开始使用子存储库,但仍然有办法更新到旧版本(在分离子存储库之前),因为 SubFolder 的文件仍然在当前存储库的历史记录中。

但这不起作用:当我忘记了 Mercurial 中的文件,启动了一个新的存储库并将其链接为当前存储库中的子存储库,并且在子存储库存在之前更新到旧版本时,我收到此错误:

C:\Project>hg update 1
abort: path 'SubFolder\fileinsubfolder.txt' is inside repo 'SubFolder'

这里的问题是,当更新到不知道子存储库的旧版本时,此更新希望将文件放入子文件夹中。但这个 SubFolder 仍然是另一个存储库(有一个 .hg 目录),尽管主存储库没有关于它的记忆,但更新不想将文件放入 SubFolder,因为它是一个存储库。

是否有办法解决此错误,或者是否有更好的方法可以切换到对现有 Mercurial 存储库中的某个文件夹使用子存储库并保持历史记录完整(并且两个历史记录都链接)?


不,恐怕没有任何工具可以让您按照您要求的方式拆分存储库。

只是为了澄清你的问题,然后让我们假设你有一个存储库,其中的内容root.txt and sub/file.txt像这样进化

   root.txt  sub/file.txt`
0: root 0    file 0
1: root 1    file 1
2: root 2    file 2

对于前三个变更集。您要求的是一个选项hg convert这会将其变成两个存储库(简单,我们今天就可以做到)以及转换扩展注入的位置.hgsub and .hgsubstate文件,以便三个变更集包含

   root.txt  .hgsub     .hgsubstate  |       file.txt
0: root 0    sub = sub  <X> sub      |  <X>: file 0
1: root 1    sub = sub  <Y> sub      |  <Y>: file 1
2: root 2    sub = sub  <Z> sub      |  <Z>: file 2

哪里的<X>, <Y>, and <Z>哈希值是与子存储库中前三个提交相对应的哈希值。

没有这样的选项hg convert今天,但基于上述内容,写一个听起来是可行的。这将为您提供一种在组合存储库和拆分存储库之间来回转换的好方法。

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

如何将现有的 Mercurial 存储库转换为使用子存储库并保持历史记录完整? 的相关文章

  • 我可以从 BitBucket 克隆 git 存储库吗?

    我正在尝试使用 BitBucket git 存储库 但我个人更喜欢使用 hg 这有效 git clone https email protected cdn cgi l email protection projectuser projec
  • 在 Mercurial 中移动分支起点

    我的问题类似于Mercurial 搬迁至新分支 https stackoverflow com questions 4665549 mercurial move changes to a new branch 但并不完全相同 我的一位同事开
  • 将 Mercurial hgsubversion 扩展与 SVN 外部结合使用

    我正在使用 Mercurial 与 Subversion 存储库进行通信 并且该存储库当前正在使用 SVN 外部来拉入另一个存储库 hgsubversion与存储库通信的效果非常好 但它似乎不适用于 SVN 外部 有没有办法配置它来处理这个
  • 如何删除头部?

    我错误地推送了一些文件 它在主存储库中显示了不同的头 我怎样才能删除那个头 您可以通过编辑您的文件来启用 mq 扩展 hgrc文件 确保存在以下行 extensions mq 之后 您可以 剥离 特定修订版 将其删除 这样您就只有一个头 h
  • 在处理其他事情时如何将一堆未提交的更改放在一边

    如果我有一堆未提交的更改 并且想在处理其他事情时将其放在一边 然后稍后 例如几天后 返回并继续工作 完成此任务最简单的工作流程是什么 到目前为止我只体验过 Mercurial 的基本功能 我通常的方法是使用克隆创建一个新分支 但可能有更好的
  • 如何让 Mercurial 将“hg out --patch”差异显示为视觉差异?

    看起来像hg out patch or hg out p是查看哪些代码被推送到存储库 推送时 的好方法 但差异是文本格式的 有没有办法让它使用kdiff3还有 hg outgoing patch单独显示每个变更集中的更改 如果您正在寻找可视
  • Mercurial 和 Notepad++ 集成

    Notepad 是否有插件可以与 Mercurial 和 TortoiseHg 集成 如果将以下内容添加到我们的配置文件中 您可以使用 Notepad 打开文件 tortoisehg editor
  • 服务器和本地之间的 Mercurial?

    我正在进行一个门户开发工作 我有时会遇到一些麻烦 例如丢失 覆盖错误的文件等 所以我决定使用 Mercurial 来进行此开发 我第一次使用源代码管理的经历 我在这个项目的服务器 bluehost 上工作 有什么办法可以在本地保存更新备份吗
  • ssh-add,自动添加私钥

    我有一个公私 ssh 密钥对 由ssh keygen without密码 我将它与我的 bitbucket 帐户一起使用 特别是与 Mercurial 存储库一起使用 通常我在我的家庭工作电脑中手动添加私钥 使用ssh add ssh id
  • Mercurial 合并两个命名分支:工作目录没有祖先

    我有两个命名分支 SPRINT 009 和 SPRINT 010 一些变更集已提交给 SPRINT 009 我想将其合并到 SPRINT 010 中 我能够毫无问题地将分支中的变更集合并回默认值 我在将变更集从branch one合并到br
  • TortoiseHg无法提交--“系统找不到指定的文件”

    我刚刚选择了 TortoiseHg 用于 Windows 上的分布式源代码控制 并将其安装在我的 C 驱动器上 然后我创建了一个存储库 位于 D projects 中 当我尝试提交更改时 它给了我错误 abort None 系统找不到 指定
  • 有什么方法可以改变 TortoiseHg 中图表的绘制方式吗?

    由于习惯了 ClearCase 绘制图表的方式 我乍一看发现 Mercurial 和 TortoiseHg 的方式令人困惑 This http nvie com posts a successful git branching model
  • Mercurial 工作流程是否可以通过未提交的更改进行更新?

    因此 我的网站从 CVS 切换到 Mercurial 我遇到的最大问题是 如果我正在处理一些我不想提交的文件 我只需保存它们 然后我还有其他文件想要推送到服务器 但是如果其他人已经制作了对存储库进行更改 然后我将它们拉下来 它要求我合并或变
  • hg 存档到远程目录

    有没有办法通过 SSH 将 Mercurial 存储库存档到远程目录 例如 如果可以执行以下操作 那就太好了 hg archive ssh email protected cdn cgi l email protection path to
  • Mercurial .hgrc 文件

    默认情况下 在 Windows XP 上 Mercurial 将 hgrc 文件存储在 好吧 就我而言 c Documents and Settings srooks 我如何更改该位置 并让它在其中查找 hgrc 文件 例如 c Confi
  • Mercurial 子存​​储库 - 管理更复杂的依赖关系层次结构

    我有一个主项目 它使用相当标准的源代码树方法 Mercurial 子存 储库 Master lib compiled binaries things like log4net AutoFac etc source VS solution o
  • 如何使用 hg Convert 将 git 分支导入到 Mercurial 中?

    我的 git 存储库中有许多分支 david Panama app git branch r origin HEAD gt origin master origin master origin newButtons origin newFo
  • hg Convert --authors errorUsers <-- 文件的格式是什么?

    Related here https stackoverflow com questions 732819 can i change the username on a mercurial changeset 757604 757604 指
  • 使用 hg 存储库作为网站

    这与我的安全问题有些相关here https stackoverflow com questions 2361626 security deny access to hg via mod rewrite 对实时网站使用 hg Mercuri
  • 有趣的是,当为 Mercurial 添加 .hgignore 时,该文件本身显示为“?”汞状态?

    正常吗 所以你只需要添加 hgignore到列表中忽略自身 是的 但你不想忽视 hgignore文件 当新人查看您的存储库时 您不希望他们获得您的忽略文件列表吗 相反 做hg add hgignore hg commit 底线 hgigno

随机推荐

  • 设置驱动器卷标签

    我正在开发一个小型实用程序 我想在其中更改连接到计算机的闪存驱动器上的卷标 我知道 DriveInfo 能够做到这一点 但我不知道如何实现它 如果有人有代码示例 我将非常感激 这是我目前拥有的 DriveInfo allDrives Dri
  • 如何在 ListView 构建器中创建与 flutter 中旁边的标签一致的按钮列表?

    我需要制作这个应用程序 在 flutter 中使用 ListView 显示历史人物列表 到目前为止我已经能够列出历史人物的名字了 我的下一个任务是为名称旁边的每个历史人物制作一个按钮 这会将您带到另一个屏幕 其中包含有关该特定历史人物的信息
  • Python中的成对叉积[重复]

    这个问题在这里已经有答案了 如何获取交叉产品列表pairs来自Python中任意长列表的列表 Example a 1 2 3 b 4 5 6 crossproduct a b 应该产生 1 4 1 5 1 6 您正在寻找itertools
  • Flutter readAsBytesSync 文件读取不完整以进行 base64 编码

    项目清单 我正在尝试通过 HTTP POST 使用 base64 编码将 JPG 图像 由模拟器中的 ImagePicker 捕获 发送到 AWS REST API 但是 readAsBytesSync 操作仅读取图像的 头 部分 我已经测
  • C# String.IsNullOrEmpty:好还是坏?

    在工作中发生一次我将 String IsNullOrEmpty 与 Session 变量一起滥用的事件之后 我的一位同事现在拒绝接受我对 String IsNullOrEmpty 的使用 经过一番研究 显然 MSDN 上列出了 IsNull
  • 用于检查 zip 文件是否损坏的 Python 脚本

    如何检查 zip 文件是否损坏 我有一个包含 10 张 jpg 图像的 zip 文件 我能够提取其中 8 张图像 zip 中的两个图像已损坏 我无法提取它们 有没有办法在 Python 脚本中检查这一点 此代码将抛出异常 如果 zip 文件
  • 如何获取准确的浏览器名称和版本?

    我尝试了一些解决方案 但无法获得确切的名称和版本 我正在尝试以下代码 browserAgent SERVER HTTP USER AGENT echo browserAgent 上述代码的输出 Mozilla 5 0 X11 Linux i
  • Handsontable:如何更改渲染函数中的单元格值

    我有类似的代码
  • 将 pdb 文件包含到我的 nuget (nupkg) 文件中

    我正在使用 MSBuild 生成我的 nuget 包 我是否需要设置任何命令 以允许它包含我的 pdb文件 以便在调试时进入源代码 我不希望将源文件包含到拉入 nuget 包的项目中 生产 最简单的配置方法是有一个Directory Bui
  • 计算三次贝塞尔曲线长度的廉价方法

    三次贝塞尔曲线长度的解析解 看似不存在 但并不代表 编写廉价的解决方案并不存在 我所说的 便宜 是指 50 100 ns 或更短 范围内的时间 有人知道类似的事情吗 可能分为两类 1 错误较少 如 1 但代码速度较慢 2 错误更多 例如 2
  • 高效地从 PHP 数组中选取 n 个随机元素(无需随机播放)

    我有以下代码可供选择 n数组中的元素 array in PHP shuffle array result array splice array 0 n 给定一个大数组但只有几个元素 例如5 out of 10000 这相对较慢 所以我想对其
  • 反应引导 + purgeCss + next.js

    PurgeCss 删除了我的项目中使用的react bootstrap css 类 我正在使用 Next js 框架 app js import styles style scss import React from react impor
  • 我的 kafka docker 容器无法连接到我的 Zookeeper docker 容器

    我想同时使用confluent kafka and confluent zookeeper并在单个 Ubuntu 服务器上运行它们 我正在使用以下配置 docker run e ZOOKEEPER CLIENT PORT 2181 name
  • Conda 不会删除包

    我的命令是否做错了什么 我无法删除 Keras conda remove name myEnv keras Collecting package metadata repodata json done Solving environment
  • CORS:预检通过,主请求完成 w/200,但浏览器仍然存在 Origin 错误

    我正在向运行 Express 的节点服务器发送 CORS ajax 请求 在服务器日志和 js 控制台中 我可以看到预检 OPTIONS 请求成功 然后 主请求也在服务器上成功 并以 200 和我认为正确的标头进行响应 但是 在 Chrom
  • 实施 Sitecore Multisite Robots.txt 文件

    如何为同一 Sitecore 解决方案上托管的每个网站实现不同的 robots txt 文件 我想从 sitecore 项目中动态读取 robots txt 您需要执行以下步骤 1 创建并实现您的自定义通用 ashx 处理程序 2 在 we
  • 滚动到时开始动画

    我花了一整天的时间寻找一种简单的方法来让我的动画在滚动到页面上的特定位置后开始 My css animation width 50 float left position relative webkit animation name tes
  • LaunchD Plist 不工作

    编辑 看起来好像我在控制台中收到错误 com apple launchd com xxxx adbind 57 退出 代码 1 那有什么意思 还 如果我加载使用 launchctl 命令登录的 launchd plist 文件 它工作正常
  • 在 web.config 中存储值 - appSettings 或 configSection - 哪个更有效?

    我正在编写一个可以使用几个不同主题的页面 并且我将在 web config 中存储有关每个主题的一些信息 创建一个新的sectionGroup并将所有内容存储在一起 还是将所有内容都放在appSettings中 是否更有效 配置部分解决方案
  • 如何将现有的 Mercurial 存储库转换为使用子存储库并保持历史记录完整?

    我一直在阅读有关子存储库以及如何使用转换扩展和文件映射将现有文件夹从 Mercurial 存储库提取到子存储库的内容 我可以成功地做到这一点 如果我有以下文件夹结构 C Project Project root txt Project Su