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 能不能實現文件或文件夾的拉取,而且只拉取最新的?” 查閱資料,整理解決方案并驗證
方法:
建立一個空的git 本地倉庫:
$ git init new.project && cd new.project在本地倉庫里面啟用sparse-checkout:
$ git config core.sparseCheckout true設定你要checkout 哪些文件夾(如/xxx/*表示xxx文件夾下所有文件)(也可以用vim直接打開 .git/info/sparse-checkout寫入)
$ echo '/xxx/*' >> .git/info/sparse-checkout設定remote (要從哪里clone/pull?):
$ git remote add origin git://github.com/xxx/xxx.git然后就可以開始pull 了(這邊可以加上后面說的shallow pull,加上–depth=n
$ git pull origin master
整理:
命令行方式
git init project && cd project
git config core.sparseCheckout true
git remote add origin ssh://neal.shen@XXX.XXX.XXX.XXX:XXXXXX/SDK/SDK.git
echo '/complieLinux.sh' >> .git/info/sparse-checkout
echo '/sources/include/*' >> .git/info/sparse-checkout
echo '/sources/config/*' >> .git/info/sparse-checkout
echo '/sources/json/*' >> .git/info/sparse-checkout
echo '/sources/log/*' >> .git/info/sparse-checkout
echo '/sources/sensor/*' >> .git/info/sparse-checkout
echo '/sources/platforms/*' >> .git/info/sparse-checkout
echo '/sources/src/*' >> .git/info/sparse-checkout
echo '/sources/3rdparty/libjpeg-turbo-2.0.2/*' >> .git/info/sparse-checkout
echo '/sources/3rdparty/opencv/bulid/include_3.4.16/*' >> .git/info/sparse-checkout
echo '/sources/3rdparty/opencv/bulid/x64/ubuntu18.04/lib_3416/*' >> .git/info/sparse-checkout
echo '/sources/3rdparty/algorithm/PC_ImgPreProc/ImgPreProcess/*' >> .git/info/sparse-checkout
echo '/sources/3rdparty/algorithm/imgpreproc/include/*' >> .git/info/sparse-checkout錄取全部記錄
git pull origin v3只拉取最近一次的變更,忽略以前的變更記錄,在拉取時可以加參數depth
git pull --depth=1 origin v3
sparse-checkout文件內容:
/complieLinux.sh
/sources/include/*
/sources/config/*
/sources/json/*
/sources/sensor/*
/sources/platforms/*
/sources/3rdparty/libjpeg-turbo-2.0.2/*
/sources/3rdparty/opencv/bulid/include_3.4.16/*
/sources/3rdparty/opencv/bulid/x64/ubuntu18.04/lib_3416/*
/sources/3rdparty/algorithm/PC_ImgPreProc/ImgPreProcess/*
/sources/3rdparty/algorithm/imgpreproc/include/*
優化:
使用python編寫build.py
# coding:utf-8
########################################################################
# File Name: build.py
# Purpose: git 拉取單個文件或特定文件夾
# Usage: python build.py
# Author: Neal
# Mail: 2967732156@qq.com
# Created Time: 2023
#########################################################################import 引入模塊 ?相當于inclued + 導入外部庫吧
#os 模塊提供了非常豐富的方法用來處理文件和目錄
import os
print ('start')
def gitpull():os.system('git init project')os.chdir('project')os.system('git config core.sparseCheckout true')os.system('git remote add origin ssh://neal.shen@XXX.XXX.XXX.XXX:XXXXXX/SDK/SDK.git ')os.system('echo /complieLinux.sh >> .git/info/sparse-checkout')os.system('echo /sources/include/* >> .git/info/sparse-checkout')os.system('echo /sources/config/* >> .git/info/sparse-checkout')os.system('echo /sources/json/* >> .git/info/sparse-checkout')os.system('echo /sources/log/* >> .git/info/sparse-checkout')os.system('echo /sources/sensor/* >> .git/info/sparse-checkout')os.system('echo /sources/platforms/* >> .git/info/sparse-checkout')os.system('echo /sources/src/* >> .git/info/sparse-checkout')os.system('echo /sources/3rdparty/libjpeg-turbo-2.0.2/* >> .git/info/sparse-checkout')os.system('echo /sources/3rdparty/opencv/bulid/include_3.4.16/* >> .git/info/sparse-checkout')os.system('echo /sources/3rdparty/opencv/bulid/x64/ubuntu18.04/lib_3416/* >> .git/info/sparse-checkout')os.system('echo /sources/3rdparty/algorithm/PC_ImgPreProc/ImgPreProcess/* >> .git/info/sparse-checkout')os.system('echo /sources/3rdparty/algorithm/imgpreproc/include/* >> .git/info/sparse-checkout')os.system('git pull --depth=1 origin v3')
gitpull()
print ('end')
補充知識點:
python os.system("cd 目錄") 不起效
使用os提供的os.chdir(‘目錄’)
總結:
Ubuntu18.04已驗證OK