2017-08-03 109 views
1

tl; dr; hg clone ssh://[email protected]/team/repo ~/prod/如果〜/ prod /不为空,将失败并显示“目标不为空”。我可以强制克隆吗?将Mercurial存储库克隆到非空目录中

我想写我的第一个Ansible剧本,应该将我的代码从Bitbucket Mercurial存储库部署到我的服务器。有一个部署路径~/prod,其中包含所有代码文件以及~/prod/media~/prod/db.db中的数据。为了确保如果~/prod目录为空或不存在的剧本,甚至工作,这是我到目前为止有:

- name: create directory 
    file: path=/home/user/prod state=directory 
- name: clone repo 
    hg: 
    repo: ssh://[email protected]/team/repo 
    dest: /home/user/prod 
    force: yes 

在我的理解,它确保部署目录存在,然后克隆回购那里。如果该目录不存在或为空,它会很好地工作。但是,一旦我克隆了回购一次,这个剧本以destination is not empty失败。

我可以先移动媒体和db.db,然后删除所有其他文件,然后克隆然后移回数据。但看起来很麻烦。

我只是想强制克隆。但我找不到办法。据推测,这是错误的,Mercurial不会允许我这样做。为什么和什么是更好的方式去?

+0

的可能的复制[如何克隆Mercurial存储库到一个已经存在的目录?](https://stackoverflow.com/questions/3622374/how-do-clone-a-mercurial-repository-into-a-directory-that-already-exists) – ngoldbaum

+0

@ngoldbaum ,谢谢,我已经看到了该线程,但在提供选项时,并没有回答这样的问题,如果这样的克隆是可能的。我会认为它不是。 – texnic

回答

1

虽然我还没有读到任何地方,看起来像克隆力量是不可能的。这两种选择都是那么,作为同一话题another thread解释说:

  • 的确,克隆.hg文件夹到另一个目录,然后将其移动到目标目录
  • hg init /home/user/prod然后hg pull ssh://[email protected]/team/repo /home/user/prod; hg update -C -R /home/user/prod

有了第二个,可以优化Ansible任务,只有在目标目录中不包含.hg执行此操作:

- name: recreate repo 
    command: 
    hg ssh://[email protected]/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://[email protected]/team/repo 
    dest: /home/user/prod 
    clone: no 
    update: yes     # optional, for readability 
    force: yes 
    notify: "restart web services" 
相关问题