# repostack pull

> 

根据 `repostack.yaml` 的定义，clone 本地缺失的 repo。

```bash
repostack pull
```

## 执行流程

<steps level="4">

#### **加载配置**- 读取 `repostack.yaml` 和 `.repostackrc`（如果启用了用户配置）。





#### **遍历 repos**- 对 `config.repos` 中的每一个 repo：

  - 计算目标路径：`join(root, repo.path)`。
  - 如果目标路径**已存在**（无论是否为空、是否为 Git 仓库），直接跳过。
  - 如果目标路径**不存在**，执行 `git clone <source> <destination>`。





</steps>

## 涉及文件

| 文件               | 操作                 |
| ---------------- | ------------------ |
| `repostack.yaml` | 读取                 |
| `.repostackrc`   | 读取（如启用用户）          |
| `<repo.path>` 目录 | 创建（通过 `git clone`） |

## Git 操作

- `git clone <source> <destination>`（仅针对缺失目录）

## 错误与边界情况

- 如果 `repostack.yaml` 中定义了 `users` 但当前未选择用户，命令立即中断。
- `git clone` 失败（网络问题、无效 source 等）会直接抛出异常。
- **已存在的目录不做任何验证**：即使里面是一个空文件夹或错误的仓库，也会直接跳过。

## 适用场景

- 新成员首次设置开发环境
- 恢复缺失的 repo

## 示例

```bash
repostack pull
```
