问题标签 [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.
mercurial - 带有子存储库和离线克隆的 Mercurial 工作流程?
我经常离线。
所以通常,我使用一个本地克隆作为功能、错误等的“中心”。
离线工作。凉爽的。
如果该项目包含远程子存储库,我可以使用类似的工作流程吗?
因为,如果 .hgsub 说
汞克隆 说
请注意,一旦创建了克隆(连接时),push
将pull
使用子存储库中的路径hgrc
(而不是 中的位置.hgsub
)。所以我可以把它指向一个本地克隆,一切都很酷。
但是clone
看着.hgsub
(因为它应该)。因此,如果“祝福”子存储库在服务器上,我无法离线创建新的克隆,即使我需要的文件就在那里。
这是个问题,对吧?
mercurial - Mercurial 子存储库
我多次阅读教程,我觉得我仍然缺少一些东西。我将尝试给出一个具体的场景。请帮我找出我错在哪里。
假设我有一个每个人都认为是“中心”的存储库。这意味着每个新开发人员都从它克隆并从中拉/推。Central 包含三个文件夹-
- Infra(即将成为共享代码)
- .hg
- infra.txt
- 开发者1
- dev1.txt
- .hgsub (其中有一行 --> infra = (path of infra) )
- 基础设施(次回购)
- .hg
- infra.txt
- 开发2
- dev2.txt
- .hgsub(与 dev 1 相同 - infra = (path to infra) )
- 基础设施(次回购)
- .hg
- infra.txt
现在,假设一个开发者克隆了 dev1,而另一个开发者克隆了 dev2。我看到的是,当 dev1 的开发人员更改 infra 并将更改推送到中央存储库时,dev2 开发人员了解 infra 更改的唯一方法是手动搜索 infra 中的传入更改集作为子-存储库。一般来说,这意味着如果我的项目有很多子存储库(它们本身可能包含更多的子存储库),除了手动检查我的子存储库之外,我无法知道更改。
我认为这不是工作方式......有人可以帮忙吗?
提前致谢,
埃亚尔
git - 使用在 mercurial 存储库中有另一个 git subrepo 的 git subrepo,这可能吗?
我有一个 mercurial 存储库,并且毫无问题地添加了 git subrepo ( hg 1.8 )。
问题是:这个 git subrepo 内部有另一个 git subrepository 并且它没有被拉取(它在 git 的 subrepo.gitmodules
文件中),除非我git clone --recursive
在我的 git subrepo 上做一个:这样做它可以工作。
问题:我hg pull
在另一台机器的存储库中做了一个,它git subrepo
拉了.gitmodules
. .gitmodules 仅在我执行 .gitmodules 时才被拉入另一台机器git clone --recursive
。
有没有人有任何建议来处理这种情况?丑陋的解决方案是做一个git clone
并简单地将所有文件(包括 git 元数据)添加到我的 mercurial 存储库中,而不像 subrepo 那样行事。
mercurial - 将 mercurial 中的子存储库 url 从 https 更改为 ssh。这样做有什么问题吗?
我有.hgsub
一个子存储库的条目,它是使用调用的https
。
现在,我想使用,ssh
因为两个存储库都是我的,并且我创建了一个 ssh 密钥。所以,它会是:
我没有改变,也没有测试。有人知道更改此网址是否会增加某种问题?
mercurial - mercurial (hg) 中的“子路径”究竟是如何工作的?
我正在阅读mercurial中的子路径,但仍然无法理解以下内容:如果子路径文件没有版本控制,我应该如何至少有一个“主要”来源?我是否应该在我的 repo 中对子路径文件进行版本控制以及 .hgignore 等,然后将其复制到我进行克隆的 .hg 文件夹中?
mercurial - 在 Mercurial 中使用子存储库
我有一个包含许多组件的大型系统,我想将这些组件分布在几个不同的 mercurial 存储库中(因此在系统的某些部分上工作的人不必检查整个系统)。它需要在 UNIX 和 Windows 上运行。
在系统中,我有一个需要在许多地方共享的目录(保存常见的东西,如 CSS 文件和图像)。
我已经设置了它,以便每个组件都有一个共享 repo 的子repo,并且该 repo 也在更高级别上签出。我这样做是因为我希望程序员能够从主存储库中执行“hg pull”,而不是“hg push”(任何更改都会被“hg serve”从他们的工作中提取并在开始之前先检查回到主存储库)。
所以在顶层,程序员可以检查:
核心样式 ComponentSetA ComponentSetB 等
这些都指向http://machine/hg/RepoName(通过克隆)。
我在以下位置有子存储库:
ComponentSetA/web/style (with style = ../../Style in web/.hgsub) ComponentSetB/web/style 等等。
我的问题是,在“hg 克隆”上,我似乎无法让子存储库自动创建自己。我希望它们是透明的。如果任何程序员没有进行更改,他们不应该注意到他们在那里......
如果我必须先检查 Style 存储库,然后执行其中一个组件,那没关系,但我希望对顶级存储库有额外的间接级别,以允许程序员将他们的较低级别的更改推送到一个公共的回购。
有什么建议么?
mercurial - Hg 子库依赖
过去(这里和这里)有几个关于 Hg 子回购依赖的问题,但接受的答案似乎并没有解决我的问题。
我的一个项目有4个依赖:A、B、C、D。D依赖A、B、C;并且 B 和 C 依赖于 A:
我想使用 Hg 子存储库来存储它们,这样我就可以跟踪它们所依赖的每个版本。这是因为,当我在这个项目中使用 A、B、C 和 D 时,其他项目只需要 A 和 B。因此,B 和 C 必须独立于 D 跟踪他们需要的 A 版本。同时,在我的应用程序中,给定版本 D 引用的 B 和 C 版本必须始终使用与给定版本的 D (否则它会在运行时倒下)。我真正想要的是允许它们在同一个目录中作为兄弟姐妹相互引用——即 D 的 .hgsub 如下所示,B 和 C 看起来像第一行。
然而这似乎不起作用:我明白为什么(给人们足够的绳索来吊死自己很容易)但它很遗憾,因为我认为它是我依赖的最巧妙的解决方案。我已经阅读了一些建议的解决方案,我将快速概述它们以及为什么它们不适合我:
包括副本作为嵌套子目录,将这些作为 Hg 子存储库引用。这会产生以下目录结构(我已经删除了 A、B、C、B\A、C\A 的主要副本,因为我可以接受在 \D 中引用副本):
- project\(所有主要项目文件)
- 项目\D
- 项目\D\A
- 项目\D\B
- 项目\D\B\A
- 项目\D\C
- 项目\D\C\A
这种方法的问题:
- 我现在在磁盘上有 3 个 A 副本,所有这些都可以有独立的修改,必须在推送到中央仓库之前同步和合并。
- 我必须使用其他机制来确保 B、C 和 D 引用相同版本的 A(例如 D 可以使用 v1 而 D\B 可以使用 v2)
一种变体:使用上述但指定 .hgsub 的 RHS 以指向父副本中的副本(即 B 和 C 应具有以下 .hgsub):
这种方法的问题:
- 我的磁盘上还有三个副本
- 我第一次克隆 B 或 C 时,它会尝试从“..\A”中递归地提取 A 的引用版本,这可能不存在,可能会导致错误。如果它不存在,它不会提供关于应该在哪里找到 repo 的任何线索。
- 当我对更改进行递归推送时,D\B\A 中的更改不会进入共享中央存储库;他们只是被推到 D\A 上。因此,如果我连续推送两次,我可以保证所有更改都将正确传播,但这完全是一个骗局。
- 同样,如果我进行(手动)递归拉取,我必须正确获取订单以获取最新更改(即在拉取 D\B\A 之前拉取 D\A)
使用符号链接将文件夹 \D\B\A 指向 D\A 等。
这种方法的问题:
- 符号链接不能在 Hg 存储库本身中编码,因此每次团队成员克隆存储库时,他们必须手动/使用脚本重新创建符号链接。这可能是可以接受的,但我更喜欢更好的解决方案。另外(个人喜好)我发现符号链接非常不直观。
这些是最好的可用解决方案吗?我的初始 .hgsub (见顶部)是一个梦想,或者有什么方法可以请求/实现这个改变?
更新以更好地解释 A、B、C、D 的更广泛使用
mercurial - 强制 Mercurial 始终使用 --subrepos
是否可以将 Mercurial 配置为始终检查子存储库?
我希望它一直启用,而不必每次都在命令中指定它。
mercurial - 仅标记子存储库
我有一个带有一个子存储库的 Mercurial 主存储库,如下所示:
而且我希望标记Sub
,同时保持Main/.hgsubstate
最新(即指向Sub
标记过程产生的变更集)。
我不想标记主存储库。
如果不从内部进行标记Sub
并做一些魔术来Main/.hgsubstate
更新,这是否可能?
powershell - Mercurial:自动添加子存储库的 Windows 脚本
RyanWilcox在这里发布了一个脚本,可以使用以下命令自动添加子存储库:
如何将其翻译成 Windows 批处理或 powershell 脚本?