Django 如何将Mercurial存储库克隆到已存在的目录中?

Django 如何将Mercurial存储库克隆到已存在的目录中?,django,version-control,mercurial,ssh,Django,Version Control,Mercurial,Ssh,我有一个客户的Django项目,我正在本地开发,使用Mercurial进行版本控制。我将本地存储库推送到我的个人远程服务器(保存我所有的项目),然后当我部署它时(在任何一个web服务器上),我从我的个人服务器上克隆该存储库 这在大多数服务器上都能很好地工作(我可以完全控制这些服务器),但我有几个项目要部署到WebFaction上。Web派系很棒,但它的设置有点不寻常,因为我需要首先通过控制面板将Django项目声明为“应用程序”。这会自动创建一些东西,例如“apache2”、“myproject

我有一个客户的Django项目,我正在本地开发,使用Mercurial进行版本控制。我将本地存储库推送到我的个人远程服务器(保存我所有的项目),然后当我部署它时(在任何一个web服务器上),我从我的个人服务器上克隆该存储库

这在大多数服务器上都能很好地工作(我可以完全控制这些服务器),但我有几个项目要部署到WebFaction上。Web派系很棒,但它的设置有点不寻常,因为我需要首先通过控制面板将Django项目声明为“应用程序”。这会自动创建一些东西,例如“apache2”、“myproject”等文件夹。这是同一个文件夹,我想从我的个人远程服务器克隆存储库。但执行通常的hgclone命令并不起作用,因为它表示目标文件夹已经存在。对于这个文件夹的内容我真的无能为力,所以我需要解决这个问题

我不是Mercurial的专家,我唯一能解决这个问题的方法是将它克隆到另一个文件夹,然后将所有内容(包括.hg)移动到我想要的实际文件夹中。这看起来很傻

我正在使用Mercurial v1.6.2(通过easy_安装安装)。有人能分享一些关于这方面的信息吗


非常感谢。

您可以只复制
.hg
文件夹,然后还原或更新到tip。例如:

cp -a src/.hg dest/
cd dest
hg up -C

总的来说,您可能会尝试将Mercurial用作安装管理器,这当然不是它的设计目标


如果我没有看错的话,那么源代码存储库的一部分应该类似于
makedeploy
,它将文件放在适当的位置。换句话说,在部署目录中有一个存储库克隆(在
.hg
中)似乎很奇怪,而且容易出问题。

您可以在事后移动文件夹,也可以只对其进行符号链接。我的Web派系目录实际上是符号链接的,所以我知道它可以正常工作

只复制.hg dir肯定有效,但是您也可以执行
hginit
然后
hg pullhttp://remote/repo
。刚初始化的回购只有000000000000000变更集,因此您可以从任何回购中提取,而不会得到“无关回购”警告。这本质上与hg clone相同——通过手动初始化拉取。

你不是唯一一个碰到mercurial这个特性的人:事实上,很多人都这么做,而且效果非常好。通常,用户会将
推送到生产服务器,该服务器具有执行自动更新的
changegroupq钩子。在stack overflow中有很多问题,建议使用这种设置。使用“生产”标记或类似标记作为自动更新的目标非常巧妙。@Ry4an:这里至少有一个反论点指出了我所关心的相同问题。它不是“正确的”,但它是我搜索到的唯一相关的一个,我希望看到另一边的代表。如果您使用的是提交钩子,那么似乎必须有一个隐式的“安装”脚本,它刚刚从hg触发。我从来没有直接部署过,所以我想知道我错过了什么“船”。在再次审视我的项目后,我必须同意msw。我把这里的事情复杂化了,似乎我应该只是版本控制我的实际Django项目文件夹,而不是它周围的东西。在这种情况下,这是有道理的。谢谢。我不知道这是怎么回答这个问题的。我在尝试为mercurial创建一个自动构建时遇到了同样的问题,因为我非常简单的单文件签出构建脚本希望已经存在于克隆目标中,而不是必须为一个脚本文件创建一个文件夹,所有其他文件都在一个子文件夹中。拉取后,我必须
hg update
。我拉了一个特定的修订
-rx
这是辉煌!但我必须承认,我有点惊讶克隆上没有忽略额外文件的
--force
选项。