无法将多个存储库签出到单个目录

时间:2014-09-12 11:16:26

标签: git ansible

以下是我试图运行的剧本。

---
- hosts: all
  sudo : true
  sudo_user : ganesh

  tasks:
  - name: git repo clone
    git: repo=https://ganesh:mypassword@github.com/myrepo/root-repo.git dest=/home/ganesh/rootrepo version=master recursive=no
    git: repo=https://ganesh:mypassword@github.com/myrepo/subrepo1.git dest=/home/ganesh/rootrepo/subrepo1 version=master recursive=no
    git: repo=https://ganesh:mypassword@github.com/myrepo/subrepo2.git dest=/home/ganesh/rootrepo/subrepo2 version=master recursive=no
    git: repo=https://ganesh:mypassword@github.com/myrepo/subrepo3.git dest=/home/ganesh/rootrepo/subrepo3 version=master recursive=no

我在运行此剧本后期待以下目录结构。

rootrepo
    - root repo contents
    - subrepo1
        - subrepo1 contents
    - subrepo2
        - subrepo2 contents
    - subrepo3
        - subrepo3 contents

但是在剧本之后只有一个回购,即 subrepo3 ,仍在 rootrepo 目录下执行。其他一切都被删除了。即使 rootrepo 内容也会被删除。

rootrepo
    - subrepo3
        - subrepo3 contents

为什么会这样?如何实现我期待的目录结构?

1 个答案:

答案 0 :(得分:2)

关于为什么它没有按照预期工作的解释是Ansible游戏被读作yaml文件和"任务"是一个词典列表。在您的情况下,您正在复制模块" git" (字典中的一个键)所以最后一个获胜。

要完全按照您的要求进行以下游戏

---
- hosts: all
  sudo : true
  sudo_user : ganesh

  tasks:
  - name: git repo clone
    git: repo=https://ganesh:mypassword@github.com/myrepo/root-repo.git dest=/home/ganesh/rootrepo version=master recursive=no
  - name: clone subrepos
    git: repo=https://ganesh:mypassword@github.com/myrepo/{{ item }}.git dest=/home/ganesh/rootrepo/{{ item }} version=master recursive=no
    with_items:
      - subrepo1
      - subrepo2
      - subrepo3

一般而言,在其他存储库中检出存储库并不是一个好主意。 您想要做的更有可能是将subrepo {1,2,3}添加为root-repo的子模块。

假设你已经提交了对你的root repo的访问权限克隆它然后运行。

git submodule add https://ganesh:mypassword@github.com/myrepo/subrepo1.git subrepo1
git submodule add https://ganesh:mypassword@github.com/myrepo/subrepo2.git subrepo2
git submodule add https://ganesh:mypassword@github.com/myrepo/subrepo3.git subrepo3

检查这些更改,然后在结帐时将你的游戏设置recursive = true指定为root-repo.git