ZZ:git只clone倉庫中指定子目錄和指定文件的實現


原文鏈接: http://blog.csdn.net/xuyaqun/article/details/49275477


git目前唯一不能實現的是:不能像svn那樣,針對子目錄設置權限,這與git分布式倉庫的運行機制有關,svn是基於文件方式的集中存儲,Git卻是基於元數據方式分布式存儲文件信息的,它會在每一次Clone的時候將所有信息都取回到本地,即相當於在你的機器上生成一個克隆版的版本庫,既然本地有了完整的版本庫,肯定就有所有權限了,所以也就沒辦法針對子目錄的進行權限控制了。

只拉取一個repository中的幾個子目錄的代碼,而非整個庫,從上文的說明中也能看出這是不能實現的,對,在git 1.7.0 之前是不能實現的,git認為如果這樣做的話,倉庫的數據一致性無法保證,即使你真的這樣做,完全可以把這些不相關聯的子目錄放到不同的repository,repository之間是彼此獨立的。

如果非要只clone repository中的幾個子目錄的話,那就用sparse clone,git從1.7.0開始支持,sparse clone也只是一個變通的方法:先拿到整個repository的object等元數據信息,然后在本地加一個叫.git/info/sparse-checkout的文件(即黑名單、白名單,支持正則,參見下文具體操作命令)來控制pull那些目錄和文件(類似.gitignore文件,都是本地的概念),變通的實現。

git的實現:基於sparse clone變通方法


## step 1 :初始化空庫
[root@vm_test backup]# mkdir devops
[root@vm_test backup]# cd devops/
[root@vm_test devops]# git init                  #初始化空庫

## step 2 :  拉取remote的all objects信息
[root@vm_test devops]# git remote add -f origin http://laijingli@192.168.1.1:90/scm/beeper/yunxxx_ops.git   #拉取remote的all objects信息


## step 3 :  #3.1 開啟sparse clone, #3.2 設置需要pull的目錄 devlops
[root@vm_test devops]# git config core.sparsecheckout true   #開啟sparse clone
[root@vm_test devops]# echo "devops" >> .git/info/sparse-checkout   #設置需要pull的目錄,*表示所有,!表示匹配相反的
[root@vm_test devops]# more .git/info/sparse-checkout

## step 4 :  # 將origin 端,由第三步(文件 .git/info/sparse-checkout)設置的 目錄下的文件 pull 到本地
[root@vm_test devops]# git pull origin master  

## OK 啦!



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM