在 git 1.7 版本之前,你是没法只 checkout 版本库中的一个子文件夹出来的,现在已经可以实现了,主要通过新引进的 sparsecheck 这个功能做到的。Git 的这个功能其实还是会把远端服务器上的版本库上的内容都先同步到本地,然后只解压缩显示你想要的子文件夹出来。

在新库下同步

  1. 创建和初始化一个新版本库
    mkdir <repo> && cd <repo>
    git init
    git remote add –f <name> <url>
  2. 开启 sparse-checkout 功能
    git config core.sparsecheckout true
  3. 将要同步到本地的子文件夹名配置到 .git/info/sparse-chekcout 文件中
    echo some/dir/ >> .git/info/sparse-checkout
    echo another/sub/tree >> .git/info/sparse-checkout
  4. checkout
    git pull <remote> <branch>

在已有版本库下同步

如果你已经有一个版本库,那么前两步操作同上,第三步使用 read-tree 命令

  1. 开启 sparse-checkout 功能
    git config core.sparsecheckout true
  2. 将要同步到本地的子文件夹名配置到 .git/info/sparse-chekcout 文件中
    echo some/dir/ >> .git/info/sparse-checkout
    echo another/sub/tree >> .git/info/sparse-checkout
  3. 更新当前库
    git read-tree -mu HEAD

更换子文件夹到本地

如果想要更换同步到本地的子文件夹,只需要修改 sparse-check 文件并且如上重新执行 read-tree 命令。


本文主要参考这篇文章