darcs相当于git的子模块?

时间:2011-05-19 05:17:57

标签: git-submodules darcs

所以,只是想知道darcs是否有与git的子模块相同的东西。

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

2 个答案:

答案 0 :(得分:4)

我的第一个想法:因为darc比git更简单(即,没有分支远程 - 而只是使用目录和URL,而你的任务就是管理他们),一个darcs子模块不会提供比你用darcs repo中的子目录或文件等标准内容更多的东西。

  • 如果您需要一个子模块来修复已使用库的某个源的某个状态,您可以简单地将库的repo的副本作为子目录并将其添加到项目的darc中。与git相比,当有人获得你的回购时,这会带来数据传输膨胀的缺点。

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

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

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

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

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

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

另一个(第三)想法

从您打算作为子模块的仓库中导入补丁,但首先将所有文件移动到子目录中。如果可以只应用一次这样一个移动的特殊补丁,如果它对所有补丁有效,那么你从作为子模块的仓库中导入,而不是从“分支”导入的补丁主回购...

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

答案 1 :(得分:3)

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

symlinks aren't supported with darcs开始,这意味着你需要设置一个“posthook sh update-symlinks.sh”钩子脚本来恢复这些链接。

但您也可以使用添加到此挂钩检查以查看当前加载的内衬仓库的版本,并在需要时更新该版本(前提是您以某种方式存储您需要的确切版本共享回购) 最后一个建议实际上接近于Git子模块或Mercurial subrepos的实现。