gpt4 book ai didi

mercurial - Mercurial 子存​​储库必须是主存储库的子目录吗?

转载 作者:行者123 更新时间:2023-12-02 19:11:07 26 4
gpt4 key购买 nike

我的项目由以下位置的代码组成

C:\Dev\ProjectA
C:\Lib\LibraryB
C:\Lib\LibraryC

目前,这些文件夹中的每一个都是完全独立的 Mercurial 存储库。项目 A 一直在变化,库 B 和库 C 很少变化。

我目前在项目 A 的每个版本发布时对其进行标记,并(当我记得时)在库 B 和 C 存储库中放置相应的标记。

我可以通过使用子存储库来改进这一点吗?这是否需要我将库 B 和 C 设为项目 A 的子目录?

如果库 B 和 C 必须是项目 A 的子目录,如果我想启动一个使用库 B 但根本不隶属于项目 A 的项目 D,我该怎么办?

最佳答案

If Library B and C must be subdirectories of Project A what do I do if I want to start a Project D that uses Library B but isn't otherwise affiliated with Project A at all?

任何项目都可以独立存在同时作为另一个项目的子存储库。我将通过建议工作流程进行解释。

首先,您的每个项目(A、B、C)都应该有一个发布在某处的受祝福的存储库:

blessed repository

您可以运行hgwebdir在您自己的服务器上,或使用 Mercurial 托管服务,例如 BitbucketKiln 。这样,开发人员就可以从一个中央权威点拉取/推送更改,并且您可以进行备份。

现在您可以克隆这些存储库,以便以两种不同的方式进行工作:

  • 直接克隆您的项目。例如:

    hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB
  • 和/或通过将 .hgsub 文件放入 ProjectA 的根目录中来创建子存储库定义,其中包含以下内容:

    libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB
    libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC

这些子存储库定义告诉 Mercurial,每当克隆项目 A 时,它还必须将库 B 和库 C 的克隆放入 libraries 文件夹中。

如果您正在项目 A 中工作并提交,那么您在 libraries/LibraryBlibraries/LibraryC 中的更改也将被提交。 Mercurial 将在 .hgsubstate 文件中记录项目 A 使用的库版本。结果是,如果您hg更新到项目的旧版本以查看上周的工作情况,您还会获得相应版本的库。您甚至不需要制作标签:-)

当您将项目 A 更改hg Push 到受祝福的存储库时,Mercurial 还将确保首先将子存储库更改推送到它们自己的源。这样您就不会意外发布依赖于未发布的库更改的项目更改。

如果您希望将所有内容保留在本地,您仍然可以通过在子存储库定义中使用相对路径而不是 URL 来使用此工作流程。

关于mercurial - Mercurial 子存​​储库必须是主存储库的子目录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4457538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com