我该如何防止Mercurial推送子仓库?

28
在我的代码库中,我添加了几个子代码库,这些子代码库是我正在使用的模块。我将始终将这些子代码库视为“只拉取”。我不打算对它们进行任何更改,但希望保留轻松拉取新版本更改的能力。 当我推送主代码库时,Mercurial会尝试推送子代码库。是否有任何设置可以防止这种情况发生?

@Mercurial Mercurial没有类似于Git .gitignore文件的东西吗? - Arlen
当然会,但他谈论的是子仓库而不是每个文件的忽略。Git具有相同的子仓库内容,并且也不能通过.gitignore解决这个问题。 - Ry4an Brase
我不想忽略子仓库,只是不希望它们成为推送的一部分,因为它们永远不会改变。 - Soviut
2个回答

7

根据您所需的行为,有一些事情可以做。

如果您实际上是在子仓库中编辑和提交更改,那么您应该创建一个类似于供应商分支的单独仓库,在其中将您的更改与上游(“他们”的)更改合并,并使您的子仓库指向该仓库。也许可以这样做:

repos
  main
    subrepo
    .hgsub # contains: "subrepo=../theirproject"
  theirproject  # clone of remote, upstream repo

这里的想法是,子仓库条目不直接指向仅拉取的上游仓库,而是指向你自己的一个仓库,在那里你将自己的更改与“theirs”合并。
另一种选择是停止在子仓库中进行更改。如果没有更改和提交,则push命令会跳过该仓库。如果您切换到这种工作模式,则可以在hgrc文件的[ui]部分中设置commitsubrepos = false,以避免意外在该仓库中提交。
最重要的是,如果您在其中更改了内容,则需要将其提交(为了安全起见!),如果您提交了它们,则它们将随父级一起推送,因此只需控制它们被推送到哪里,就可以放心使用了。

2
我不会以任何方式编辑或更改子仓库。它们严格存在作为我参考的库。我希望它们保持为子仓库,以便我可以拉取更新,但我不希望它们在没有任何更改的情况下不断尝试推送。 - Soviut
1
如果您在子仓库中没有进行任何更改,则Mercurial不会尝试将它们推送。或者说,它会检测到没有更改,然后立即退出推送。如果您进入该仓库并且hg outgoing显示了任何内容,则表示您已经进行了更改(并提交)。您能否更新您的问题,并附上在父仓库中执行hg push时看到的具体输出? - Ry4an Brase
1
只需在父存储库上执行 hg push。我希望基本上可以防止对子存储库的检查,因为它似乎比普通推送慢。 - Soviut
1
将子仓库指向远程仓库的本地克隆。 (1) 将慢速、远程、只读的仓库克隆到本地;(2) 将您的 .hgsub 文件指向本地克隆而不是远程仓库。然后,即使没有更改,推送检查也应该是瞬间完成的。 - Ry4an Brase

-2

取决于您使用的Mercurial客户端。我使用Tortoisehg,并发现在Tortoisehg中右键单击文件夹并选择文件,然后点击“忘记”就足够了。选择这些文件,您将不需要再次麻烦。


1
你正在考虑忽略文件,但是Sovuit正在询问是否不要在子仓库中推送。 - Ry4an Brase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接