# gitRepo

gitRepo卷的生命周期与Pod的生命周期一致。

gitRepo卷通过克隆Git仓库中的内容至卷中，再将卷挂载至容器中。

**缺点**：当仓库中有更新时，gitRepo卷中的内容并不会被自动同步，需要手动同步。

gitRepo卷在使用时的情况如下：

![gitRepo从Git仓库中拉取数据并挂载至Pod中的容器的文件系统中](https://2906552408-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M6Ub8CloS5kJszh6xSR%2Fsync%2F821cf4cd99b52d22801ddc4226761c8901bf7a5f.png?generation=1588594614531709\&alt=media)

## 创建gitRepo卷

gitRepo卷的定义和挂载分为下面两步：

1. 定义卷：在Pod的`spec.volumes`中定义卷，并且在`spec.volumes.gitRepo`中定义该卷相关的配置；
2. 挂载卷：在Pod的`spec.containers.volumeMounts`中指定挂载点和挂载的卷名；

下面举一个例子，创建一个名为`gitrepo-volume-pod`的Pod，其在内部的名为`web-server`的容器在`/usr/share/nginx/html`下挂载一个名为`html`的gitRepo卷，该卷中的内容是从`https://github.com/yangsijie666/kubia-website-example.git`仓库中克隆下来，分支为`master`，并且克隆到该卷的根目录：

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: gitrepo-volume-pod
spec:
  containers:
  - image: nginx:alpine
    name: web-server
    volumeMounts:    # 定义挂载点
    - name: html    # （必须） 挂载的卷名
      mountPath: /usr/share/nginx/html    # （必须）容器中的挂载点
      readOnly: true    # 对该卷只允许读
    ports:
    - containerPort: 80
      protocol: TCP
  volumes:    # 定义卷
  - name: html    # （必须）卷名
    gitRepo:    # 创建的是gitRepo卷
      repository: https://github.com/yangsijie666/kubia-website-example.git    # （必须）仓库地址
      revision: master    # 分支名
      directory: .    # 克隆到卷的根目录
```
