将本地mercurial存储库推送到远程服务器或从本地服务器在服务器上克隆

将本地mercurial存储库推送到远程服务器或从本地服务器在服务器上克隆,mercurial,clone,dvcs,hgserve,Mercurial,Clone,Dvcs,Hgserve,我有一个本地存储库,现在我决定将其推送到远程服务器(例如,我有一个允许mercurial存储库的主机,并且我还尝试推送到bitbucket)。存储库有很多文件,略高于200mb。在本地,我可以毫无问题地克隆存储库 现在,我在这个存储库中做了很多更改,我已经浪费了几天时间试图弄清楚如何让远程服务器克隆我的存储库。我无法在局域网外工作。我什么都试过了。因此,我在远程服务器(主机和bitbucket)上创建了一个新的存储库,其中没有任何内容。现在,我将本地拥有的完整存储库推送到这些远程位置。到目前为止

我有一个本地存储库,现在我决定将其推送到远程服务器(例如,我有一个允许mercurial存储库的主机,并且我还尝试推送到bitbucket)。存储库有很多文件,略高于200mb。在本地,我可以毫无问题地克隆存储库

现在,我在这个存储库中做了很多更改,我已经浪费了几天时间试图弄清楚如何让远程服务器克隆我的存储库。我无法在局域网外工作。我什么都试过了。因此,我在远程服务器(主机和bitbucket)上创建了一个新的存储库,其中没有任何内容。现在,我将本地拥有的完整存储库推送到这些远程位置。到目前为止,它还没有成功,因为推送操作停留在搜索更改的
上,并且没有给我任何其他有用的输出。我把它放了大约一个小时,没有任何变化

现在我的问题是,就
hg-serve
而言,我做错了什么?我可以在本地访问它,但不能远程访问(通过DynDns-我已经正确地配置了它,路由器正确地转发了端口),这样我就可以让服务器在第一次克隆存储库之后将其推送到存储库。我的第二个问题是,假设服务器上的克隆不起作用(例如,如果我要将当前存储库推送到bitbucket),是否在服务器上创建一个空存储库,然后将本地存储库推送到新的远程存储库?这就是搜索更改问题的根源吗


非常感谢您在这方面提供的任何帮助。

是的,您可以毫无问题地推送到一个空的存储库。推送或拉送时,Mercurial将检查源存储库和目标存储库是否相互关联。这使得我无法将与OpenOffice相关的变更集拉到我的Mozilla Firefox克隆中

一个新的空存储库与所有存储库相关,因此您可以始终创建一个空存储库并将更改集推/拉入其中

事实上,当你

hg clone http://example.net/my-repository
那么这和做什么是一样的

hg init my-repository
cd my-repository
hg pull http://example.net/my-repository
除了不会有一个默认的路径设置之外——请参阅barjak的评论,了解如何进行设置

就hg serve而言,我做错了什么

很难说,但是
hgserve
通常不是我在第三方服务上创建远程克隆的方式。对我来说,如果没有必要,我不会在防火墙上戳一个洞

在服务器上创建空存储库,然后将本地存储库推送到新的远程存储库,确定吗

对。这就是我在窑上创建远程克隆的方式。在kill创建一个新的空repo,获取新存储库的URL,然后从我的计算机推送到它

这就是搜索更改问题的根源吗

不确定,但这表明一个真正大的推动可能是一个问题。他们建议推入较小的卡盘(例如,一次几转)。另一个需要考虑的问题是,您是否可以在没有修订历史记录的情况下生存(您是否可以从文件的当前版本创建新的repo并推送该存储库。报告还指出,身份验证是一些问题的根源(但这似乎是另一个错误消息)

否则,您将需要执行更多调试,以尝试将问题隔离到此特定的repo、您与远程的连接或远程repo。一些想法:

  • 听起来你已经试过另一个主机了,但也许再试一个
  • 您能否将空存储库或不同的回购从您的计算机推送到远程
  • 您是否可以从另一台机器/网络(例如笔记本电脑和带有免费wifi的本地咖啡厅)访问您可以尝试推动目标回购或测试回购的其他机器/网络

  • 您可以尝试推送一组变更集。如果内存有问题,这将有所帮助。它还可能帮助您隔离导致问题的变更集。

    人们需要清楚地(并且最简单地)了解它,以便启动新的回购并按照公认的答案推送

    但是,如果您的服务器是ssh可访问的,另一个选择是在windows本地上使用putty创建一个快速反向隧道,这不需要更改防火墙

    在putty look for ssh>>tunnels中,它打开菜单,并为反向通道选择远程按钮

    或者在linux本地服务器上,例如:

    ssh -fnNTR <any port you want to forward to your remote>:localhost:<port for local hg serv> <and then here type what you would normally to ssh to your remote ssh sever>
    
    ssh-fnNTR:localhost:
    
    您现在已绕过防火墙,可以克隆


    我要补充的是,您可以通过将R更改为L(本地)并在ness时更改端口号来执行正常的前向隧道推送。Hg Mercurial可与secure shell协议一起使用。有两种路径变体:

    $ hg clone localrepo ssh://user@server.url:port/relative_remote_path
    $ hg clone localrepo ssh://user@server.url:port//absolute_remote_path
    

    我认为您应该在Mercurial用户邮件列表上与我们联系:mercurial@selenic.com--像这样的设置问题需要讨论,而不仅仅是一个简单的问题和答案。这是更好地利用您的时间和Mercurial社区的时间,其中只有一小部分试图跟上StackOverflow。在
    hg clone的情况下,也将设置默认别名。将此添加到第二个列表:
    echo“[path]default=http://example.net/my-repository">.hg/hgrc
    我之所以将此标记为正确答案,是因为已经提供了很多有用的信息。但是,我还没有找到解决我的特定问题的方法。很多人不知道您可以通过ssh发送隧道,而不仅仅是将其用于shell访问。