我有一个mercurial存储库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.js
和README
)。
需要注意的另一点是,useful
repo有几个分支:default
,version1
和version2
。我使用useful.js
的项目也有分支default
,version1
和version2
。我想确保每当我在myProject
中的分支之间切换时,我的useful.js
也会切换分支。如果没有,我可能会生活在象征性的链接。
这种情况似乎并不特别罕见;其他人如何处理它?只需在update
上写一个钩子来检查我是否正在切换分支并相应切换?加上commit
,push
,pull
上的挂钩? (基本上复制单个文件的subrepo行为)?
欢呼声。
答案 0 :(得分:1)
根据您的使用案例,您可能希望考虑使用Yeoman,更具体地说是Twitter Bower Package Manager。这样,不要在存储库中保留外部依赖项的副本,只需在Bower配置中识别它。
答案 1 :(得分:0)
不可能只将存储库的一部分添加为Mercurial的子存储库。因此,您无法仅从存储库添加单个文件。
即使您的其他存储库只包含一个文件,也不能在根级别添加它。
您必须找到另一种方式来包含useful.js
文件。你提到钩子要做到这一点,但是如果没有某种手工工作,我就无法找到真正做到这一点的方法。在个人情况下,我会选择“简单”并“手工”完成所有事情。
关于分支切换,Mercurial中没有内置机制,但正如你所说,你应该可以通过更新时的钩子来做到这一点。
答案 2 :(得分:0)
跟进@krtek
是的,无论如何,你不能在superrepo的根目录下链接(使用subrepo)useful.js,必须在subbir内。
但是 - 不,用一些技巧你可以得到一些迭代到请求的结果(依赖于分支的有用的.js并添加单个文件而不是全部)。
为了实现这一目标,您必须重新阅读子库文档(“Mercurial URL支持的任何文件可用于定义外部子库...”)和hg help urls
,即
#之后的可选标识符表示要从远程存储库中使用的特定分支,标记或变更集
并注意提及分支。即 - if 你将在有用的存储库中拥有已知名称的特殊分支,并且在这个分支中只有单个有用的.js,你可以用这些添加的数据定义subrepo - < em>分支与单个文件分支在superrepo
这样你就会在superrepo的每个分支中有不同的subrepo规范,必须精确地合并分支(总是保存“my”)或为.hgsub文件定义特殊的mergetool