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

时间:2011-05-08 17:32:44

标签: mercurial

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

我有一个模板项目,我在开始一个新项目时用作模板(duh)。 这个模板项目不断发展,有时我会在另一个项目中更新它。

想象一下:

  • 模板项目:template.file
  • 项目A:template.file& projectA.file
  • 项目B:template.file& projectB.file

(所有项目都在版本控制之下)现在当我在项目A中更改template.file时,我希望所有其他项目中的所有其他template.files都能更新

我在Windows上,使用tortoisehg,我在这个版本游戏中相对较新。我想我会用树枝做这个吗?但那么projectA.file和ProjectB.file也不会被添加到模板项目中吗?

2 个答案:

答案 0 :(得分:2)

您可以做以下事情:

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

然后你可以进入项目并从模板项目中拉出并非常仔细地合并。

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


这是你可以做的另一件事:

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

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

这要求您在修改项目A时自律,并始终对模板文件进行修改。

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


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

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

答案 1 :(得分:1)

Mercurial中没有任何东西能让你干净利落地开箱即用。

你可以:

  1. 将所有内容存放在一个大型存储库中,只需将它们分成不同的目录
  2. 即可
  3. 使用子存储库,这意味着项目A和项目B将模板项目作为子存储库引用
  4. 只需将相关文件的副本复制到所有其他项目/存储库
  5. 在这3个中的任何一个中,没有任何东西可以帮助您确保每个存储库中的文件同步。

    在第一种情况下,你将有3个不同的template.file副本,而更新一个不会更新其他两个,而且Mercurial中没有任何内容可以帮助你。

    在第三种情况下,三个存储库完全不同且分离,这意味着一个存储库中的更改不会传播到另一个存储库中。

    然而,第二种情况可以完成,但是如果您需要在Project A / B存储库中拥有该文件的副本,那么您将回到第三种情况。

    但是,您可以使模板项目成为项目A的子存储库,而不是将文件的副本从模板项目中复制到项目A中,而是指代您在子项目中使用的那个。库中。

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