Mercurial中的常见文件

时间:2014-05-13 08:40:11

标签: mercurial

我们有一个包含许多项目的Mercurial存储库,每个项目都位于自己的目录中:

- Main Repo
  - Project A
  - Project B
  - ...

每个项目都是自包含的,并且必须位于它自己的目录中,但是项目之间应该有一些相似的公共文件。

例如,有些项目是网站,它们共享我们开发的通用JavaScript库。在一个项目中更改库时,我们希望它也可以在其他项目中进行更改,但该文件必须位于每个项目中。

我读到了关于子回购的内容,但它们似乎不是一个好的解决方案。

有没有办法在Mercurial中实现这一目标?

3 个答案:

答案 0 :(得分:2)

您正在寻找一种功能,可以在多个位置保留相同的文件版本,也称为文件克隆或其他类型的源代码控制中的文件共享,例如Sourcesafe或Vault。 Mercurial中没有这样的机制。每个文件都是一个单一的实体,只有一个位置。

您的第一个解决方案是将公共库保存在单独的位置。您需要一个可以被所有项目访问的单个副本。如果您使用子回购并不重要,只要您的文件夹结构包含所有内容,它们都可以在同一个回购中,但sub-repos can be easier to manage if your projects are not related

您可以使用其他解决方案来声明内部策略以始终手动同步和提交公共库(我不建议这样做,因为它容易出错且需要付出努力),或者创建一个脚本,或者作为钩子或不,在提交之前或更新之后同步您的文件(无论如何建立和维护都比较繁琐)......

结论,请分离您的公共库。你会很高兴你花了额外的时间从一开始就正确地设置一切。

答案 1 :(得分:2)

根据我的经验(本地Linux存储库),使用符号链接处理共享文件可以正常工作,但创建包含公共文件的库通常会更好。

答案 2 :(得分:2)

即使您的所有项目都有一个存储库,也建议您使用单独的库/工具/等。公共代码的存储库。

你可以"使用"你的项目中的这个代码将在很大程度上取决于你的技术和基础设施:java / maven / ant world,linux distrib,ruby gems等。你通常会有某种"依赖规范"您可以指定需要此类库的语言。在rails的Gemfile中,使用autoconf进行C / C ++等。大多数情况下,您还可以指定特定版本(或者大于等等),以便处理API更改。

基本上不建议在SCM级别解决此问题,而是使用正确的框架将公共代码与项目存储库分离。