TL;博士;
hg clone ssh://hg@bitbucket.org/team/repo ~/prod/
失败,"目的地不为空"如果〜/ 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。如果目录不存在或为空,它可以很好地工作。但是,只要我克隆了一次回购,这个剧本就会以destination is not empty
失败。
我可以先移动media和db.db,然后删除所有其他文件,然后克隆,然后再移回数据。但它看起来很麻烦。
我只想强迫克隆。但我找不到办法。据推测,这是错误的,Mercurial不允许我这样做。为什么以及什么是更好的方式?
答案 0 :(得分:2)
虽然我还没有在任何地方阅读过,但看起来强制克隆是不可能的。然后是两个备选方案,如another thread中关于相同主题的解释:
hg init /home/user/prod
然后hg pull ssh://hg@bitbucket.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"