推荐将*单个文件*作为子存储库添加到汞存储库的方法



我有一个多变的存储库myProject

myProject
|- file1.js
|- file2.css
|- useful.js

现在useful.js是一个文件,其中包含一些有用的类。我在多个项目中使用它,因此它有自己的存储库:

useful
|- useful.js
|- example.js
|- README

这个想法是其他人可以签出useful,查看文件、示例和自述文件,如果他们喜欢它,他们会useful.js复制到自己的项目中并使用它。

由于useful.js在我的一些项目中使用,因此建议使用哪种方法来保持同步?有一个限制,即useful.js必须位于顶级文件夹myProject,即不能嵌套。这使得使用子存储库变得棘手(无论如何,我会得到其他文件,如 example.jsREADME )。

需要注意的另一件事是useful存储库有几个分支:defaultversion1version2。我使用 useful.js 的项目也有分支 defaultversion1version2 。我想确保每当我在myProject的分支之间切换时,我的useful.js也会切换分支。如果不是因为这个,我可能会接受一个象征性的链接。

这种情况似乎并不罕见;其他人如何处理?只需在update上写一个钩子来检查我是否正在切换分支并相应地切换?加上钩子commitpushpull?(基本上复制单个文件的子存储库行为)?

干杯。

鉴于您的用例,您似乎需要考虑使用 Yeoman,更具体地说是 Twitter Bower 包管理器。 这样,与其在存储库中保留外部依赖项的副本,不如在 Bower 配置中识别它。

不可能只添加存储库的一部分作为 Mercurial 的子存储库。因此,您不能只添加存储库中的单个文件。

即使您的其他存储库只包含一个文件,您也不能在根级别添加它。

您将不得不找到另一种方法来包含您的useful.js文件。你提到了钩子来做到这一点,但我看不到在没有某种手工工作的情况下诚实地做到这一点的方法。就个人而言,我会选择"简单"并"手工"完成所有事情。

关于分支交换机,Mercurial 中没有内置机制,但正如您所说,您应该能够通过更新钩子来做到这一点。

后续@krtek

是的,在任何情况下,您都不能链接(与子存储库)有用.js在超级存储库的根目录中,它必须在subbir中。

但是 - 不,通过一些技巧,您可以对请求的结果进行一些迭代(依赖于分支的有用.js并添加单个文件而不是所有文件)。

为了实现这一点,你必须重新阅读子存储库文档("Mercurial URL支持的任何内容都可用于定义外部子存储库...")和hg help urls,即

# 后面的可选标识符表示要从远程存储库使用的特定分支、标记或变更集

并注意提到分支。即 - 如果您在有用的存储库中具有已知名称的特殊分支,并且在此分支中只有一个有用的分支.js,则可以使用这些添加的数据定义子存储库 - 在超级存储库中具有单个分支文件的分支

这样,您将在超级存储库的每个分支中具有不同的子存储库规范,必须准确地合并分支(始终保存"my")或为.hgsub文件定义特殊的合并工具

最新更新