问题标签 [subrepos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
9171 浏览

version-control - Mercurial Subrepos - 你如何创建它们以及它们是如何工作的?

情况

我有两个 .NET 解决方案(FooBar)和一个包含 ProjectA、ProjectB 和 ProjectC 的公共库。FooBar引用一个或多个库项目,但库项目不位于FooBar解决方案文件夹中。

目录结构:

*唉,我还在用 Windows XP...

Mercurial 子存​​储库

目标- 我想设置子存​​储库,以便我可以将任何引用的库项目的源代码存储在我的存储库FooBar存储库中。

根据这个页面(这实际上是我在 subrepos 上可以找到的唯一文档),设置 subrepo 需要从 DOS 控制台窗口执行以下命令:

问题

  1. 从版本 0.9.2 开始,是否可以使用 TortoiseHG 执行任何或所有这些步骤?如果是,如何?我很确定第 1-3 行可以,但我不知道第 4-7 行。这些似乎都没有记录在 TortoiseHG 中。
  2. 上面的代码做了什么(非常感谢逐行解释)。以下是我试图破译它时想到的一些具体问题:
    • 做什么>?我尝试在 Mercurial 文档中搜索>,但没有找到任何东西。
    • 在第 5 行,我不明白是什么nested/foo。是从哪里来foo的?是什么foo?存储库?一个文件夹?
    • 第 6 行 - 这完全让我感到困惑。
    • 在第 7 行,我假设.hgsub正在添加到main? 还是被添加到nested?
  3. 假设我设置了子存储库,并且我的Bar存储库现在已更新到修订版 10。如果我尝试将工作目录更新到修订版 7,这是否会导致我的库文件夹 (My Documents/Development/Libraries/ProjectA.../Libraries/ProjectB) 更新为修订版 7 中存储的任何内容好?

更新

我添加了第 8 行代码:ci -m "initial commit". 这做了两件事:(1) 将 .hgsubstate 文件添加到主存储库和 (2) 提交所有更改,包括新的子存储库到主存储库(带有消息“初始提交”)。.hgsubstate 文件的目的是跟踪所有子存储库的状态,因此如果您返回到较早的修订版,它也会从所有子存储库中获取正确的修订版。


更新 2 - 一些说明

经过进一步的实验,我我现在可以提供解决我原来问题的步骤(主要使用 Windows Explorer 和 TortoiseHG):

创建一个子仓库

  1. Libraries/ProjectA, Libraries/ProjectB, 和主存储库 (Projects/Foo/SolutionProjects/Bar/Solution) 必须是单独的存储库。
  2. 打开Projects/Foo/Solution.
  3. 克隆Libraries/ProjectAProjects/Foo/Solution.
  4. 添加ProjectAFoo存储库。
  5. 使用文本编辑器创建一个名为 的文件.hgsub,其中包含以下内容:

    /li>
  6. 打开一个 DOS 控制台窗口并输入以下命令(见下面的注释)

    /li>
  7. 对于Bar,步骤基本相同,除了 .hgsub 文件应包含两个项目的条目,如下所示:

    /li>

注意:从 TortoiseHG 0.10(定于 3 月发布)开始,您将能够使用HG Commitshell 命令来执行此操作,但现在,您必须使用命令行。

一旦这一切都设置好了,它会变得更容易一些。

提交更改- 提交更改FooBar,您Synchronize/Pull为每个子存储库执行操作以使子存储库与库项目存储库中的最新修订同步。然后你再次使用命令行提交更改(直到版本 0.10,你可以只使用 TortoiseHG 提交)。

将工作目录更新到较早的版本- 这似乎与 TortoiseHG 一起正常工作,并且似乎不需要使用任何 DOS 命令。要在 Visual Studio 中实际使用早期版本,您需要执行Synchronize/Push操作以将较旧版本的库项目放回Libraries/ProjectX文件夹中。

尽管我喜欢 TortoiseHG 用于简单的任务,但最好为经常使用的 subrepo 操作(尤其是更新)编写批处理文件。

希望这对将来的某人有所帮助。如果您发现任何错误,请告诉我(或者如果可以,请随时自行编辑)。

0 投票
2 回答
477 浏览

mercurial - Mercurial 1.4.x 中的 subprepos 功能是否已准备好用于生产?

我想为我的工作项目评估 Mercurial。但是我的大多数项目都非常依赖于 svn:externals 的支持。我搜索了 StackOverflow 并在 Mercurial 中搜索了相应的支持。我发现的只是 Mercurial 1.3 中添加的 subrepo 功能,但该功能的页面说:

subrepos 是 Mercurial 1.3 的实验性功能。所以不要在关键任务存储库上这样做!

我不想使用不稳定的东西。

任何人都可以了解此功能的真实状态,抛光/完成它的计划以及何时将其称为“稳定”并为关键任务存储库做好准备?

0 投票
2 回答
10574 浏览

mercurial - 使用 Mercurial/TortoiseHg 处理嵌套 Hg 存储库的正确方法是什么?

我正在努力解决如何使用 TortoiseHg 正确跟踪嵌套存储库。

我有一个主要的存储库来跟踪我的整个项目。这个项目包含几个小插件,它们存储在 plugins/ 子目录中。

我很想独立跟踪每个插件(为每个插件提交并推送到 BitBucket),同时仍然能够对我的项目进行“整体”提交,包括对插件所做的更改并将其推送到其他位置(不是比特桶)。

到目前为止,我所做的是为我的每个插件创建一个新的 repo。我可以轻松地将它们提交并推送到 BitBucket。但是当我去提交我的“主”存储库时,TortoiseHg 会显示一条错误消息,说明abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'.

我可以看到我做错了什么,但我不知道是什么。

我在 WinXP 上每晚使用 Mercurial 和 TortoiseHg(ToirtoiseHg 版本 0.9.3+237-ea50f793bbe4 和 Mercurial-1.4.3+225-70dea42c9406)。我读到 subrepos 处理已添加到这个 TortoiseHg 构建中,但是,我什至不确定 subrepos 是我应该在这里使用的功能。

更新
我已经取得了一些进展,但仍然无法按照我想要的方式工作。
这是我的结构:

我去了应用程序/插件,并在这里从 BitBucket 克隆了一个插件(名为 plugin3)。然后,我在根目录创建了一个 .hgsub 文件并将其添加app/plugins/plugin3 = app/plugins/plugin3到其中。然后我能够提交我的整个目录。

但是后来我试图从 BitBucket 中获取最新版本的 plugin1,所以我去了 app/plugins,删除了 plugin1/ 文件夹并从 BitBucket 中克隆了 plugin1。然后我添加app/plugins/plugin1 = app/plugins/plugin1到 .hgsub 但是当我尝试提交它时,我受到了欢迎abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

当我的 subrepo 与 plugins/ 目录中 Hg 已跟踪的目录具有相同的名称时,问题似乎触发了。

我究竟做错了什么 ?我应该在插件的 .hg 中添加/编辑一些特别的东西吗?

更新
我终于设法让它以我想要的方式工作。
我必须“手动”告诉 Mercurial 删除 plugins/plugin1、plugins/plugin2 目录,提交更改,然后从 BitBucket 克隆回 plugin1 和 plugin2,添加app/plugins/plugin1 = app/plugins/plugin1到 .hgsub 并提交所有内容。有效。
重要的一步是在删除 plugin1/plugin2 文件夹后提交。

0 投票
2 回答
9100 浏览

mercurial - Mercurial hg 子存储库问题 - “中止:未知修订版”

注意:我昨天在kiln.stackexchange.com上问过这个问题,但没有得到答案,这阻碍了我的工作。所以我想我会在这里试一试。

我的主要 mercurial 存储库中有一堆子存储库。在初始设置期间,我的.hgsub. 即,我将两个子存储库指向同一个目录。

我应该有的:

我实际拥有的:

愚蠢的复制/粘贴错误。我犯了不正确的.hgsub,没有意识到我的错误。几次修改后,在.hgsub.hgsub. 我承诺并继续前进。我已经完成了一些我不想重做的合理工作,因为我“修复”了.hgsub.

现在我们来解决实际问题:我在 subrepository 中进行了一些更改sites/3,当我尝试提交主存储库时,出现以下错误:

abort: unknown revision 'LongGUIDLookingString'

我发现了这个讨论,它似乎解决了我遇到的同样问题,但我不太清楚 bos 是如何解决它的。为了解决这个问题,我需要做什么?

的相关部分.hgsubstate

0 投票
5 回答
9134 浏览

mercurial - tortoisehg 和 subrepos

我无法让 Tortoisehg (1.0) 与 subrepos 一起工作

我有一个这样的目录结构:

根目录下的 .hgsub 文件看起来像

如果修改文件Customer1\Project1\foo.txt并从根目录提交,它可以工作

在 Tortoisehgcustomer1\project1中显示状态S(subrepo),但是在提交时我收到一条消息

不支持这种情况还是我做错了什么?

文档说:
“TortoiseHg 1.0 引入了对子存储库的基本支持,并且仅在提交/状态工具中。当 Mercurial 认为子存储库是脏的时,它将作为文件列表中的特殊条目出现在提交工具中,状态为 S . 如果子存储库包含在提交的文件列表中,则子存储库将与其他更改一起提交,更新主存储库根中的 .hgsubstate 文件。

0 投票
1 回答
4141 浏览

mercurial - Mercurial Remote Subrepos

我正在尝试设置我的 Mercurial 存储库系统以使用多个子存储库。我基本上按照这些说明使用 Mercurial 客户端 v1.5 设置客户端存储库,并且我正在使用HgWebDir来托管我的多个项目。

我有一个具有以下结构的 HgWebDir:

在哪里mylib可以使用一些通用模板库集合fooproj。的结构fooproj看起来像这样:

.hgsub看起来像:

根据我对文档的解释,这应该可行:

第一个“嵌套”是我们工作目录中的路径,第二个是要从中提取的 URL 或路径。

此外,mylib项目目录结构如下所示:

所以,假设我下拉fooproj到我的主文件夹:

它正确地拉下目录结构并添加~/foo/src/mylib作为本地 Mercurial 存储库的文件夹。这就是问题开始的地方:mylib除了.hg. Mercurial 的消息是:

用2秒的调查,可以看到src/mylib/.hg/hgrc是:

这是完全错误的(尝试pull该 repo 将给出 404,因为该 URL 没有任何意义)。

从逻辑上讲,默认值应该是我指定的值,.hgsub否则它会以某种方式从存储库中获取文件。当然,src/mylib/.hg/hgrc改为:

并且运行hg pull && hg update完美。当然,这与一开始不使用 subrepos 基本上是一样的。

Mercurial 命令都没有返回错误代码(除了 from pullinside src/mylib),因此它清楚地认为它的行为正确(并且可能是正确的),尽管这似乎根本不合逻辑。

我究竟做错了什么?

最终的问题可能.hgsubstate总是看起来像:

但我不知道如何解决这个问题......

0 投票
1 回答
610 浏览

mercurial - 如何让更改传播到 Mercurial 中的所有子存储库?

我最近从 Subversion 切换到 Mercurial 以进行源代码控制,并且这样做将一个存储库拆分为多个存储库。我使用 subrepos 来管理存储库之间的依赖关系。问题是 pull 不是 suprepo 感知的,所以我必须进入每个 subrepo 并拉取更改才能更新存储库。有一个更好的方法吗?

0 投票
2 回答
983 浏览

mercurial - Mercurial Subrepos, how to control which changeset I want to use for a subrepo?

I am reading up on subrepos, and have been running some tests locally, seems to work OK so far, but I have one question.

How do I specify/control which changeset I want to use for a particular subrepo?

For instance, let's say I have the following two projects:

Now, I want the class library as a subrepo of my application, but due to the immaturity of the longest branch (the one ending up as fourth commit), I want to temporarily use the "second commit" tip.

How do I go about configuring that, assuming it is even possible?

Here's a batch file that sets up the above two repos + adds the library as a subrepo.

If you run the batch file, it will output:

As you can see from that last line there, it verifies the contents of the file in the class library, which is "v4" from the fourth commit. I'd like it to be "v2", and persist as "v2" until I'm ready to pull down a newer version from the class library repository.

Can anyone tell me if it is possible to do what I want, and if so, what I need to do in order to lock my subrepo to the right changeset?

Batch-file:


Edit: Ok, I got my answer, thanks @VonC, I added the following section to my batch-file, above the rem == clone == line, and re-executed it, and now it locks the subrepo to the correct changeset.

0 投票
2 回答
1169 浏览

eclipse - 为什么 mercurial 子存​​储库在 eclipse 和 torotoiseHG 中表现为未版本化的文件

我正在尝试使用 mercurial 的 subrepo 功能,使用 mercurial eclipse 插件\tortoiseHG。

这些是我采取的步骤:

  1. 创建了一个空目录/root
  2. 克隆了我想成为此文件夹(/root/sub1/root/sub2)中的子存储库的所有存储库
  3. .hgsub在根仓库中创建并添加文件,/root/.hgsub并将子仓库的所有映射放入其中
  4. 使用 tortoiseHG,右键单击/root并选择create repository here
  5. 再次使用乌龟,选择里面的所有文件/root并将它们添加到根仓库
  6. 提交根仓库
  7. 将本地根仓库推入我在窑上设置的空仓库

然后,我使用 import->mercurial 在 Eclipse 中提取了根 repo。

现在我看到所有的子存储库看起来好像它们是未版本化的(在 eclipse 文件资源管理器中相应的文件夹旁边没有“橙色圆柱体”图标)。

此外,当我右键单击其中一个子存储库时,我没有像往常一样在“团队”菜单中获得所有 hg 命令,使用根项目 - 没有“拉”、“推”等。

此外,当我对子存储库中的文件进行更改,然后“提交”根项目时,它告诉我没有找到任何更改。

我在 tortoiseHG 中也看到了相同的行为 - 当我在 下浏览文件时/root,直接属于根存储库的文件上有一个小图标(V 符号),标记它们是受版本控制的,而子存储库的文件夹没有标记像这样。

是什么让我怀疑这是我这边的一些错误,是 1. 乌龟和 eclipse 都做同样的事情,所以不太可能成为任何一个中的错误 2. 他们所做的看起来相当复杂,所以不太可能发生一个错误 - 他们都忽略了 .hgsub 中的所有文件夹。如果发生相反的情况(所有子存储库都被视为主存储库的常规文件夹,而不是被视为未版本化),我会认为这是由于不处理子存储库引起的错误。但显然这两个应用程序都承认 .hgsub 文件

我做错了什么,还是一个错误?

0 投票
1 回答
240 浏览

mercurial - 子存储库的投资回报率是多少?

我知道子存储库可以节省您的团队时间,但是它们的投资回报率是多少?

https://www.mercurial-scm.org/wiki/subrepos