将Mercurial存储库移动到另一个服务器

tim*_*mmy 3 mercurial

我们有一个项目,存在于一个mercurial存储库中.

我们的客户希望通过执行以下操作来获取代码库的所有权:

  1. 在属于客户的服务器上设置mercurial存储库.
  2. 将现有代码导入新的mercurial存储库.

实现第2步的最佳方法是什么?

执行以下操作是一件简单的事情:

  1. 克隆现有的mercurial存储库:

    hg clone <existing mercurial repo URL>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将克隆的存储库推送到新存储库中:

    hg push <new mercurial repo URL>
    
    Run Code Online (Sandbox Code Playgroud)

我错过了任何步骤吗?怎么样的hgrc文件?在将项目推送到新存储库之前是否必须以任何方式进行修改?

ica*_*bod 7

是的,你可以做你所说的,但是值得注意的是,如果你做一个简单hg clone的主存储库,那么两者之间将存在一个链接,这可能不是你想要的.您可以通过编辑.hg/hgrc文件并删除default = ...[paths]部分中的项目来删除此链接.

我发现更好的方法是在没有克隆的情况下做到这一点.这样,您就没有存储库之间的链接,因为这可能是您想要的客户.

基本方法是设置一个没有变更集的新存储库,然后以三种方式之一引入所有变更集:

  1. 将更改从存储库推送到新存储库.
  2. 将更改从旧存储库中拉入新存储库.
  3. 如果您无权访问新存储库,请创建可以提供给客户的捆绑包 - 然后可以将其拆分或拉入空仓库.

按照通常的方式完成推送和拉取,但指定存储库位置:

// create the empty repository
hg init .
// pull in everything from the old repo
hg pull /projects/myOriginalRepo
Run Code Online (Sandbox Code Playgroud)

还是推......

// create the empty repository
hg init /projects/myNewRepo
cd /projects/myOriginalRepo
hg push /projects/myNewRepo
Run Code Online (Sandbox Code Playgroud)

创建一个捆绑包可能是一种更好的方式,因为你可以将捆绑包写到DVD上,然后用一张漂亮的贺卡将它包裹在你的客户手中:

cd /projects/myOriginalRepo
hg bundle --all ../repo.bundle
Run Code Online (Sandbox Code Playgroud)

所有内容都写入单个文件,然后可以使用hg unbundle repo.bundle或提取hg pull repo.bundle到没有现有更改集的存储库中.

关于hgrc文件,如另一个答案中已经提到的,它不是受控文件,因此不会被复制.但是,任何内容都可能是钩子,以执行自动构建,或在应用之前验证更改集.这个逻辑可能只对你自己的组织有意义,我建议你不要强加给你的客户 - 毕竟,他们是你的代码库的所有权,并且可能拥有自己的代码库适合这种情况的系统.