2010-09-01 99 views
13

我有一个客户端的Dj​​ango项目,我在本地开发,使用Mercurial进行版本控制。我将本地存储库推送到我的个人远程服务器(我保留了所有项目),然后当我部署它时(无论哪个Web服务器),我都从我的个人服务器上克隆那个存储库。如何将Mercurial存储库克隆到已存在的目录中?

这对大多数服务器(我有完全控制)正常工作,但我有几个项目,我部署到WebFaction。 WebFaction非常棒,但它的设置有点不寻常,因为我需要首先通过控制面板将Django项目声明为“应用程序”。这会自动创建一些内容,如'apache2','myproject'等文件夹。这是同一个文件夹,虽然我想从我的个人远程服务器克隆存储库。执行通常的hg clone命令并不能正常工作,因为它说目标文件夹已经存在。关于这个文件夹的内容真的没什么我可以做的,所以我需要解决这个问题。

我不是Mercurial的专家,我似乎可以解决这个问题的唯一方法是将其克隆到另一个文件夹,然后将所有内容(包括.hg)移动到我想要的实际文件夹中。这似乎很愚蠢,虽然...

我正在使用Mercurial v1.6.2(通过easy_install安装)。任何人都可以分享一些这样的灯光?

非常感谢。

+0

你不是唯一一个碰到过这个功能的人:http://mercurial.selenic.com/bts/issue1462 – msw 2010-09-01 21:53:27

回答

1

主要看起来您可能会尝试使用Mercurial作为安装管理器,这当然不是其设计目标。

如果我正确地阅读了你,你的部分源代码库应该是类似于make deploy这样的文件将它们放到适当的位置。换句话说,在你的部署目录中拥有一个存储库克隆(在.hg)似乎很奇怪并且容易出错。

+1

其实,很多人都这样做,它的效果非常好。通常情况下,我们会向具有'changegroupq钩子'的生产服务器'push',它会自动执行'update'。在堆栈溢出中有很多问题,推荐使用这种设置。使用'生产'标签或类似的东西作为自动更新的目标非常灵活。 – 2010-09-02 10:53:57

+0

@ Ry4an:这里至少有一个反驳论点,它提出了我关心的相同问题。这不是“正确的”,但它是我搜索出现的唯一相关的一个,我很乐意看到另一方的代表。如果你使用的是一个提交钩子,那么它似乎必须有一个隐含的“安装”脚本,它只是由hg触发的。我从来没有做过直接部署,所以我想知道我错过了什么“船”。 http://stackoverflow.com/questions/2361708/using-hg-repository-as-web-site – msw 2010-09-02 11:35:20

+0

再次看我的项目后,我必须同意msw。我在这里过于复杂的事情,似乎我应该只是版本控制我的实际Django项目文件夹,而不是它的东西。在这种情况下,这是有道理的。谢谢。 – littlejim84 2010-09-03 22:11:26

10

您只能复制.hg文件夹,然后恢复或更新为提示。例如:

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

你可以在事实之后移动文件夹,或者你可以只是建立一个符号链接。我的webfaction目录实际上是符号链接的,所以我知道它工作正常。

21

只复制.hg目录可以正常工作,但你也可以做一个hg init然后hg pull http://remote/repo。刚刚初始化的回购仅有000000000000000变更集,因此您可以从任何回购中撤回,而不会收到“无关回购”警告。这与使用手动初始化的hg clone --pull基本相同。

+2

谢谢!你教我一个非常好的hg提示:-) +1 – 2015-03-10 14:51:03

+0

我不得不在'拉升后'更新hg。我用一个特定的修订版“-r X”来拉 – juanmirocks 2016-08-15 08:11:03

相关问题