当前位置:   article > 正文

git pull 某一个文件或文件夹_git只pull某一个文件夹或者文件

git只pull某一个文件夹或者文件
QQ: 2967732156
背景:

在使用Oracle VM VirtualBox,进行Linux开发时,随着使用内存越来越少,空间已不足拉取整个代码库。

Ubuntu1604内存够,Ubuntu18.04内存不够。

思路:

第一步:从问题本身出发,先能满足编译需要。

方法1,手动从Ubuntu16.04上拉取最新代码,删掉不需要的文件,仅保留Ubuntu18.04需要,然后一次scp

方法2,从Ubuntu16.04上拉取最新代码,在Ubuntu18.04,多次scp所需文件

第二步:考虑自动化脚本。

方法1:从Ubuntu16.04上拉取最新代码,Ubuntu18.04上编写脚本一次执行,传输所需文件

方法2:打个疑问“git 能不能实现文件或文件夹的拉取,而且只拉取最新的?” 查阅资料,整理解决方案并验证

方法:
  1. 建立一个空的git 本地仓库:
  2. $ git init new.project && cd new.project
  3. 在本地仓库里面启用sparse-checkout:
  4. $ git config core.sparseCheckout true
  5. 设定你要checkout 哪些文件夹(如/xxx/*表示xxx文件夹下所有文件)(也可以用vim直接打开 .git/info/sparse-checkout写入)
  6. $ echo '/xxx/*' >> .git/info/sparse-checkout
  7. 设定remote (要从哪里clone/pull?):
  8. $ git remote add origin git://github.com/xxx/xxx.git
  9. 然后就可以开始pull 了(这边可以加上后面说的shallow pull,加上–depth=n
  10. $ git pull origin master
整理:

命令行方式

  1. git init project && cd project
  2. git config core.sparseCheckout true
  3. git remote add origin ssh://neal.shen@XXX.XXX.XXX.XXX:XXXXXX/SDK/SDK.git
  4. echo '/complieLinux.sh' >> .git/info/sparse-checkout
  5. echo '/sources/include/*' >> .git/info/sparse-checkout
  6. echo '/sources/config/*' >> .git/info/sparse-checkout
  7. echo '/sources/json/*' >> .git/info/sparse-checkout
  8. echo '/sources/log/*' >> .git/info/sparse-checkout
  9. echo '/sources/sensor/*' >> .git/info/sparse-checkout
  10. echo '/sources/platforms/*' >> .git/info/sparse-checkout
  11. echo '/sources/src/*' >> .git/info/sparse-checkout
  12. echo '/sources/3rdparty/libjpeg-turbo-2.0.2/*' >> .git/info/sparse-checkout
  13. echo '/sources/3rdparty/opencv/bulid/include_3.4.16/*' >> .git/info/sparse-checkout
  14. echo '/sources/3rdparty/opencv/bulid/x64/ubuntu18.04/lib_3416/*' >> .git/info/sparse-checkout
  15. echo '/sources/3rdparty/algorithm/PC_ImgPreProc/ImgPreProcess/*' >> .git/info/sparse-checkout
  16. echo '/sources/3rdparty/algorithm/imgpreproc/include/*' >> .git/info/sparse-checkout
  17. 录取全部记录
  18. git pull origin v3
  19. 只拉取最近一次的变更,忽略以前的变更记录,在拉取时可以加参数depth
  20. git pull --depth=1 origin v3

sparse-checkout文件内容:

  1. /complieLinux.sh
  2. /sources/include/*
  3. /sources/config/*
  4. /sources/json/*
  5. /sources/sensor/*
  6. /sources/platforms/*
  7. /sources/3rdparty/libjpeg-turbo-2.0.2/*
  8. /sources/3rdparty/opencv/bulid/include_3.4.16/*
  9. /sources/3rdparty/opencv/bulid/x64/ubuntu18.04/lib_3416/*
  10. /sources/3rdparty/algorithm/PC_ImgPreProc/ImgPreProcess/*
  11. /sources/3rdparty/algorithm/imgpreproc/include/*

优化:

使用python编写build.py

  1. # coding:utf-8
  2. ########################################################################
  3. # File Name: build.py
  4. # Purpose: git 拉取单个文件或特定文件夹
  5. # Usage: python build.py
  6. # Author: Neal
  7. # Mail: 2967732156@qq.com
  8. # Created Time: 2023
  9. ########################################################################
  10. #import 引入模块  相当于inclued + 导入外部库吧
  11. #os 模块提供了非常丰富的方法用来处理文件和目录
  12. import os
  13. print ('start')
  14. def gitpull():
  15.    
  16.     os.system('git init project')
  17.     os.chdir('project')
  18.  
  19.     os.system('git config core.sparseCheckout true')
  20.     os.system('git remote add origin
  21. ssh://neal.shen@XXX.XXX.XXX.XXX:XXXXXX/SDK/SDK.git ')
  22.     os.system('echo /complieLinux.sh >> .git/info/sparse-checkout')
  23.     os.system('echo /sources/include/* >> .git/info/sparse-checkout')
  24.     os.system('echo /sources/config/* >> .git/info/sparse-checkout')
  25.     os.system('echo /sources/json/* >> .git/info/sparse-checkout')
  26.     os.system('echo /sources/log/* >> .git/info/sparse-checkout')
  27.     os.system('echo /sources/sensor/* >> .git/info/sparse-checkout')
  28.     os.system('echo /sources/platforms/* >> .git/info/sparse-checkout')
  29.     os.system('echo /sources/src/* >> .git/info/sparse-checkout')
  30.     os.system('echo /sources/3rdparty/libjpeg-turbo-2.0.2/* >> .git/info/sparse-checkout')
  31.     os.system('echo /sources/3rdparty/opencv/bulid/include_3.4.16/* >> .git/info/sparse-checkout')
  32.     os.system('echo /sources/3rdparty/opencv/bulid/x64/ubuntu18.04/lib_3416/* >> .git/info/sparse-checkout')
  33.     os.system('echo /sources/3rdparty/algorithm/PC_ImgPreProc/ImgPreProcess/* >> .git/info/sparse-checkout')
  34.     os.system('echo /sources/3rdparty/algorithm/imgpreproc/include/* >> .git/info/sparse-checkout')
  35.     os.system('git pull --depth=1 origin v3')
  36. gitpull()
  37. print ('end')
补充知识点:

python os.system("cd 目录") 不起效

使用os提供的os.chdir(‘目录’)

总结:

Ubuntu18.04已验证OK

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/898159
推荐阅读
相关标签
  

闽ICP备14008679号