# git仓库从30G压缩到600M-git文档仓库过大的优化方案

项目上使用git管理相关文档，因维护多年，导致其文档仓库已经逼近30G的大小，对于我这台256G的MBP来说，无疑是占用了巨大的空间，介于此，我计划减少这个仓库的体积。

## git-lfs

[git-lfs](https://git-lfs.github.com/)是[atlassian](https://www.atlassian.com/git/tutorials/git-lfs)维护的开源项目，意图解决因反复修改大文件而导致git仓库变大，以及影响初次下载的体验；

在我尝试使用git-lfs后，占用空间被压缩到了24G左右，但效果并不明显，这主要是因为这个git仓库中的大部分文档都不存在反复修改的情况，大部分文件都是上传后再也没有改过。

可以说git-lfs解决了我一部分的问题，但并没有全部解决。

## GVFS

GVFS是微软的开源项目，意图解决git对于超大型仓库的维护问题，但很可惜，GVFS依赖于window操作系统，我手上主力机还是macOS，所以GVFS就不考虑了。

## git sparse checkout

[sparse checkout](https://git-scm.com/docs/git-sparse-checkout)是git自己维护的功能，其提供的功能是告诉git相关的命令再拉取时仅拉取部分文件，或排除掉部分文件。

很现实，sparse checkout就是解决我这个问题的最佳方案

### 使用方法

1. 新建仓库并设置远端仓库地址
    

```shell
git init
git remote add -f origin <url>
```

1. 开启配置
    

```plaintext
git config core.sparsecheckout true
```

1. 配置想要拉取的文件路径
    

```shell
xxx/xxx/**
```

或者是不想要拉取的文件路径

```shell
!yyy/**
```

然后正常使用`git pull`拉取即可

> 1. 注意使用较新版本的git；
>     
> 2. 使用方法也可以参考\[官网链接\](git config core.sparsecheckout true)
>     

# 结论

最终我使用的是`git-lfs`搭配`git parse checkout`搭配使用，一方面降低大文件重复修改所产生的占用，一方面只需要拉取我自己需要的文件到本地即可。

这样操作以后，原30G的git仓库，我现在只需要600M就可以了～
