Perforce就像客户规格与Mercurial的映射一样

时间:2010-11-11 14:23:04

标签: mercurial perforce perforce-client-spec

我们最近从Perforce搬到了Mercurial并且喜欢它!

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

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

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

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

我已经阅读过subrepos,但这个解决方案似乎并不是客户特定的。

非常感谢任何想法如何解决这个问题!

3 个答案:

答案 0 :(得分:3)

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

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

使用Mercurial,您应该努力为1个项目设置1个存储库,以便您在逻辑上将所有内容都归属于一起,然后您不应该只需要它的一部分。

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

答案 1 :(得分: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)。

答案 2 :(得分:1)

这种映射无法在Mercurial中完成。 “narrow”克隆有一个出色的TODO项目,所以你只能查看一个子目录。我可以看到支持这种功能的实现。但话说回来,我知道像这样的东西会被认为有点过于“聪明”(读起来很复杂),而且这个想法会有很多的推迟。

与此同时,我会建议这两种解决方案中的一种。

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