在進行項目開發的時候,有時候會有這樣的需求那就是:我們只希望從Git倉庫里取指定的文件或者文件夾出來。在SVN里面,這非常容易實現,因為SVN基於文件方式存儲,而Git卻是基於元數據方式分布式存儲文件信息的,它會在每一次Clone的時候將所有信息都取回到本地,即相當於在你的機器上生成一個克隆版的版本庫。因此在Git1.7.0以前,這無法實現,但是幸運的是在Git1.7.0以后加入了Sparse Checkout模式,這使得Check Out指定文件或者文件夾成為可能。
具體實現如下:
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模式:
1 $git config core.sparsecheckout true
接下來你需要告訴Git哪些文件或者文件夾是你真正想Check Out的,你可以將它們作為一個列表保存在.git/info/sparse-checkout文件中。
例如:
1 $echo “libs” >> .git/info/sparse-checkout 2 $echo “apps/register.go” >> .git/info/sparse-checkout 3 $echo “resource/css” >> .git/info/sparse-checkout
最后,你只要以正常方式從你想要的分支中將你的項目拉下來就可以了:
1 $git pull origin master
具體您可以參考Git的Sparse checkout文檔: http://schacon.github.io/git/git-read-tree.html#_sparse_checkout
一個完整的例子:
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
參考資料:
1. http://blog.csdn.net/linlzk/article/details/49019787
2. http://www.cnblogs.com/xilifeng/p/5225666.html