2011-05-31 70 views
25

在我的资源库中,我已经为我使用的模块添加了几个子存储库。我总是会将这些subrepos视为“只拉”。我不打算对它们进行任何更改,但如果新版本发布,我们希望保留轻松提取新更改的功能。如何防止mercurial推送subrepos?

当我主推的仓库,水银试图推动子库。有什么设置可以防止这种情况发生?

+0

@Mercurial不水银不会有类似的东西到Git的.gitignore文件? – Arlen 2011-05-31 00:57:44

+0

当然是的,但他说的是subrepos而不是每个文件忽略。 Git具有相同的subrepo内容,并且它同样不会用.gitignore解决。 – 2011-05-31 02:36:05

+0

我不想忽视subrepos,我根本不希望他们成为推动的一部分,因为他们永远不会改变。 – Soviut 2011-05-31 06:18:00

回答

-1

取决于你使用的善变的客户端。我使用tortoisehg,我发现右键单击该文件夹并选择tortoisehg >> forget中的文件即可。选择文件,你不需要再打扰。

+1

你在考虑忽略文件,但soviut询问不要推送subrepos。 – 2011-05-31 02:36:33

7

有一些事情可以做,这取决于你在寻找它的行为。

你实际上是在编辑和subrepo内犯?如果是这样,您应该创建一个单独的供应商分支机构回购站,将您的更改与上游(“他们”)的更改合并在一起,并让您的次要指向。像这样的事情也许:

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

的想法是,在subrepo入口不是直接指向拉只上游回购,而是你自己的,你合并与“他们”

另一个更改选项是停止在subrepo中进行更改。如果没有更改,并且没有提交,那么推送将会通过该回购。如果您切换到该工作模式,则可以在hgrc文件中的[ui]部分中设置commitsubrepos = false以避免意外提交该回购。

的底线是,如果你在那里,然后改变的事情,你需要提交他们(安全!),如果你提交他们,那么他们就会被推向如果父推,所以只是控制到他们被推到哪里,你很好去。

+2

我不以任何方式编辑或更改子回购。这是严格意义上的图书馆供我参考。我希望他们保持次回购,这样我可以更新更新,但我不希望他们经常在没有任何改变时试图推动。 – Soviut 2011-05-31 06:16:34

+1

如果你没有改变subrepos中的任何内容,那么Mercurial将不会尝试推送它们。或者说,它会检测到没有更改,推送将立即退出。如果你进入这个回购协议并且'hg outgoing'向你显示任何内容,那么你已经改变(并提交)了一些东西。你可以用你在父回购中做“hg push”时看到的具体输出来更新你的问题吗? – 2011-05-31 21:46:22

+1

只要hg推在父回购。我希望基本上只是防止subrepo检查,因为它似乎比正常推动更慢。 – Soviut 2011-06-01 05:24:15