在进行项目开发的时候,有时候会有这样的需求那就是:咱们只但愿从Git仓库里取指定的文件或者文件夹出来。在SVN里面,这很是容易实现,由于SVN基于文件方式存储,而Git倒是基于元数据方式分布式存储文件信息的,它会在每一次Clone的时候将全部信息都取回到本地,即至关于在你的机器上生成一个克隆版的版本库。所以在Git1.7.0之前,这没法实现,可是幸运的是在Git1.7.0之后加入了Sparse Checkout模式,这使得Check Out指定文件或者文件夹成为可能。css
具体实现以下:html
1 $mkdir project_folder 2 $cd project_folder 3 $git init 4 $git remote add -f origin <url>
上面的代码会帮助你建立一个空的本地仓库,同时将远程Git Server URL加入到Git Config文件中。
接下来,咱们在Config中容许使用Sparse Checkout模式:git
1 $git config core.sparsecheckout true
接下来你须要告诉Git哪些文件或者文件夹是你真正想Check Out的,你能够将它们做为一个列表保存在.git/info/sparse-checkout文件中。
例如:github
1 $echo “libs” >> .git/info/sparse-checkout 2 $echo “apps/register.go” >> .git/info/sparse-checkout 3 $echo “resource/css” >> .git/info/sparse-checkout
最后,你只要以正常方式从你想要的分支中将你的项目拉下来就能够了:flask
1 $git pull origin master
具体您能够参考Git的Sparse checkout文档: http://schacon.github.io/git/git-read-tree.html#_sparse_checkoutapp
一个完整的例子:分布式
1 #目标,获取https://github.com/pallets/flask.git开源项目的examples/flaskr文件见内容作测试 2 mkdir gitSparse 3 cd gitSparse/ 4 git init 5 git remote add -f origin https://github.com/pallets/flask.git 6 ls 7 git config core.sparsecheckout true 8 echo "examples/flaskr" >> .git/info/sparse-checkout 9 cat ./.git/info/sparse-checkout 10 git pull origin master
参考资料:测试