问题标签 [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 投票
5 回答
804 浏览

mercurial - mercurial-server 是否支持 subrepo?

我在其中一台机器上安装了 mercurial-server,在那里克隆了我的项目,它有 3 个子存储库,当我尝试将它克隆回另一个位置时,我收到一个错误:

远程:mercurial-server:无法在现有 repo 下创建 repo

中止:远程 hg 没有合适的响应!

所以我开始认为 mercurial-server 不处理 subrepo。

有什么线索吗?

0 投票
3 回答
2049 浏览

mercurial - 回购中的 Mercurial 回购

是否可以在现有的 mercurial 存储库中创建一个 mercurial 存储库?

这个想法是将存储库的子目录作为不同的存储库处理,你是怎么做的?

我不是在谈论 subrepos (至少,如果我理解 subrepos 的目的......),但如果这就是 subrepos 的存在方式,我弄错了,我会尝试做对:)

谢谢~阿基

编辑:为了更清楚,我想知道会发生什么,将存储库放在另一个存储库中的做法和影响,而无需指定模块/子存储库。换句话说:如果我这样做会发生什么:

并按原样使用这两个存储库?

0 投票
1 回答
566 浏览

mercurial - 将第三方库保存在 Mercurial 项目下:是否有子存储库?

我们正在开发一个闭源项目,使用 Mercurial 进行版本控制。我们在项目中使用了两个库:

  • 其中一个库是由第三方开发的。他们正在使用 git,我们通常每周从他们的仓库中提取一次以获取最新的更改。

  • 另一个库是我们自己开发的,正在积极开发中。它必须存在于自己的公共 mercurial 存储库中,因为它是在 LGPL 下获得许可的。(它是第三方 LGPL 组件的一个分支,移植到我们的平台)

所以我的问题是:我应该如何组织来源以确保:

  1. 我们团队的开发人员应该能够使用单个“克隆”命令获取所有源代码(主项目 + 库)

  2. 我们应该能够轻松地从库中提取最新的更改,即使其中一个是由 git 管理的

我们应该使用 mercurial sub-repos 功能,使用 hg-git 来访问 git 下的库吗?TortoiseHg 和 BitBucket 是否很好地支持它?(优点:易于拉库更改/缺点:效果好吗?)

