• 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 啦!
    
    
    
  • 相关阅读:
    Redis(二)
    Redis
    Nginx
    Linux的环境配置
    深入mysql
    SpringBoot入门
    Thymeleaf入门
    Mybatis之resultMap
    Mybatis入门
    使用第三方实现微信登录
  • 原文地址:https://www.cnblogs.com/juking/p/7223669.html
Copyright © 2020-2023  润新知