问题标签 [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 - Hg:.hgsub 中的 [subpaths] 部分不能接受其他小写名称?
是否应该有包含 mercurial subrepos 的区分大小写的目录名称?
我正在创建带有 2 个子存储库的瘦壳存储库 UberRepo:Foo
和BaR
.
如果我命名目录foo
,bar
(小写)并将以下内容放入.hgsub
文件中:
然后一切(推,拉,克隆)就像一个魅力。问题是带有 subrepos 的目录是小写的。
如果我命名目录Foo
,BaR
那么无论我放入什么,.hgsub
我总是会得到相同的 404 错误,因为 hg 正在尝试推送https://bitbucket.org/teamname/uberrepo/Foo
- 基本上没有替换发生。
我可以做些什么来保留非小写目录名称,同时仍然能够让 hg 理解我的简单子存储库结构?
可能的解决方法: 我发现部分问题可能是 hg(基于 hgrc 设置)将用户名推送到 URL。它仍然没有回答为什么小写一切正常。但我只是下载了 hg 的代码,搜索了负责替换的代码,摆弄了一下,发现这可以通过使用正则表达式来解决:
这解决了这个问题。仍然不需要它,并且应该比在这种简单的情况下容易得多(就像输入确切的 url 一样简单)
mercurial - 具有秘密阶段的 Mercurial 子仓库:避免不一致的主机仓库状态
假设以下情况:
- 我有一个带有子仓库的善变“主机仓库”。
- 子存储库包含秘密阶段的变更集。
- “主机仓库”在草稿阶段有一个变更集,该变更集取决于子仓库中的秘密阶段变更集。
如果现在推送“主机存储库”,则“主机存储库”中的草稿阶段变更集将被推送,而子存储库中的秘密阶段变更集不会被推送。
因此,推送到的仓库现在包含一个无法更新的状态:它取决于子仓库中的秘密阶段变更集,该变更集未被推送,因此不可用。
是否可以防止 mercurial 推送依赖于秘密阶段子仓库变更集的主机仓库变更集?(可能带有钩子或一些配置设置。)
cmake - 如何处理 Mercurial 存储库和子存储库之间的目标名称冲突?
我的 Mercurial 存储库 repo1 有一个名为的自定义目标foo
;别管它做了什么。我还有另一个存储库 repo2,我想将其用作 repo1 的子存储库。repo2 以与 repo1 类似的方式开发,并且还有一个名为 的自定义目标foo
,做同样的事情(当然只是针对 repo2 目录)。
add_subdirectory(relative/path/to/repo2)
如果我尝试在中为 repo1 运行 CMake CMakeLists.txt
,我会得到:
我想我可以在自定义目标名称前加上存储库名称,但这似乎是解决这个问题的粗略方法;我有点喜欢make foo
在 repo1 和 repo2 中在概念上做同样事情的事实。那么我可以在这里做些什么更聪明的事情吗?
build - 如何在 CMakeLists.txt 中判断它是否与 add_subdirectory() 一起使用?
我有这个代码项目可以独立构建,也可以作为更大存储库的子项目(将其检查为子存储库)。CMakeLists.txt
在后一种情况下,我有一个主项目的顶层,它有
现在,我希望子项目的行为有所不同,以防它通过the add_directory()
. 显然,我会使用大if
指令。但是我要检查什么条件?CMake 如何在运行时“告诉”CMakeLists.txt
它是子目录文件还是主文件?
version-control - 管理复杂的存储库结构 - 模块依赖和共享代码
(以下是我在组织正在处理的源代码时遇到的复杂性的一种“理论 MCVE”。您可以将其视为一个具体问题,这会很好,或者您可以参考它提出的一般问题并建议如何解决这些问题。)
假设我有代码 A、B、C 和 D 的模块。A 依赖于 B、C、D;B依赖于C;C、D 不依赖于其他模块。(我松散地使用术语“模块”,所以请不要在这里挑剔)。
此外,在所有的 A,B,C,D 中,使用了几个相同的头文件,甚至可能是一个编译对象,将它们放在一起形成第五个模块没有意义,因为它太小了和无用的。让我们foo.h
成为该类别中的文件之一。
虽然所有这些模块都保存在一个单一的整体代码存储库中,但一切都很好。一切都只有一个副本;使用相同函数等编译的对象之间没有链接器冲突。
问题是:如何使 B、C、D 中的每一个都成为版本管理的存储库,以便:
- 它们中的每一个都可以仅在其依赖的模块存在的情况下构建(作为子模块/子存储库或其他方式);和
- 我不需要确保和手动维护/更新相同文件的不同版本,或者从一个库到下一个库进行结转提交(除了可能更改指向的修订版);和
- 当所有东西都构建在一起时(即构建 A 时),构建不涉及
foo.h
C 的四重副本和双重副本(一次用于 A,一次用于 B)——我可能总是必须确保并保持完全同步。
请注意,当我有更多时间时,我将对其进行编辑以使问题更加具体(尽管我有点喜欢广泛的问题)。我会说,在我的具体情况下,代码是现代 C++、CUDA、一些 bash 脚本和 CMake 模块。所以面向 Java 的解决方案是行不通的。
mercurial - 如何在不断开与父仓库的链接的情况下减小 hg 子仓库的大小?
我正在尝试将我的存储库上传到 Bitbucket。它是一个父存储库和一些子存储库。其中一个子存储库太大(并且我的连接受到限制),以至于 Bitbucket 在完成导入之前超时。我希望如果我将子存储库做得足够小,我将能够将其上传到 Bitbucket 并从那里获取父存储库和子存储库工作。
不幸的是,使用hg convert
使子存储库更小会更改修订号,并且父存储库不会让我使用较小版本的子存储库的 URL 来代替旧的(较大的)子存储库。有没有办法使存储库更小,同时保持与父存储库的兼容性?
当我使用 时hg convert
,我删除了最大的文件(这些文件都较旧 - 并且早于我开始将此存储库用作子存储库时)并删除了子存储库中的一些历史记录。它运行良好,并将我硬盘上的子存储库的大小从 1.73GB 降至 328MB。不幸的是,父 repo 不会切换到新的 Bitbucket URL。它给出了错误abort: repository is unrelated。当我进入 subrepo 并尝试编辑其 hgrc 以指向新 URL 时,也会发生同样的事情。我认为该选项--config convert.hg.saverev=True
应该使原始存储库的克隆能够利用新存储库,但到目前为止它还没有起作用。
这是我用来缩小子仓库的命令:hg convert --filemap C:/Workspace/myFilemap.txt --config convert.hg.saverev=True --config convert.hg.startrev=acc85c96fe57e1ff1def298bdd6adb3c614d2a92 C:/Workspace/Original/subrepo C:/Workspace/NewRepos/SmallerSubRepo
任何有关如何修复 hg convert 命令或如何使用另一种方法来完成相同事情的提示,我们将不胜感激。
version-control - 保留一组 mercuial 子存储库的提示
我想保留一系列 mercurial subprepositories 更新,tip
这就是我想出的。如果我这样做,有什么我看不到的陷阱吗?
背景故事
多年来,我一直在使用单体颠覆存储库main
,但我正准备将其转换为 mercurial。我唯一不喜欢 mercurial 的是我不能只克隆一个子目录。我正在考虑将每个顶级目录main
放入自己的 mercurial 存储库中。然后我可以创建一个名为 mercurial 的 repo maincollections
,它将每个新的 mercurial repo 引用为 subrepo。为了通过在里面拉一次来更改任何子存储库,maincollections
我设置了以下内容。
方法
当在任何一个子存储库中的服务器上收到推送时,它会触发changegroup
挂钩以commit-sub
强制更新和提交存储库。.hgsubstate
maincollections
mercurial - Mercurial 子存储库可以驻留在子文件夹中吗?
我多年来一直使用以下行.hgsub
:
它会将名为“manuals”的存储库放入help
另一个文件夹中的文件夹setup
中。所以我的父存储库结构如下所示:
在我今天更新到 Mercurial 4.9 之前,这没有问题,它现在说:“subrepo 路径包含非法组件:setup/help”,我什至无法提交主 repo。Mercurial现在禁止这样做吗?是否有有效的.hgsub
语法来完成这项工作?我不想help
成为主项目文件夹的直接子级。我之前的 Mercurial 版本是 4.5,这不像我使用的是古老的工具......
根据请求的错误回溯:
git - 发行版升级后,mercurial 不会提交 git subrepo
我最近从 Devuan ASCII 升级到 Devuan Beowulf(即 Debian Stretch 到 Debian Buster)。我想我已经安装了所有相关的 mercurial 相关软件包;但是当我尝试使用 git subrepo 提交一个 mercurial repo 时,它告诉我:
为什么会发生这种情况,我应该如何解决?
笔记:
- 当前的 mercurial 版本是 4.8.2,以前是 4.0.1