还是应该只保留项目下库的快照?(因此,当库中有新的上游更改时,我们将它们拉到一个单独的位置,然后将整个源代码复制到我们的项目中?(优点:会工作/缺点:很麻烦,特别是对于由我们自己开发,每天都会发生很多变化)

0 投票
1 回答
4253 浏览

visual-studio - 将大型回购拆分为多个子回购并保留历史记录(Mercurial)

我们有一个庞大的代码库,在 SVN 的一个目录中包含多个共享项目、解决方案文件等。我们正在迁移到 Mercurial。我想借此机会将我们的代码重新组织到几个存储库中,以减少用于分支的克隆开销。我已经成功地将我们的存储库从 SVN 转换为 Mercurial,同时保留了历史记录。我的问题:如何将所有不同的项目分解为单独的存储库,同时保留它们的历史?

以下是我们的单一存储库 (OurPlatform) 当前的示例:

除解决方案文件外,所有这些都是包含 VS 项目的文件夹。Product1.sln 和 Product2.sln 都引用了所有其他项目。理想情况下,我想把这些文件夹中的每一个都变成单独的 Hg 存储库,并为每个项目添加新的存储库(它们将充当父存储库)。然后,如果有人要在 Product1 上工作,他们将克隆 Product1 存储库,其中包含 Product1.sln 和对 ReferenceAssemblies、Core、Core.Tests、Database、Database.Tests、CMS 和 CMS.Tests 的子存储库引用。

因此,只需在项目目录中进行 hg init'ing 即可轻松完成此操作。但可以在保留历史的同时做到吗?或者有没有更好的方法来安排这个?

编辑::::

感谢 Ry4an 的回答,我能够实现我的目标。我想在这里为其他人分享我是如何做到的。

由于我们有很多单独的项目,我编写了一个小的 bash 脚本来自动创建文件映射并创建最终的 bat 脚本来实际进行转换。从答案中不完全清楚的是,转换命令需要为每个文件映射运行一次,以便为每个项目生成一个单独的存储库。该脚本将放置在您之前转换的 svn 工作副本上方的目录中。我使用了工作副本,因为它的文件结构与我希望最终的新 hg 存储库最匹配。

此脚本查看 svn 工作副本中的每个文件,并根据类型创建新的文件映射文件或附加到现有文件。if 实际上只是为了捕获 misc visual studio 文件,并将它们放入单独的 repo 中。这意味着要在 bash(在我的情况下为 cygwin)上运行,但由于 Windows 上的分叉/进程问题,运行实际的转换命令是通过 TortoiseHg 附带的 hg 版本完成的(哎呀,我知道......)。

因此,您运行 MASTERGO.convert.bat 文件,该文件查看转换后的 hg 存储库,并使用提供的文件映射创建单独的存储库。完成后,有一个名为 hg-separated 的文件夹,其中包含每个项目的文件夹/repo,以及每个解决方案的文件夹/repo。然后,您必须手动将所有项目克隆到解决方案存储库中,并将克隆添加到 .hgsub 文件中。提交后,会创建一个 .hgsubstate 文件,然后您就可以开始了!

对于上面给出的示例,我的 .hgsub 文件对于“Product1”如下所示:

将这些存储库传输到中央服务器后,我将手动将路径更改为 url。

此外,没有类似于最初的 OurPlatform svn repo,因为现在一切都分开了。

再次感谢!

0 投票
1 回答
556 浏览

mercurial - Mercurial嵌套子存储库(子存储库中的子存储库)不递归提交?

我有一个像这样设置的 Mercurial 存储库,在另一个子存储库中有一个子存储库:

如果我更改 foo.txt 和 bar.txt 并从 Root 内部提交,那么一切都很好,所有嵌套的子存储库都提交。但是,如果我只更改 bar.txt 并从 Root 提交,那么 Hg 认为没有任何改变。当FurtherNested 中只有更改时,我必须从Nested 内部提交才能提交FurtherNested 更改。似乎为了使嵌套的子存储库工作,每个嵌套级别都必须包含更改才能使递归工作。

我在关于 subrepos 的 Mercurial 文档中读到的任何内容似乎都没有暗示 subrepo 提交只会在发生更改时传播。事实上,它说的是相反的:

当我们提交时,Mercurial 将尝试在所有已定义的子存储库中递归提交...

所以我的问题是,这是可以预料的,还是有问题或尚未完成(Windows 上的 Mercurial 1.5.4)?

0 投票
3 回答
548 浏览

mercurial - 是否可以将 Mercurial 子存​​储库与特定版本挂钩(如 svn:externals)?

我正在将一组项目从 Subversion 迁移到 Mercurial。这些项目目前使用 svn:externals 将代码从一个拉到另一个。我一直遵循将外部指向特定修订号并根据需要手动更新它的建议(这样当我更新到主项目的过去修订时,我也会获得外部的过去版本)。

在 Mercurial 中进行外部操作的方法似乎是使用子存储库,但我看不到将它们与特定修订版挂钩的方法 - 看起来 Hg 总是会在我更新主存储库时将子存储库更新为最新修订版。那是对的吗?有没有办法解决它?

0 投票
1 回答
2455 浏览

mercurial - 推送 mercurial 仓库而不推送子仓库

我正在使用 Mercurial 1.6。我有一个带有几个子回购(11)的回购。我想将父仓库推送到默认远程仓库而不推送子仓库。想要这样做的原因包括:

  • 我正在使用 SSH 存储库,它需要很长时间才能建立连接并且不向每个子存储库推送任何内容。
  • 我在子存储库中有提交,我不想传播到远程存储库(还)。
  • 子存储库已命名不应传播到存储库存储库的分支(显然没有办法将分支名称传递给子存储库的推送操作)。

但是,我一直无法找到实现此目的的方法。我尝试删除 .hgsub 和 .hgsubstate 的内容(不提交),但仍然善变坚持推送子存储库。

如何将更改从本地仓库推送到远程仓库并暂时忽略子仓库?

0 投票
1 回答
433 浏览

mercurial - 使用子存储库时从同事那里拉取

我们有几个共享库,它们在父存储库中作为子存储库存在。如果一个人克隆了父 repo,它看起来像:

.hgsub 看起来像这样:

每个 subrepo 的 hgrc 看起来像这样:

很标准的东西。

但!

使用这种设置,同事如何在不使用中央服务器作为中介的情况下从另一个人那里拉取数据?所以同事 A 执行 'hg serve',而 B 执行 'hg pull http://coworkerA.us.com:8000 '......但这会失败,因为 hgsub 文件仍然指向中央服务器,并且因此 B 只会从中央服务器获取更改,而不会从 A 的子存储库中获取任何不存在于中央服务器上的更改。

如果中央服务器关闭或无法访问,这将更加复杂。人们无法直接使用 subrepos 相互拉取!

如何使用 subrepos 拉动同事之间的关系?编辑 hgrc 和 hgsub 文件是不可能的,因为您必须为每个子存储库(我们大约有 20 个)执行此操作,并且为每个同事执行一次!

我还在 Kiln StackExchange 上发布了这个问题,以吸引更广泛的受众: http: //kiln.stackexchange.com/questions/1780/pulling-from-a-co-worker-when-using-subrepositories

0 投票
2 回答
2155 浏览

mercurial - 是否可以将 Mercurial 子存​​储库路径从绝对更改为相对

最初我的 subrepo 是用 in 中的绝对 URL 定义的.hgsub,这现在造成了一些麻烦。它使“友好的独裁者”工作流程变得不可能,因为我想使用一个中间服务器,用户从中克隆他们的工作副本。然后我会在将更改推送到主存储库之前将更改拉到中间服务器(中间服务器也是持续集成主机,因此我不会直接将内容拉到主存储库)。绝对路径可以防止这种情况,因为克隆的 repo 将被直接推送到 master。

现在的问题是,hg当我尝试推送在.hgsub文件中所做的更改时,我的服务器会出现 404 错误。下面是我所做的更改示例

这不起作用,它喷出以下错误

是否可以通过这种方式更改子存储库配置,或者我是否必须重新创建整个存储库?

0 投票
3 回答
2407 浏览

mercurial - 将多个子存储库合并为一个并在 Mercurial 中保留历史记录

目前我的项目由多个存储库组成,例如:

不幸的是,子存储库之间的代码非常耦合,因此它不能很好地与分支一起使用。

有没有办法将子存储库合并到一个保留历史记录的主存储库中?