1

我有一个善变的存储库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.jsand README)。

另一件需要注意的是,usefulrepo 有几个分支:defaultversion1version2. 我使用的项目也useful.js有分支default和. 我想确保每当我在分支之间切换时,我的切换分支也是如此。如果不是这样,我可能会使用符号链接。version1version2myProjectuseful.js

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

干杯。

4

3 回答 3

1

鉴于您的用例,您可能需要考虑使用Yeoman,更具体地说是Twitter Bower Package Manager。这样,无需在存储库中保留外部依赖项的副本,只需在 Bower 配置中识别它即可。

于 2013-01-26T23:52:01.277 回答
0

使用 Mercurial 无法仅将存储库的一部分添加为子存储库。因此,您不能只添加存储库中的单个文件。

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

您将不得不找到另一种方法来包含您的useful.js文件。您提到了这样做的钩子,但是如果没有某种手动工作,我看不到诚实的方法。就我个人而言,我会选择“简单”并“手工”做所有事情。

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

于 2012-06-20T15:53:33.067 回答
0

跟进@krtek

是的,在任何情况下,您都不能在 superrepo 的根目录中链接(使用 subrepo)有用的.js,它必须在 subbir 内。

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

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

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

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

这样,您将在 superrepo 的每个分支中拥有不同的 subrepo 规范,必须准确地合并分支(始终保存“我的”)或为 .hgsub 文件定义特殊的合并工具

于 2013-01-27T12:13:05.947 回答