如何将专用Mercurial存储库移动到中央服务器?

如何将专用Mercurial存储库移动到中央服务器?,mercurial,repository,bitbucket,hgrc,Mercurial,Repository,Bitbucket,Hgrc,我刚开始接触Mercurial,我读过Joel Spolsky的书,我很喜欢 我想知道:假设我有一个私人存储库,我在上面工作了大约一个月。然后我决定我想把它集中起来或者公开,比如说。我想保留所有的历史 直观的做法是使用,但根据文档: 源的位置将添加到 新存储库的.hg/hgrc文件,如下所示 将来使用的默认值 拉 我不认为这是我想要的,因为源是我的本地私有存储库,目标是公共服务器。我不希望公共服务器将来试图从我的私有存储库中提取,认为它是中心存储库。我希望这是有道理的 我必须手动调整服务器上的.

我刚开始接触Mercurial,我读过Joel Spolsky的书,我很喜欢

我想知道:假设我有一个私人存储库,我在上面工作了大约一个月。然后我决定我想把它集中起来或者公开,比如说。我想保留所有的历史

直观的做法是使用,但根据文档:

源的位置将添加到 新存储库的.hg/hgrc文件,如下所示 将来使用的默认值 拉

我不认为这是我想要的,因为源是我的本地私有存储库,目标是公共服务器。我不希望公共服务器将来试图从我的私有存储库中提取,认为它是中心存储库。我希望这是有道理的

我必须手动调整服务器上的.hg/hgrc文件吗?我的做法正确吗?

说,这就像在BitBucket上进行空回购一样简单,然后推动它:

。。。通过“创建存储库”页面创建新的空存储库。我们假设该存储库名为blonk,可以在上找到

现在,只需推动它:

  $ cd ~/Work/blonk # our existing hg repository
  $ hg push http://bitbucket.org/jespern/blonk
  ...
完成了

您可以在存储库中编辑.hg/hgrc以包含Bitbucket的默认路径:

  $ cat .hg/hgrc
  [paths]
  default = http://bitbucket.org/jespern/blonk
现在您只需输入hgpush和hgpull,而无需指定完整的URL


如前所述,使用“hg push”执行此操作可能是完成此操作的最佳方式

然而,在其他情况下,注意到所有的Hg状态都包含在.Hg目录中可能是方便的,或者是令人放心的,因此只要移动这个目录就足以移动存储库

例如,如果您对example.com上的计算机具有ssh访问权限,则可以在“private”存储库中对.hg目录进行tar(或压缩),将其解压缩到远程计算机上的
~/repo/foo
(从而在那里创建一个目录
~/repo/foo/.hg
),然后简单地克隆此目录:

$ hg clone ssh://example.com/repo/foo

我同意,这确实有点后门的感觉。然而,这里并没有真正的秘密发生,也不需要编辑配置文件。当我这样做的时候,我发现它没有“正确”的方式那么令人困惑。

Ned有你的答案,但是FWIW如果你的目的地是ssh://URL,你可以使用clone在别处创建一个新的存储库。如果您通过http://与服务器对话,则需要在服务器上“hginit”,然后从本地“hgpush”。将源设置为拉取的默认值在推送克隆上基本上是不相关的,因为您可能永远不会“拉”那个远程repo——只会推送到它。如果您发现自己在使用远程回购,您可以在.hgrc.Excellent points的[path]部分更改默认值-谢谢,Ry4an。我明白你所说的服务器上默认拉取位置的无关性。