问题标签 [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.
git - 如何在多个项目之间共享一个 .git 文件夹?
我想使用 Git 存储库或子存储库,例如 Mercurial Share 扩展。
所以,这就是我所拥有的:
我怎样才能初始化一个 repoanother
以便它与 repo 共享存储库orig
?
我需要这个用于我想作为子存储库包含的大型库。回购有数百兆,所以我想重用一些文件夹。
更新:我希望能够在不同的工作文件夹中有不同的修订。
git - Mercurial internals : 激进权限更改后的 Git 子存储库状态
免责声明:我不是在寻求解决方案、变通方法或任何关于如何做事的建议,我只是对 Mercurial 的内部结构感到好奇。
我有一个 mercurial 存储库,其中包含一些子存储库(Git 和 Mercurial)。
- 我的存储库和所有子存储库都处于干净状态(即:
hg st -S
不返回任何内容)。 - 我在根目录进行了一些激进的权限更改:
chown www-data:www-data -R *
现在,hg st -S
返回 Git 子存储库的每个文件(Mercurial 仍然被认为是“干净的”)作为修改。的输出hg diff -S -g
为空。我想知道为什么会这样?
到目前为止我发现了什么:
- 如果我
git status
在其中一个子存储库中执行操作,则该命令不会显示未完成的修改,并且此特定存储库不再被标记为已hg st
修改 - 如果我将权限更改限制为子存储库,则只有此子存储库被标记为已修改(即“问题”未链接到
.hg
目录中文件的状态) - 做一个干净的更新(
hg up -C
)“解决”问题 - 如果我仅在
.git
目录中更改权限,则 subrepo 仍然被认为是干净的 hg --debug up -C
标记为已修改的 Git 子存储库的输出不同:
“干净” git subrepo :
“修改” git subrepo :
所以,据我所知,元数据中的权限更改不是这里的原因,那是什么?我可能只是错过了一些非常简单的东西。
仅供参考,我使用的是 1.9.3 版本,我不记得我是否在以前的版本上发表过相同的评论。
在有人提议我停止像这样进行权限更改之前,我已经这样做了,而且我不再面临这个问题,只是我想了解为什么会发生某些事情;)
更新
运行git diff-index HEAD
给出以下输出:
如果我运行git diff-index -p HEAD
,差异是空的。我仍然不知道为什么 git 会考虑修改这些文件。
windows - Windows 上的子存储库出现 Mercurial 错误
我对使用 subrepos 配置的 Mercurial 有严重问题。当我尝试提交或进行更新时,我收到以下错误:
我的.hgsub:
我使用 Windows XP 和 Mercurial 1.9.2。我已将 svn 和 git 添加到 PATH 并且效果很好。当我尝试手动更新我的子存储库时没有问题,svn up 和 git pull 效果很好。
version-control - 在本地和远程 Mercurial 存储库之间保持历史同步
我正在开发一个项目,该项目设置为每个组都具有我们主 mercurial 存储库的服务器端克隆。我们一直在使用的工作流程包括在笔记本电脑上开发、提交并推送到服务器端克隆存储库,然后将这些更改拉到功能强大的远程机器上以运行我们的测试。一旦更改准备好与组的其他成员共享,主服务器端克隆将被拉入本地存储库,并且本地存储库将根据主克隆重新定位。然后可以将更改推送到主远程克隆,历史将显示线性历史。
问题是个人服务器端克隆与本地存储库完全不同步,因为它没有重新设置基础。我们没有使用适当的分支,因此合并+变基和移植/移植似乎不是我们用来使存储库恢复同步的方法。
服务器端克隆需要与本地存储库具有相同的历史记录,否则它将拉取和推送所有更改集,并且会费时地解决不存在的冲突。如何让服务器端克隆具有与主存储库和本地存储库相同的历史记录而不从主存储库中剥离和拉取?理想情况下,我们不必登录服务器。
mercurial - 如何使 Mercurial 子存储库始终指向某个变更集或标签?
我很好奇 Mercurial 是否可以做到这一点。我想在一个项目中有一个子存储库,它总是固定到手动指定的变更集,或者更好的是 - 标记。
基本上我想要实现的是在主仓库中有一个核心系统,然后是子仓库中的所有模块和组件,但我不希望这些子仓库指向小费,只指向这些组件/模块的主要版本(因此标签)。
mercurial - 在 osx 上设置 mercurial/kiln 子存储库
我一直在尝试使用 kiln.按照这个问题的答案中的说明进行操作。
我希望能够安排如下:
/somepath/thirdparty
映射到窑存储库“第三方”并包含各种代码/somepath/common
映射到 kiln 存储库“common”并包含我编写的共享代码
和
/somepath/project1
映射到窑库“project1”/somepath/project1/thirdparty
映射到上面的第三方分支/somepath/project1/common
映射到上面的公共分支
和
/somepath/project2
映射到窑库“project1”/somepath/project2/thirdparty
映射到上述第三方的另一个分支/somepath/project2/common
映射到上面 common 的另一个分支
我发现当我.hgsub
按照指示创建文件并将其添加/推送到 Kiln 时,我无法再在 Kiln 网络文件查看器中查看 Kiln 文件——它显示了一条关于 Kiln “过热”的模糊消息 :-) 此外,虽然它确实在正确的位置自动创建了子文件夹,它们没有填充文件(可能是因为拉取失败)。
以前有人用Kiln尝试过这样的事情吗?
由于我打算使用通用代码开发许多应用程序(并可能最终将库作为开源发布),我希望将其管理在离散的存储库中。但是,由于某些项目是针对最终客户的,因此我需要能够为他们提供一个包含上述内容的单一存储库。
mercurial - 推送时将包含绝对路径的 Mercurial [子路径] 附加到主仓库的默认路径
在 Windows 上运行 Mercurial 2.0.2:
在我的 .hgrc 中:
在我的 .hgsub 中:
当我进行推送时,子仓库的推送路径是它到主仓库的路径的串联,而不是绝对路径 - 输出为:
我本来期望:
是因为子回购路径的“绝对性或相对性”是由 .hgsub 中的右手路径决定的,而不是它映射到的值?例如,MYREPOS/lib 是相对的,因此映射的路径将被视为相对,不管是不是?
mercurial - 使用已移动的子存储库更新到旧的 Mercurial 修订版
我们的项目中有几个远程子存储库,它们的地址最近从http://host/path
. http://other_host/path
一个人怎么能回到上个月的修订版,Mercurial 认为可以在哪里找到 subrepo http://host/path
?
mercurial - 无法从主仓库克隆 Mercurial 子仓库,因“未知修订”而失败?
我有一个像这样的 Windows 文件结构:
Stable
包含主要回购。 ProjectA
并且SharedLibrary
是Stable
. 该.hgsub
文件包含:
在大多数情况下,一切似乎都正常工作。主仓库将识别子仓库,我可以hg status -S
在主仓库上做类似的事情,它将通过子仓库递归。 commit
似乎也可以正常工作。
当我尝试clone
从Stable
(主仓库)时,尝试ProjectA
使用以下消息克隆子仓库时失败:
但是,我已经验证了修订版是正确的并且存在于ProjectA
subrepo 中。我可以clone
每个子仓库都没有任何问题。
到目前为止,我已经尝试过:1)删除每个存储库并重新开始。2) 重新安装 TortoiseHg/Mercurial。3) 确保 .hgsubstate 中列出的修订版是正确的并且存在于每个子存储库中。
有任何解决这个问题的方法吗?
编辑:当clone
(Stable
主)回购失败时,它会离开目标目录,克隆Stable
没有任何子回购。我可以去 cloned Stable
,做一个hg update tip
,它会成功克隆ProjectA
subrepo 但无法克隆SharedLibrary
,并出现相同的“未知修订”错误。然后我可以再次运行hg update tip
,它将成功克隆SharedLibrary
子存储库。那时一切都是正确的,就像克隆一开始就正常工作一样。
编辑2:内容.hgsubstate
:
ProjectA
和变更集 id之间没有空格SharedLibrary
,但我想这正是 Mercurial 的做法。两个变更集.hgsubstate
都存在于相应的子存储库中。
编辑 3: hg log --debug -r tip
来自ProjectA
subrepo。显示正确的变更集存在
mercurial - 如果 subrepo 属于两个主要 repos,则 Mercurial 更新对 subrepo 不起作用?
采取这个回购结构:
SharedLibrary 指向同一个文件夹(这是 Windows),它不是每个主仓库下的单独副本/克隆。
假设每个主仓库都有两个变更集,0 和 1(tip)。我们从 1(tip) 修订版的两个主要回购开始。
采取以下步骤:
在客户端存储库中,更新到变更集 0。这会将 ProjectB 和 SharedLibrary 更新为较早但匹配的修订版。
ProjectA 现在与 SharedLibrary 不同步。第 1 步将 SharedLibrary 更新为比 ProjectA 所需的版本更旧的版本,该版本仍为 1(tip)。
在服务器存储库中,我们希望将 SharedLibrary 更新为 ProjectA 的正确修订版,因此我们在服务器主存储库中运行 hg update tip。这不会将 SharedLibrary 更新为正确的版本。它将 SharedLibrary 留在与第一步相同的修订版中。
返回客户端 repo 并运行 hg update tip。SharedLibrary 现在处于 ProjectA 和 ProjectB 的正确版本。
似乎服务器存储库中的更新并未检查 SharedLibrary 是否处于正确的修订版。这种行为是预期的,还是有更好的方法来做到这一点?