将Mercurial存储库克隆到非空目录中
tl;博士强>将Mercurial存储库克隆到非空目录中,mercurial,web-deployment,Mercurial,Web Deployment,tl;博士 hg克隆ssh://hg@如果~/prod/不为空,则bitbucket.org/team/repo~/prod/将失败并显示“目的地不为空”。我可以强制克隆吗 我正在尝试编写我的第一本Ansible playbook,它应该将我的代码从Bitbucket Mercurial存储库部署到我的服务器上。有一个部署路径,~/prod,它包含所有代码文件以及~/prod/media和~/prod/db.db中的数据。为了确保即使~/prod目录为空或不存在,playbook也能正常工作,我
hg克隆ssh://hg@如果~/prod/不为空,则bitbucket.org/team/repo~/prod/
将失败并显示“目的地不为空”。我可以强制克隆吗
我正在尝试编写我的第一本Ansible playbook,它应该将我的代码从Bitbucket Mercurial存储库部署到我的服务器上。有一个部署路径,~/prod
,它包含所有代码文件以及~/prod/media
和~/prod/db.db
中的数据。为了确保即使~/prod
目录为空或不存在,playbook也能正常工作,我目前所做的是:
- name: create directory
file: path=/home/user/prod state=directory
- name: clone repo
hg:
repo: ssh://hg@bitbucket.org/team/repo
dest: /home/user/prod
force: yes
据我所知,它确保部署目录存在,然后在那里克隆repo。如果目录不存在或是空的,它工作得很好。然而,一旦我克隆了一次repo,这个剧本就会失败,因为目的地不为空
我可以先将媒体和db.db移出,然后删除所有其他文件,然后克隆,再将数据移回。但它看起来很笨重
我只是想强迫克隆。但是我找不到办法。想必这是非常错误的,Mercurial不允许我这样做。为什么,还有什么更好的方法呢?尽管我还没有在任何地方读过它,但强制克隆似乎是不可能的。然后,如中关于相同主题的说明,这两个备选方案是:
- 实际上,将.hg文件夹克隆到另一个目录,然后将其移动到目标目录
- 或者,
hgint/home/user/prod
然后hg pullssh://hg@org/team/repo/home/user/prod;hg update-C-R/home/user/prod
对于第二个,可以优化Ansible任务,仅在目标目录不包含.hg时执行此操作:
- name: recreate repo
command:
hg ssh://hg@bitbucket.org/team/repo -R /home/user/prod
creates=/home/user/prod/.hg # <-- only execute command if .hg does not exist
- name: update files
hg:
repo: ssh://hg@bitbucket.org/team/repo
dest: /home/user/prod
clone: no
update: yes # optional, for readability
force: yes
notify: "restart web services"
-名称:重新创建回购
命令:
汞ssh://hg@bitbucket.org/team/repo-R/home/user/prod
creates=/home/user/prod/.hg#可能是@ngoldbaum的副本,谢谢,我已经看到了这个线程,但是在提供选项时,它没有回答这样的克隆是否可行的问题。我想不是。