我有一个项目,我有一个bitbucket存储库,它依赖于我作为subrepo合并的另一个项目。现在,我没有对子存储库的推送访问权限,也没有我想要或不需要的权限 - 这是一种只有拉动的关系。
我意识到当你推送主存储库时,它也会尝试推送子存储库。由于我无法做到这一点,因此我提取了依赖项目的本地副本,与主存储库目录处于同一级别。从本质上讲,我有以下布局:
Main/ ; pushes to https://mine.org/Main
.hg/
.hgsub
Lib/
SubRepo/ ; clone of Main/../SubRepo/
.hg/
SubRepo/ ; local copy of https://forbidden.org/SubRepo
.hg/
.hgsub
的内容类似于
Lib/SubRepo = ../SubRepo
然后我克隆了,
~/path/to/Main $ hg clone ../SubRepo/ Lib/SubRepo
到目前为止,这么好。问题是,在我全部设置并提交更改后,当我尝试推送Main Mercurial时会尝试将SubRepo推送到https://mine.org/SubRepo,这不存在,从而使整个推送操作失败。
我有什么遗失的吗?
答案 0 :(得分:4)
为什么不创建https://mine.org/SubRepo - 如果您不想宣传它,您可以随时在其hide
部分[web]
中为其启用.hg/hgrc
文件。这是我习惯的模式,你可以在这里使用它们克隆主仓库和同一布局中的所有子目录:开发框和面向web的hgweb安装。
或者,您可以在[subpaths]
中使用Main/.hg/hgrc
部分,其中包含以下内容:
[subpaths]
https://mine.org/SubRepo = https://forbidden.org/SubRepo
这应该让你拦截推进的目标,并指向一个它不会让你推动的地方,让你看到没有任何改变,所以推动可以继续。
答案 1 :(得分:1)
Mercurial正在做的事情似乎是合法的:使用.hgsub中列出的路径,它试图推送到一个名为'SubRepo'的目录,该目录存在于Main的一级。这显然不是你想要的,所以你可能不得不在这里工作。我可以想到两个选择: