【问题标题】:Perforce like client specs mappings with MercurialPerforce 与 Mercurial 类似的客户端规格映射
【发布时间】:2010-11-11 14:23:04
【问题描述】:

我们最近从 Perforce 迁移到 Mercurial,非常喜欢它!

一个小问题:经过大量研究,我们无法弄清楚如何将存储库中的特殊目录映射到客户端的某个特殊位置。这是我们的 hg 存储库的示例:

/foo/source files
/bar/source files
/build
    /macosx/mac make files
    /win/windows make files

使用 Perforce,我们使用客户端规范映射将 //depot/build/macosx/... 映射到 Mac 客户端上的 /build/... 和 //depot/build/win/...到 /build/... 在 Windows 开发框中。目录 foo 和 bar 按原样同步。 /foo 和 /bar 中的 Makefile 假定我们的构建 makefile 位于 /build 中,我们希望保持原样。最终的客户端文件集应如下所示:

/foo/source files
/bar/source files
/build/client specific make files

我已经阅读了关于 subrepos 的信息,但这个解决方案似乎不是特定于客户端的。

任何想法如何解决这个问题都将非常感激!

【问题讨论】:

    标签: mercurial perforce perforce-client-spec


    【解决方案1】:

    您不能使用 Mercurial 仅签出存储库的一部分。

    你总是得到一个包含所有内容的克隆,工作目录也将包含所有内容。

    使用 Mercurial,您应该努力为 1 个项目拥有 1 个存储库,以便您获得的所有内容在逻辑上属于一起,然后您就不应该只需要其中的一部分。

    这也意味着您在 Mercurial 存储库中的任何目录结构都将始终与您在磁盘上的结构完全匹配。

    【讨论】:

    • 谢谢,拉塞!在那种情况下,我们的问题的最佳解决方案是什么?我们所需要的只是 /build/macosx 中的文件出现在 Mac 客户端上的 /build 下,而 /build/win 出现在 Windows 客户端上的 /build 下......我想一个复制脚本可以解决它,但我们必须运行每次构建系统中的某些内容发生更改时,该复制命令。
    • 为什么引用 /build/ 的文件不能根据它所在的平台引用正确的目录?
    • 我们正在讨论数百个 makefile,每个都以:include ../Build/build.mak 结尾
    • 我想最好的方法是当 $(build) 设置为环境变量时,用 $(build)/build.mak 将它们替换为 include ../build/build.mak。遗憾的是 Mercurial 没有提供灵活的客户端规格映射...
    • @Lasse V. Karlsen 在构建系统和共享库等环境中查看时,它是一个强大的功能。例如,如果您有一个共享库和项目,
    【解决方案2】:

    您无法使用 Mercurial 执行此操作,因为它没有客户端与仓库分开的概念。

    但是,您可以在 Mac OS X 上使用符号链接 (ln -s) 并在 Windows 上使用连接(在 Vista 上使用 mklink 及更高版本,在 XP 上使用连接工具 http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx)来解决文件系统级别的问题。

    或者,您可以使用 Makefile 中的变量来引用构建目录(例如,$(BUILD)/something.ext 而不是 build/something.ext)。

    【讨论】:

    • 他可以将子文件夹映射为父文件夹吗?也就是说,你能把 /a/b 映射成 /a 吗?这不会混淆 Mercurial 吗?听起来他需要告诉 Mercurial 忽略 /build/ 的内容,但这也会使提交对子目录的更改变得困难。我会使用软件中的映射,也就是说,脚本应该处理这个。
    • 嗯,带变量的选项似乎是最好的!它适用于所有平台。谢谢!
    【解决方案3】:

    这种映射不能在 Mercurial 中完成。 “窄”克隆有一个出色的 TODO 项,因此您可以只检查一个子目录。我可以看到支持这种功能的实现。但话又说回来,我知道这样的事情会被认为有点太“聪明”(读起来很复杂),而且这个想法会遭到很多反对。

    同时,我会建议这两种解决方案之一。

    1. 符号链接。将指向build 目录的符号链接放入.hgignore 文件中。然后每个人都可以创建自己的符号链接到相应的构建文件目录。这样做的缺点是无法在没有符号链接的平台上工作。
    2. 在顶级 makefile 中使用的环境变量,用于构造它应该调用的平台特定 makefile 的路径。

    【讨论】:

    • 这意味着 /build/macosx 和 /build/windows 中的任何更改都会更难处理,但也许应该重命名 /build/ 目录以允许这样做。跨度>
    猜你喜欢
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    相关资源
    最近更新 更多