【问题标题】:Clone Mercurial repository into public_html将 Mercurial 存储库克隆到 public_html
【发布时间】:2012-06-18 21:47:53
【问题描述】:

我想将 Mercurial 存储库克隆到我的 Web 服务器上的 /public_html 文件夹中。我的 Mercurial 项目看起来像这样......

- /ProjectName
    - /public
    - /application
    - /config
    - /library

我想要的只是将“ProjectName”的内容放入我的 /public_html 文件夹。不幸的是,克隆存储库包括“ProjectName”,并且所有子文件夹都在其中。

知道如何在没有符号链接的情况下完成此操作吗?

【问题讨论】:

  • hg clone http://repo/address . ?

标签: mercurial clone


【解决方案1】:

只是把它放在那里,你可能不希望在你的 public_html 中完全克隆,除非你真的想要网络上曾经存在的每个版本。这本身并没有什么问题,但是由于您将在public_html 中拥有.hg,因此人们甚至可以从中克隆您的存储库。

请考虑使用hg archive 命令导出所有文件,因为它们存在于特定修订版中,并将它们放置在您想要的任何位置。

例如:

cd your_clone
hg archive --rev release /public_html

这会将release 标签(可能是标签、书签或分支头)指向的代码放入/public_html 中,但不是完整历史克隆。

【讨论】:

  • 这是一个非常酷的解决方案。所以我只是在我服务器上的其他地方克隆 repo,然后在我需要更新生产文件的任何时候运行该归档命令?
  • archive 不会删除已删除的文件,因此要绝对确保您只有最新的文件,您通常会删除 public_html 的内容,然后运行该命令,但只需在现有的目录也几乎可以工作。如果您希望停机时间接近于零,您可以存档到 public_html_new,然后使用“mv”来交换它而不是旧的 public_html 目录。这样所有的脚本都会非常整齐。
【解决方案2】:

我实际上找到了一个简单的方法来做到这一点。

hg clone https://me@bitbucket.org/me/ProjectName "/home/website/public_html"

public_html 必须为空才能将存储库克隆到其中,因此我将所有内容移出,克隆了存储库,然后将预先存在的文件和文件夹移回。

【讨论】:

  • 这里的缺点是您每次都克隆所有内容。最好先做一次,然后再pushpull
  • 我只做了一次来克隆存储库。我使用 pull 来获取最新版本。
【解决方案3】:

这是您可以遵循的简单步骤:

cd /public_html
hg init .
hg pull ../pathto/ProjectName/

这将在public_html 中提取ProjectName 下的所有文件和文件夹,而不创建/public_html/ProjectName

但它仍会将 mercurial 存储库中的所有资源(文件和文件夹)复制到您的目录中。

【讨论】:

  • 另外值得一提的是,与clone 相比,这种方法不会将default 存储库添加到.hg/hgrc
  • 如果您这样做,您还必须注意配置您的网络服务器以拒绝访问 .hg/ 文件夹,否则任何人都可以克隆您网站的存储库。