将 Mercurial 存储库克隆到非空目录中
Clone a Mercurial repository into a non-empty directory
tl;博士;
如果 ~/prod/ 不为空,hg clone ssh://hg@bitbucket.org/team/repo ~/prod/
失败并显示 "destination is not empty"。我可以强制克隆吗?
我正在尝试编写我的第一个 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://hg@bitbucket.org/team/repo
dest: /home/user/prod
force: yes
根据我的理解,它确保部署目录存在,然后将存储库克隆到那里。如果目录不存在或为空,它会很好地工作。然而,一旦我克隆了一次回购协议,这个剧本就失败了 destination is not empty
.
我可以先将媒体和 db.db 移出,然后删除所有其他文件,然后克隆,然后再将数据移回。但是看起来很麻烦。
我只是想强行克隆。但我找不到办法做到这一点。大概这是错误的,Mercurial 不允许我这样做。为什么以及更好的方法是什么?
虽然我还没有在任何地方读过它,但看起来强制克隆是不可能的。如 another thread 中关于相同主题的解释,这两个备选方案是:
- 的确,将.hg文件夹克隆到另一个目录,然后将其移动到目标目录
- 或
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"
tl;博士;
如果 ~/prod/ 不为空,hg clone ssh://hg@bitbucket.org/team/repo ~/prod/
失败并显示 "destination is not empty"。我可以强制克隆吗?
我正在尝试编写我的第一个 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://hg@bitbucket.org/team/repo
dest: /home/user/prod
force: yes
根据我的理解,它确保部署目录存在,然后将存储库克隆到那里。如果目录不存在或为空,它会很好地工作。然而,一旦我克隆了一次回购协议,这个剧本就失败了 destination is not empty
.
我可以先将媒体和 db.db 移出,然后删除所有其他文件,然后克隆,然后再将数据移回。但是看起来很麻烦。
我只是想强行克隆。但我找不到办法做到这一点。大概这是错误的,Mercurial 不允许我这样做。为什么以及更好的方法是什么?
虽然我还没有在任何地方读过它,但看起来强制克隆是不可能的。如 another thread 中关于相同主题的解释,这两个备选方案是:
- 的确,将.hg文件夹克隆到另一个目录,然后将其移动到目标目录
- 或
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"