您可以使用Mercurial从一个项目更新另一个项目吗

您可以使用Mercurial从一个项目更新另一个项目吗,mercurial,Mercurial,我会尽量简明扼要地解释我的情况: 我有一个模板项目,在启动新项目时用作模板(duh)。 这个模板项目不断发展,有时我会在处理另一个项目时更新它 想象一下: 模板项目:Template.file 项目A:template.file和projectA.file 项目B:template.file和projectB.file (所有项目都处于修订控制之下)现在,当我更改项目A中的template.file时,我希望所有其他项目中的所有其他template.file都更新 我在windows上,使用

我会尽量简明扼要地解释我的情况:

我有一个模板项目,在启动新项目时用作模板(duh)。 这个模板项目不断发展,有时我会在处理另一个项目时更新它

想象一下:

  • 模板项目:Template.file
  • 项目A:template.file和projectA.file
  • 项目B:template.file和projectB.file
(所有项目都处于修订控制之下)现在,当我更改项目A中的template.file时,我希望所有其他项目中的所有其他template.file都更新


我在windows上,使用的是陆龟,在这个版本控制游戏中我是比较新的。我想我会用树枝做这个?但是projectA.file和ProjectB.file不也会被添加到模板项目中吗?

下面是一些您可以做的事情:

进入模板项目并合并到项目A中,然后在提交之前删减所有不想要的内容。这相当费时费力

然后您可以进入项目be并从模板项目中提取,然后非常小心地合并

我不会这样做的原因有很多。首先,它凌乱而且容易出错。其次,它会导致两个项目都包含所有其他项目的所有文件,即使在tip修订中,这些文件被视为已删除。历史仍然在那里


下面是您可以做的另一件事:

使用
hg export
从项目A导出修改模板文件的更改。然后使用
hg import
将该更改导入模板项目

然后从模板项目拉入项目A和项目B并合并

这要求您在修改项目时严格遵守规则,并始终对模板文件进行修改,以使其能够自行更改

或者,您可以手动修改导出的更改以删除无关的更改


这里是你可以做的第三件事:


始终仅在模板项目中修改模板文件。然后,您可以将模板项目拉入项目A和项目B并合并。

Mercurial中没有任何东西可以让您轻松地使用它

你可以:

  • 将所有内容都放在一个大的存储库中,只需将它们划分到不同的目录中即可
  • 使用子存储库,这意味着项目A和项目B将引用模板项目作为子存储库
  • 只需将相关文件复制到所有其他项目/存储库
  • 在这三种方法中,没有任何一种方法可以帮助您确保每个存储库中的文件是同步的

    在第一种情况下,您将拥有template.file的3个不同副本,更新其中一个副本不会更新另外两个副本,Mercurial中没有任何东西可以帮助您做到这一点

    在第三种情况下,这三个存储库是完全不同和独立的,这意味着一个存储库中的更改不会传播到另一个存储库中

    但是,第二种情况是可以完成的,但是如果您需要在项目a/B存储库中保存文件的副本,那么就回到第三种情况

    但是,您可以将模板项目设置为项目a的子存储库,而不是将文件从模板项目复制到项目a中,而是引用子存储库中的文件


    这就是Mercurial处理此类事情的方式。

    您是否通过克隆原始模板项目来启动新项目?我想我想要的是根本不可能的(至少在没有大量变通技巧的情况下是不可能的)。无论如何,谢谢你的回答。也许有一天它会派上用场。@Brent:我认为
    hg export
    方法比你所说的基本上手动控制版本的方法更适合你。那些子存储库接近我想要的,但还不够。基本上,我希望一些文件是存储库A的一部分,而其他文件是存储库B的一部分,但仍然能够将它们作为一个项目一起使用,而不必担心文件/目录结构。你不能这样做,你也必须将文件复制到所有存储库中(这意味着不同的文件,不同的历史记录,没有跨存储库的干净合并功能),或者将它们合并为一个(这意味着一个文件,一个历史记录,如果您想要多个这样的文件,请返回到第一个)。哦,好吧,我现在将继续使用文件名的版本号,直到找到更好的工作流为止。