所以是的,我只是想知道darcs是否具有与git的子模块等效的功能。

也就是说,假设我有一个仓库(myapp),并且其中有一个名为mylibrary的文件夹。 mylibrary实际上与myapp的开发没有任何关系,只需要包含它即可。 mylibrary的开发发生在它自己的存储库中,但是当有人拉出myapp时,它还会拉出mylibrary的最新版本。有任何想法吗?

最佳答案

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

  • 如果您需要一个子模块来修复所用库源的某种状态,则可以简单地将库的 repo 副本作为子目录,然后将其添加到项目的darcs中。与git相比,这样做的缺点是当有人得到您的仓库时,数据传输过大。
  • 如果您需要一个子模块来告诉那些获得您的 repo 的人从何处获取库的更新源(而不会膨胀您的 repo 的大小),则只需将URL和指令放入README文件或脚本中,管他呢。与git相比,缺点是库源的状态(当您使用它时)不会记录在您的提交中,因此人们可能会获得该库的另一个版本,并且编译不会成功,并且尚不清楚原因。

  • 因此,子模块真正有趣的目标可能不仅是告诉人们从何处获取库源代码(正如您在问题中所写的那样),而且还要记录您实际用于编译项目的子项目的状态,而不是为那些不想获得子项目源的人膨胀您的仓库。
    可能还可以通过存储有关子项目状态的更复杂的元数据,以及更复杂的钩子(Hook)来获取子项目的状态(或选择地,另一种状态)来实现此目标。来自文档的AFAIK,没有用于此类子模块的内置机制。
    更新(可在darcs网站上找到):
  • http://darcs.net/Ideas/Subrepositories;
  • http://darcs.net/Ideas/NestedRepositories

  • 因此,darcs将在您的工作区中发现另一个darcs repo ,并且不会触及它。因此,我上面建议的第一种方法是关闭(如果将darcs元数据保留在那里)。
    第二种方式就像在后一个链接的一节中建议的那样。 (他们建议使用“uglu”脚本来表示这样的内容。)
    另一个(第三个)想法
    从您打算作为子模块的仓库中导入补丁,但首先将所有文件移至子目录中。如果可能只应用一次这样的移动特殊补丁,并且对所有的补丁都有效,则从打算作为子模块的仓库中导入,而不是从主仓库的“分支”中导入的补丁。 ..
    ...嗯,这可能是pull命令(例如import)和push命令(例如export)的特殊变体,可以相应地转换路径。

    10-08 11:37