问题描述
在进行项目开发的时候,有时候会有这样的需求那就是:我们只希望从Git仓库里取指定的文件或者文件夹出来。在SVN里面,这非常容易实现,因为SVN基于文件方式存储,而Git却是基于元数据方式分布式存储文件信息的,它会在每一次Clone的时候将所有信息都取回到本地,即相当于在你的机器上生成一个克隆版的版本库。
因此在Git1.7.0以前,这无法实现,但是幸运的是在Git1.7.0以后加入了Sparse Checkout模式,这使得Check Out指定文件或者文件夹成为可能。
具体实现如下
- 安装git打开git-bash
- 指定远程仓库; git remote add -f origin https://github.com/xxxx.git
- 指定克隆模式: 稀疏克隆模式;git config core.sparsecheckout true
- 指定克隆的部分文件或者文件夹;echo “此处填写要克隆地址xxxx下的文件或文件夹” >> .git/info/sparse-checkout
- 拉取远程文件;git pull origin master
//栗子:一个拉取 phpdemo 项目下的 html 目录
cd d:
mkdir gitmulu
cd gitmulu
git init
git remote add -f origin https://github.com/xxxx/phpdemo.git
git config core.sparsecheckout true
//想要拉取其中多个文件或目录,接着写这条命令,改一下拉取文件名称
echo "html" >> .git/info/sparse-checkout
//这个是查看 稀疏克隆下的允许克隆的目录或文件
cat ./.git/info/sparse-checkout
git pull origin master
补充
- 如果不想稀松克隆了;执行以下命令
git config core.sparsecheckout false
rm -rf .git/info/sparse-checkout
- 如果git remote add 命令写错了可以删除源; git remote rm origin