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

时间:2010-12-30 08:19:17

标签: mercurial clone dvcs hgserve

我有一个本地仓库,我现在决定推送到远程服务器(例如,我有一台主机,让善变的仓库,我也试图推到到位桶)。存储库有很多文件,有点超过200mb。在本地,我能够毫无问题地克隆存储库。

现在我在这个存储库中有很多变化,我浪费了几天时间试图找出如何让远程服务器克隆我的存储库。我不能让hg serve在LAN外工作。我尝试了一切。因此,我在远程服务器(主机和bitbucket)上创建了一个新的存储库,其中没有任何内容。现在我将本地的完整存储库推送到这些远程位置。到目前为止它一直没有成功,因为推送操作停留在searching for changes并且没有给我任何其他有用的输出。我已经放了大约一个小时没有变化。

现在我的问题是,就hg serve而言,我做错了什么?我可以在本地但不能访问远程(通过DynDNS的 - 我已经正确配置它和路由器正确转发端口),这样我可以让服务器克隆库后的第一时间,我会推动它。我的第二个问题是,假设在服务器克隆不工作(例如,如果我是把我的当前存储库到位桶),是创建在服务器上一个空仓库,然后推动本地库到新的远程仓库好吗?这是searching for changes问题的来源吗?

非常感谢这方面的任何帮助。

5 个答案:

答案 0 :(得分:4)

  

就hg发球而言,我做错了什么?

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

  

在服务器上创建一个空存储库,然后将本地存储库推送到新的远程存储库ok?

是。这就是我在Kiln创建远程克隆的方法。在Kiln创建一个新的空仓库,获取新存储库的URL,然后从我的计算机上推送它。

  

这是搜索更改问题的来源吗?

不确定,但是this report表明真正的大推动可能是一个问题。他们建议推进较小的卡盘(例如一次几转)。另一个考虑因素是你是否可以没有你的修订历史(你是否可以从当前版本的文件创建一个新的仓库并推送该存储库。报告还建议认证是一些问题的根源(但似乎是一个不同的错误信息)。

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

  1. 听起来你已经尝试了不同的主机,但也许再试一次?
  2. 您可以将空存储库或其他存储库从您的计算机推送到遥控器吗?
  3. 您是否可以从机器/网络(例如笔记本电脑和带免费wifi的本地咖啡馆)访问另一个,您可以尝试推送目标回购或测试回购?

答案 1 :(得分:2)

是的,您可以毫无问题地推送到空的存储库。当您推或拉时,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的评论,了解如何操作。

答案 2 :(得分:1)

人们需要了解它(并且最简单)只是为了启动一个新的回购并按照接受的答案推动它。

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

在putty中寻找ssh>>将菜单隧道化,然后选择远程按钮进行反向隧道。

或者在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>

您现在已绕过防火墙并可以克隆!

我应该补充一下,你可以做一个正常的前向隧道,只需将R改为L(本地)并改变端口号即可。

答案 3 :(得分:1)

Hg Mercurial可以与安全shell协议一起使用。有两种路径变体:

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

答案 4 :(得分:0)

您可以尝试推送一组更改集。如果内存是个问题,这将有所帮助。它也可以帮助您找出导致问题的变更集。