Mercurial 子存​​储库 - 管理更复杂的依赖关系层次结构

2024-04-24

我有一个主项目,它使用相当标准的源代码树方法+ Mercurial 子存​​储库。

Master
\lib - compiled binaries - things like log4net, AutoFac, etc
\source - VS solution, one folder per project, etc
\tools - stuff used during the build process

\source\contrib - contains any subrepos like so:

\source\contrib\Sub1
\source\contrib\Sub2

Master\.hgsub contains something like
source\contrib\Sub1 = https://myserver.com/Sub1

现在,最近确定 Sub2 需要 Sub1 的一些代码,因此我必须针对这个新的依赖结构进行调整。

当然,问题是,如果我遵循与上面相同的方法并将 Sub1 添加为 Sub2 的子存储库,我最终会遇到这种丑陋的情况。

\source\contrib\Sub2\source\contrib\Sub1

Master现在拥有2个独立的Sub1副本!

所以我知道在引用子存储库(= 的 RHS)时我应该使用相对路径——但这对我理解的场景没有帮助。我不认为有什么办法可以让 LHS 活下去outside主存储库,我think这是我真正需要的。

关于如何解决这个问题,我有一些想法,但没有一个适合我,我认为必须有更好的方法。我理想的解决方案允许我在多个项目之间共享相同的子存储库,而无需支付拥有多个副本的惩罚。在我的场景中,这似乎既浪费又低效(另外,我希望所有依赖 Sub1 的项目都使用相同的 hg 修订版,而不是独立修订)

  1. 删除 Sub1 作为 Master 的子存储库,并更改 Master 解决方案中的所有相对路径以引用双重嵌套的 Sub1。这个路径结构不仅丑陋,而且如果向 master 添加一个依赖于 Sub1 的 Sub3,我仍然有 2 个 Sub1 副本。

  2. 编译 Sub1 的副本并将其放入 \lib 目录中。 Sub1 仍在经历一些改动,我宁愿根据源版本进行构建。我不想一直不断地将新的二进制文件复制到源树(并使树膨胀)而付出代价。

  3. 以某种方式打破 Sub2 对 Sub1 的依赖。根据存储库的架构,这可能不会发生。 Sub1 包含一些非常通用的共享库代码。 Sub2 包含两个非常独立的项目(客户端 SDK 和服务器实现)所需的 WCF 服务契约/接口/类型。此时,将这些存储库分开是有意义的。

也许我的想法是错误的......或者也许我不知道一些 hg 技巧。

任何帮助表示赞赏。


我想说,忘记签入二进制文件,这只会导致存储库膨胀。 IMO,构建的任何输出都不应该存储在源存储库中。

教 Sub2 期待在 ../Sub1 找到 Sub1 怎么样?然后,如果您发现需要独立于 Sub1 处理 Sub2,请创建一个“Sub2_standalone”存储库,将 Sub1 和 Sub2 作为子存储库引入。

因此,在处理所有事情时,您会得到:

Master/
Master/source/contrib/Sub1  
Master/source/contrib/Sub2

但是当刚刚在 Sub2 上工作时:

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

