git init my-project
rem 进入目录
cd my-project
git remote add origin http://30.100.28.41:80/my-project.git
git config core.sparsecheckout true
rem(下面这句是灵魂,是核心,是光,是电,是唯一的神话)
编辑 .git/info/sparse-checkout(没有的话自己新建一个),然后编辑该文件,把你希望想要的文件夹添加在此文件。
或者用命令行:
echo /parent-dir/src/main/child-dir/ >> .git/info/sparse-checkout
echo /parent-dir/child-dir2/ >> .git/info/sparse-checkout
git fetch --depth 1 origin master
rem 上面语句会根据git整体仓库的大小来花费时间,越大,花费时间越长。
rem 如果git仓库日积月累变得很大,这个SCM的管理就是一个不良管理,
rem 它使得即使想检出一个子目录,也变得尤其的慢。
git checkout master
rem 以下非必须,只是查看结果
dir parent-dir\src\main\child-dir
dir parent-dir\child-dir2
ls parent-dir/src/main/child-dir
可以看出,git 检出子目录,是相当繁琐的,尤其是代码库体积很大的情况下。
而且,另外一个问题来了,我如果要维护一个多子目录的仓库,那么要有一个全目录的git拷贝检出。
当我只在一个目录下活动时,我又要单独检出这个目录。有2个,要做到互不干扰,则要再检出。假设1个父目录下N-1个目录)。则我机器上要有N个目录检出,才能维护正常。这很显然很麻烦、不自然,比svn麻烦多了。
git的整体仓库概念、分支比较特性,决定了它更适合做严肃的整体软件项目代码的开发,不适合做松散的、一般性的项目的子目录检出、权限管理,这个场景或许svn更合适。