0

我工作的Java中有一个项目。

要在 Mercurial 中拥有该项目,我知道我必须为所有类创建一个存储库。

由于有很多类,我想如果我可以拥有一个由存储库副本加上我必须做的修改组成的 jar 副本。

所以用 Mercurial 术语来说有:

  1. 一个包含所有类的主仓库
  2. 一个带有修改和新类的小仓库

我想从 B 回购合并到 A 回购。然后我只想提取和更新 B 存储库中存在的类 (*.java)。

我试过这个没有成功:

  1. 要创建 B 存储库,我克隆 A 存储库并删除所有文件。
  2. 当我必须修改 .java 时,我会 wget在我的本地机器中的 mercurial 服务器上执行特定文件。当文件是新文件时,我只运行 hg add。
  3. 为了完成我hg commit -I file1 -i file2 ... -i fileN对 B repo 工作文件夹中存在的所有文件的提交。

然后是不成功的部分:

  1. 我不能只对现有文件进行 hg 更新。
  2. 当 B 存储库合并到 A 存储库时,一切正常。但是我不能运行带有-I 参数的合并状态的 hg commit。它的全部或全部。
  3. 当我从 A repo 中提取并尝试更新时,我遇到了同样的问题 4。

我知道hg pull -f从 B 回购的不相关回购开始,而不是克隆。但它有同样的更新问题。而且看起来很丑。

我认为移植插件可能会有所帮助。我还阅读了如何在 Mercurial 中结合两个项目?.

必须在 A Repo 中保留文件的历史记录,即使此历史记录是在 B Repo 中生成的。

您知道实现这一目标的最佳方法吗?

谢谢

4

1 回答 1

4

您要查找的内容称为部分克隆,并且在 mercurial 中不受支持。

老实说,您的工作流程听起来很糟糕——创建一个子集 repo 并试图使其保持同步正在与这些工具的预期使用方式作斗争。为什么不只是从完整的仓库构建你需要的 jar,而是在 ant(我希望)<jar>标签中只包含特定的类。我们有一个包含数千个类的存储库,并且build all输出许多不同的 jar,每个 jar 都是整个类的一个子集。

也就是说,如果您必须坚持当前的工作流程,您应该修改它。不要克隆完整的存储库,然后删除不需要的文件,因为您仍然包含它们的完整历史记录。

相反,使用hg convert转换扩展filemap)使用 a和--filemap选项构建您的子集存储库。使用源存储库类型hg和目标类型,hg您可以使用文件映射仅包含您想要的文件。您最终不会得到一个克隆,而是一个全新的存储库,其中包含所有原始变更集,但仅适用于您指定的文件。使用 convert 的内置增量模式将使仅转换来自完整 repo 的新更改成为一种更新。

于 2009-02-02T03:46:27.627 回答