Mercurial 子存​​储库 - 管理更复杂的依赖关系层次结构 的相关文章

  • PyCharm:版本控制 .idea 文件夹,同时在开发人员之间保留不同的解释器

    我们使用 PyCharm 作为项目的 Python IDE 开发人员使用不同类型的操作系统设置 例如 python 路径对于我们中的某些人来说是不一样的 有些人将本地解释器存储在不同的位置或远程解释器 不幸的是 python解释器路径存储在
  • 在 Mercurial 中移动分支起点

    我的问题类似于Mercurial 搬迁至新分支 https stackoverflow com questions 4665549 mercurial move changes to a new branch 但并不完全相同 我的一位同事开
  • Mercurial diff 在移动/重命名后不起作用

    将文件移动到另一个目录后 我无法再显示两个修订版之间的差异 例如 hg init touch a hg add a hg ci m Added a echo Bli gt gt a hg ci m Bli echo Bla gt gt a
  • 如何处理与 hgsubversion 的合并?

    我正在尝试为使用 Subversion 的项目做出贡献 我使用 Mercurial 及其 hgsubversion 扩展来克隆存储库 我的工作发生在功能分支上 如何使功能分支与默认分支 hgspoke 又名主干 svnspoke 上发生的事
  • Git/Mercurial (hg) 意见 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 首先声明 我不是一个专业的程序员 而是一个有需要并且必须学习的工程师 我总是独自工作 所以只有我和我的七个分裂人格 我们作为一个团队工
  • 将 Mercurial 文件夹转换为 Git 存储库

    我对 Mercurial 没有丰富的经验 我主要是一个 Git 爱好者 我希望在 git 存储库中镜像特定的 Mercurial 文件夹 文件 我实际上想做的是将文件的历史记录从 Mercurial 存储库导出到 Git 并能够使其与未来的
  • Mercurial Hook - 更改提交前的提交消息

    Edit制作这个基本钩子是为了防止分支名称和提交消息 bugID 不匹配 https gist github com 2583189 https gist github com 2583189 所以基本上的想法是 如果分支名称类似于 bug
  • 服务器和本地之间的 Mercurial?

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

    我正在尝试对使用 Mercurial 的 Codeplex 项目进行更改 我收到以下错误 中止 HTTP 错误 500 找到放弃的事务 运行 hg recovery 我在我的家用电脑上尝试过 但遇到了同样的错误 我运行 hg recover
  • 你已经从颠覆转向善变了吗?值得付出努力吗?

    我正在更好地了解 Mercurial 版本控制系统 并且正在考虑从 SVN 进行转换 有人已经转换了吗 对于您和您的团队来说 转变是否困难 您能否给出一些建议 是继续使用 SVN 还是选择 Mercurial 一旦开始 你就永远不想回去 优
  • ssh-add,自动添加私钥

    我有一个公私 ssh 密钥对 由ssh keygen without密码 我将它与我的 bitbucket 帐户一起使用 特别是与 Mercurial 存储库一起使用 通常我在我的家庭工作电脑中手动添加私钥 使用ssh add ssh id
  • git、mercurial、bazaar 源代码库的可理解性

    我想阅读一种流行的版本控制工具的源代码 以了解版本控制的工作原理 我想读一本最具可读性的书 我不知道对此有什么客观 定量的衡量标准 所以本着WTF 分钟漫画 http www osnews com story 19266 WTFs m 想请
  • 将 Mercurial 存储库转换为 svn 存储库

    我知道你可以将 svn 存储库转换为 Mercurial 存储库 或使用 Mercurial 作为 svn 存储库的客户端 但我想要的是将 Mercurial 存储库转换为 svn 存储库 我们有一些使用 SVNKit 的工具 我们想继续使
  • hg 存档到远程目录

    有没有办法通过 SSH 将 Mercurial 存储库存档到远程目录 例如 如果可以执行以下操作 那就太好了 hg archive ssh email protected cdn cgi l email protection path to
  • 如何获取两个任意变更集之间修改的文件列表?

    我唯一的猜测是这样可怕的事情 files where something has been added hg diff r AA r BB grep cut f1 cut d f2 gt tmp ka files where somethi
  • 在 Mercurial 中配置 eol 扩展时出现问题

    我正在尝试将 UNIX 托管的 Mercurial 存储库克隆到 Windows 计算机 我希望使用eol扩展名 以便我在服务器上以 LF 结尾的文本文件在克隆到 Windows 计算机时具有 CRLF 以前我用过win32文本扩展效果很好
  • Mercurial Eclipse 插件

    在哪里可以找到好的 Eclipse Mercurial 插件 MercurialEclipse https bitbucket org mercurialeclipse main 更新站点 https bitbucket org mercu
  • 如何在 cygwin 下配置 Mercurial 以使用 WinMerge 进行合并?

    当 Mercurial 在 cygwin 下运行时 弄清楚如何生成有点棘手WinMerge http winmerge org 来解决合并冲突 我怎样才能做到这一点 诀窍是 cygwin 路径与 Windows 路径不同 因此您需要一个小脚
  • 正在搜索 Mercurial 存储库 (TortoiseHG)?

    有什么方法可以输入特定的文件名 例如 xyz txt 并使用 TortoiseHG 在 Mercurial 存储库中搜索该文件的任何签入 如果没有 为什么不呢 这不就是版本控制的用途吗 在 Hg Repository Explorer 窗口
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外

随机推荐