7

所以是的,只是想知道 darcs 是否有任何与 git 的子模块等效的东西。

即假设我有一个 repo (myapp),我有一个名为 mylibrary 的文件夹。mylibrary 与 myapp 的开发没有任何关系,它只是必须包含在内。mylibrary 的开发发生在它自己的 repo 中,但是当有人拉取 myapp 时,它也会拉取最新版本的 mylibrary。有任何想法吗?

4

2 回答 2

4

我的第一个想法:由于 darcs 比 git 更简单(即,没有分支远程——相反,您只使用目录和 URL,管理它们是您的任务),因此 darcs 子模块不会提供比您可以实现的更多的功能darcs repo 中的子目录或文件等标准内容。

  • 如果您需要一个子模块来修复所用库的源的某种状态,您也许可以简单地将库的 repo 的副本作为子目录并将其添加到项目的 darcs 中。与 git 相比,当有人获得您的 repo 时,这会导致数据传输膨胀。

  • 如果您需要一个子模块来告诉那些获得您的 repo 的人从哪里获取库的更新源(而不会使 repo 的大小膨胀),您可以简单地将 URL 和指令放入 README 文件或脚本中,或者任何。与git相比,缺点是你使用它时库的源代码的状态不会记录在你的提交中,所以人们可能会得到另一个版本的库,编译不会成功,而且不清楚为什么。

因此,子模块真正有趣的目标可能不仅仅是告诉人们从哪里获取库源(正如您在问题中所写的那样),而是记录您实际用于编译项目的子项目的状态,并且不要为那些不想获得子项目来源的人膨胀你的回购。

或许,这个目标也可以通过存储关于子项目状态的更复杂的元数据以及更复杂的钩子来获得子项目的准确状态(或 - 通过选择 - 另一个状态)来实现。来自文档的 AFAIK,此类子模块没有内置机制。

更新(在 darcs 网站上找到):

因此,darcs 会注意到您工作中的另一个 darcs 存储库,它不会触及它。所以我上面建议的第一种方法是关闭(如果你把 darcs 元数据留在那里)。

第二种方式就像在后一个链接的一部分中建议的那样。(他们建议这样的“uglu”脚本。)

另一个(第三)想法

从您打算作为子模块的存储库中导入补丁,但首先将所有文件移动到子目录中。如果可以只应用一次这样一个移动的特殊补丁,并且它对您从作为子模块的 repo导入的所有补丁有效,但对您从主 repo 的“分支”导入的补丁无效......

...好吧,它可能是pull命令(例如,import)和push命令(例如,)的特殊变体,export可以相应地额外转换路径。

于 2012-05-14T21:08:20.697 回答
3

我不知道 darcs 的任何子模块概念,这意味着从 darcs 存储库引用另一个(共享)存储库的通常方法是通过符号链接。

由于darcs 不支持符号链接,这意味着您需要放置一个 " posthook sh update-symlinks.sh" 挂钩脚本来恢复这些链接。

但是您也可以使用 add to this hook 检查以首先查看当前加载的内衬 repo 的版本,并在需要时更新该版本(前提是您以一种或另一种方式存储了该共享 repo 所需的确切版本) .
最后一个建议实际上接近于 Git 子模块或 Mercurial 子存​​储库的实现。

于 2011-05-19T06:40:45.807 回答