问题标签 [mercurial-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 投票
1 回答
1120 浏览

mercurial - 来自非嵌套/同级目录的 Mercurial 子存​​储库?

是否可以使用兄弟路径创建子存储库?

Subversion 是我们在这里“选择”的 VCS,但我已经遇到了很多过时提交的问题。在 Hg 和 SVN 下对我的文件进行双重版本对我来说更加方便,并且我已经取得了巨大的成功。但是,我还有其他几个同事使用 Hg,除了他们可能没有注意到的一个问题外,我们在那里没有遇到任何问题。

我们的 SVN 布局是这样的

这让您在处理项目时有点愚蠢,因为如果您的主要项目由Program1andProgram2和其他一些服务组成......我不能一次获得所有的变更集,因为我们已经有一个与目录匹配的存储库。所以我必须确保 4 或 5 个 repos 是同步的,尤其是对于一些服务引用。

我在单个目录下使用 subrepos 运气不错:

但我想做的是指定一个相对路径,这样我就可以使用同级目录到子存储库,所以我可以有这样的东西:

但到目前为止,它并没有像我预期的那样奏效。trunk/Program1是一个汞回购,我的Project1/.hgsub文件包含

我也试过../../trunk/Program1

但是其中任何一个的结果都是创建了一个新目录:Area/Program1/Project1那是空的。

到目前为止,我能找到的唯一搜索结果是使用http基于存储库的子存储库,所以我不确定从这里去哪里。我们的开发环境是 Windows 7,所以“简单”的答案是创建联结,但我主要关心的是让这样的事情容易做,所以进入门槛尽可能低,甚至像mklink /J Program1 ..\trunk\Program1from管理员 cmd 窗口是另一件事,它会阻止人们迁移到更好的工作流程。

是否可以添加我想要的子存储库,或者有更好的方法来做我们正在做的事情?

0 投票
0 回答
187 浏览

mercurial - Mercurial 共享扩展不适用于嵌套的子存储库

我无法使用 mercurial共享扩展来处理嵌套存储库。

测试库结构:

  • 子repoTest/
    • 嵌套/

SubrepoTest/.hgsub 内容:

nested = nested

尝试共享 repo 会出现此错误:

我正在使用来自 TortoiseHG for Windows 的 Mercurial Distributed SCM(版本 2.2.2)。

我该如何解决这个问题?

0 投票
1 回答
303 浏览

mercurial - 嵌套子存储库中的 Mercurial 新存储库

我不确定这是否可能,如果不是,任何替代解决方案都将受到欢迎!

我有许多使用 Orchard 的解决方案 - 它要求任何模块都位于其文件夹结构内的某个目录中。我有一些模块,基于 DVCS 的强大功能,我希望能够仅使用 suprepos 重现一个新项目。并且只用 Mercurial 更新 Orchard。

我的文件夹结构如下:

我刚刚将果园文件复制到我的仓库,然后将我的模块添加为子仓库。

我希望能够做的是让 Orchard 的其余部分也成为一个子存储库。但是我找不到在另一个子仓库中拥有一个 suprepo 的方法。它不会是嵌套的子存储库,因为在两种情况下(果园和模块)都将是我的“基础”存储库。

即 Project/.hgsub 看起来像:

但这似乎不起作用,我找不到文档来说明我是否/如何做到这一点。

任何帮助表示赞赏!

编辑:如果不清楚我没有对 Orchard repo 的写访问权限,我也无法移动模块。

0 投票
1 回答
977 浏览

git - 如何修复 Mercurial 卡在 Git subrepo push 上?

  1. 我有根 Mercurial repo(网站)。
  2. 我将GitHub 镜像中的 WordPress 克隆到/wp子目录中。
  3. 因为我想要非常特定(稳定)版本的 WP,但我没有正在进行的开发git checkout 3.4.1(标签在哪里3.4.1)。
  4. 我在根 Mercurial 存储库中将其设置为子存储库并提交(WP 修订版在 中被很好地捕获.hgsubstate)。

麻烦从这里开始。我这样做hg push了,当它到达 WP 时:

然后它就退出了。甚至没有尝试推送根存储库。

我理解为什么 Mercurial会尝试推送 subrepo(预期行为),但我无法理解为什么它会在 subrepo 上完全失败:

  1. 没有变化
  2. 无论如何都有只读来源

如何让它明白我想要这个特定的修订版并且我不希望它弄乱 Git 子存储库?

0 投票
1 回答
221 浏览

mercurial - AppHarbor, BitBucket and SubRepo Work Around

I would like to host a project on AppHarbor. The project's Hg repository is hosted on BitBucket. The issue is that my repository contains a subrepo (also Hg on BitBucket). It seems there is no way for AppHarbor to pull subrepos, so the project fails to build.

AppHarbor is aware of the issue and states that the solution is up to BitBucket:

BitBucket has an open ticket, but no updates:

My question is, does anyone have a good workaround for this? I would be willing just to ftp the working directory to AppHarbor, but I don't see how to do that.

0 投票
2 回答
2419 浏览

mercurial - 如何为共享组件和依赖项使用 mercurial subrepos?

我们用 C# 开发 .NET 企业软件。我们正在寻求改进我们的版本控制系统。我以前使用过 mercurial,并且一直在我们公司尝试使用它。但是,由于我们开发企业产品,因此我们非常关注可重用的组件或模块。我一直在尝试使用 mercurial 的子存储库来管理组件和依赖项,但遇到了一些困难。以下是源代码控制/依赖管理的基本要求:

  1. 可重复使用的组件
    1. 由源共享(用于调试)
    2. 依赖于 3rd 方二进制文件和其他可重用组件
    3. 可以在消费产品的背景下开发并致力于源代码控制
  2. 依赖项
    1. 产品依赖于 3rd 方二进制文件和其他可重用组件
    2. 依赖有自己的依赖
    3. 应通知开发人员依赖项中的版本冲突

这是我一直在使用的 mercurial 结构:

一个可重用的组件:

第二个可重用组件,使用第一个:

消耗这两种成分的产品:

笔记

  1. 回购是大写
  2. 所有子回购都被假定为子回购
  3. 第 3 方(二进制)库和内部(源)组件都是位于 libs 文件夹中的子存储库
  4. 第 3 方库保存在单独的 mercurial 存储库中,以便使用项目可以引用特定版本的库(即旧项目可能引用 NLog v1.0,新项目可能引用 NLog v2.0)。
  5. 所有 Visual Studio .csproj 文件都位于第 4 级(proj* 文件夹),允许相对引用依赖项(即所有引用 NLog 的 Visual Studio 项目的 ../../../libs/NLog/NLog.dll)
  6. 所有 Visual Studio .sln 文件都位于第二级(src 文件夹),因此在将组件“共享”到使用组件或产品时不会包含它们
  7. 开发人员可以自由组织他们认为合适的源文件,只要源是使用 Visual Studio 项目的 proj* 文件夹的子级(即 proj* 文件夹可以有 n 个子级,包含各种源/资源)
  8. 如果 Bob 正在开发 SHARED2 组件和 PROD1 产品,那么他在 PROD1_SLN 存储库中更改 SHARED2 源(比如属于 proj3 的源)并提交这些更改是完全合法的。我们不介意有人在消费项目的上下文中开发图书馆。
  9. 内部开发的组件(SHARED1 和 SHARED2)通常由源包含在使用项目中(在 Visual Studio 中添加对项目的引用而不是浏览到 dll 引用)。这允许增强调试(单步执行库代码),允许 Visual Studio 管理何时需要重建项目(修改依赖项时),并允许在需要时修改库(如上述注释中所述)。

问题

  1. 如果 Bob 在 PROD1 上工作,而 Alice 在 SHARED1 上工作,那么 Bob 怎么知道 Alice 何时将更改提交到 SHARED1。目前使用 Mercurial,Bob 被迫在每个子存储库中手动拉取和更新。如果他从 PROD_SLN 存储库推/拉到服务器,他永远不知道子存储库的更新。Mercurial wiki对此进行了描述。当 Bob 从服务器中提取最新的 PROD_SLN 时,如何通知他子存储库的更新?理想情况下,应该通知他(最好在拉取期间),然后必须手动决定他要更新哪些子存储库。

  2. 假设 SHARED1 引用 NLog v1.0(mercurial 中的 commit/rev abc),SHARED2 引用 Nlog v2.0(mercurial 中的 commit/rev xyz)。如果 Bob 在 PROD1 中吸收了这两个组件,则应该让他意识到这种差异。虽然从技术上讲,Visual Studio/.NET 将允许 2 个程序集引用不同版本的依赖项,但我的结构不允许这样做,因为 NLog 的路径对于依赖于 NLog 的所有 .NET 项目都是固定的。Bob 怎么知道他的两个依赖有版本冲突?

  3. 如果 Bob 正在为 PROD1 设置存储库结构并希望包含 SHARED2,那么他如何知道 SHARED2 需要哪些依赖项?使用我的结构,他必须手动克隆(或在服务器上浏览)SHARED2_SLN 存储库,然后查看 libs 文件夹,或者查看 .hgsub 文件以确定他需要包含哪些依赖项。理想情况下,这将是自动化的。如果我在我的产品中包含 SHARED2,则 SHARED1 和 NLog 也会自动包含在内,如果与其他依赖项存在版本冲突,则会通知我(参见上面的问题 2)。

更大的问题

  1. mercurial 是正确的解决方案吗?

  2. 有更好的水银结构吗?

  3. 这是对 subrepos 的有效使用(即 Mercurial 开发人员将subrepos标记为最后手段的功能)?

  4. 使用 mercurial 进行依赖管理有意义吗?我们可以使用另一个工具进行依赖管理(可能是内部 NuGet 提要?)。虽然这对 3rd 方依赖项很有效,但它确实会给内部开发的组件带来麻烦(即,如果它们是积极开发的,开发人员将不得不不断更新提要,我们必须在内部为它们提供服务,而且它不允许由消费项目修改的组件(注 8 和问题 2)。

  5. 您有更好的企业 .NET 软件项目解决方案吗?

参考

I have read several SO questions and found this one to be helpful, but the accepted answer suggests using a dedicated tool for dependencies. While I like the features of such a tool it does not allowed for dependencies to be modified and committed from a consuming project (see Bigger Question 4).

0 投票
1 回答
745 浏览

mercurial - 让 Jenkins 检测对 Mercurial 子存​​储库的更改

有没有办法让 Jenkins 轮询功能检测到子存储库中发生了更改,即使该更改尚未提交给父存储库?

实际上,我希望我正在寻找一个可以pull -u在任何子存储库上执行的插件,然后在开始构建之前提交并将该更改推送到父级。我在官方插件列表中看不到类似的东西,并且正在考虑构建一个自定义插件来支持它。

0 投票
1 回答
67 浏览

mercurial - Mercurial 子存​​储库的多用户访问

在 mercurial 中组织对子存储库的 ssh 访问的正确方法是什么?考虑以下情况:

和.hgsub:

问题是这.hgsub是存储库的一部分,因此不可能(或者是吗?)将各种用户名存储在存储库的 ssh 地址中。我真的很想避免仅仅因为这个而使用“全局”用户来访问存储库。

0 投票
1 回答
635 浏览

mercurial - Mercurial:如何恢复子存储库文件?

我有一个带有子回购(在本例中为引导程序)的 mercurial 回购。

我修改了文件,然后手动修改回来,但 hg 仍然认为它已修改并且不会让我提交其他更改(我不想向 sup-repo 提交任何内容)。

上面你可以看到状态认为它已修改。但是下面当我运行 diff carousel.less 时没有出现。这对我来说很奇怪。

所以我尝试恢复 suprepo 文件。但它不让我。

如何恢复 subrepo 文件:carousel.less,以便我可以提交更改?

0 投票
1 回答
72 浏览

mercurial - 没有写访问权限的子存储库上的 Mq

我在我的项目中有一个依赖作为子存储库(没有写访问权限)。我想向该子存储库添加一些个人定制 - 可能使用 mq.

我也希望能够克隆主仓库来构建它。目前我必须:

  1. 克隆 repo - 子存储库被自动克隆
  2. 手动克隆子存储库的所有补丁队列

如何摆脱第 2 步?没有外部脚本甚至可能吗?(如果有任何区别,我正在使用 bitbucket)。