注:无git的方法参见:tar 或 7z 备份项目

首先利用homebrew安装p7zip

$ brew install p7zip

然后利用两个shell脚本:

  • backupProject.sh 会在指定的项目文件夹中找到所有.git目录,对其git gc压缩,然后用7za创建两个7z文件:

    • PROJECTDIR.2016-03-15-12-00-00.Src.7z
    • PROJECTDIR.2016-03-15-12-00-00.gitpack.7z
  • restoreProject.sh 会将上述两个文件用7za解压到目录:
    • PROJECTDIR.2016-03-15-12-00-00.output

准备:

  1. 准备工作:首先用文本编辑工具打开 backupProject.sh 文件,修改项目名称 projPath=PROJECTDIR 和压缩密码 password=Demo 然后打开 restoreProject.sh 文件,修改解压缩密码 password=Demo
  2. 给两个 sh 脚本可执行权限:
    chmod +x backupProject.sh restoreProject.sh
  3. 两个脚本与项目文件夹 PROJECTDIR 在同级目录

使用:

  1. 备份:

    ./backupProject.sh
  2. 还原:
    ./restoreProject PROJECTDIR.-----.Src.7z

例子:

$ ls
PROJECTDIR backupProject.sh restoreProject.sh // 备份
$ ./backupProject.sh
Ready...
git gc: PROJECTDIR/.git
Nothing new to pack.
git gc: PROJECTDIR/frameworks/.git
...
git gc: PROJECTDIR/library/.git
...
git gc: PROJECTDIR/Universal/.git
...
Backuping(/): PROJECTDIR.-----.Src.7z
...
Backuping(/): PROJECTDIR.-----.gitpack.7z
...
Done. $ ls
PROJECTDIR
PROJECTDIR.-----.Src.7z
PROJECTDIR.-----.gitpack.7z
backupProject.sh
restoreProject.sh // 恢复
$ ./restoreProject.sh PROJECTDIR.-----.Src.7z
Ready...
Extracting PROJECTDIR.-----.Src.7z...
...
Extracting PROJECTDIR.-----.gitpack.7z...
...
Output Dir: PROJECTDIR.-----.output
Done. $ ls
PROJECTDIR
PROJECTDIR.-----.Src.7z
PROJECTDIR.-----.output
PROJECTDIR.-----.gitpack.7z
backupProject.sh
restoreProject.sh
$ ls PROJECTDIR.-----.output/
PROJECTDIR
$

脚本源码如下:

backupProject.sh

 #!/bin/sh
projPath=PROJECTDIR
password=Demo
## level=,,,,, Level is no compression, is normal, is Ultra.
level=
## gitgc=, is not gc, is git gc
gitgc=
now=`date +%Y-%m-%d-%H-%M-%S`
output=$projPath.$now.Src.7z
output2=$projPath.$now.gitpack.7z function printMsg() {
echo "\033[1;34m$1\033[0m"
} function printMsgNoColor() {
echo "\033[1;m$1\033[0m"
} ## start
printMsg "Ready..."
for gitdir in `find $projPath -iname ".git"`; do
if [[ $gitgc -eq ]]; then
printMsg "git gc: $gitdir"
git -C $gitdir/.. gc
else
printMsgNoColor "$gitdir"
fi
pack="$gitdir/objects/pack/"
xrdirs="$xrdirs -xr!$pack"
packs="$packs $pack"
done
printMsg "Backuping(1/2): $output"
7za a -t7z -mx=$level $output "$projPath/" -scsUTF- -p$password $xrdirs
printMsg "Backuping(2/2): $output2"
7za a -t7z -mx= $output2 $packs -scsUTF- -p$password
printMsg "Done."

restoreProject.sh

 #!/bin/sh
password=Demo function printError() {
echo "FAIL!"
echo "SAMPLE1: $0 xxxxxxxx.Src.7z"
echo "SAMPLE2: $0 xxxxxxxx.gitpack.7z"
} function printMsg() {
echo "\033[1;34m$1\033[0m"
} ## start
printMsg "Ready..."
if [[ -a $ ]]; then
if [[ $ == *.Src.7z ]]; then
file1=$
file2=`echo $|sed -n "s/\.Src\.7z/\.gitpack\.7z/p"`
elif [[ $ == *.gitpack.7z ]]; then
file1=`echo $|sed -n "s/\.gitpack\.7z/\.Src\.7z/p"`
file2=$
else
printError
exit
fi output=`echo $file1|sed -n "s/\.Src\.7z/.output/p"`
if [[ -a $file1 ]]; then
printMsg "Extracting $file1..."
7za x -aoa -y $file1 -o$output -p$password
fi
if [[ -a $file2 ]]; then
printMsg "Extracting $file2..."
7za x -aoa -y $file2 -o$output -p$password
fi
printMsg "Output Dir: $output"
printMsg "Done."
else
printError
fi

下载:

https://github.com/m2nlight/backupProject

最新文章

  1. Url重写——伪静态实现
  2. No.005:Longest Palindromic Substring
  3. matlab初学之roundn和round
  4. BT5 & Kali Linux 网卡选择
  5. springmvc中实现quartz定时任务
  6. Windows下查看进程及结束进程命令[转]
  7. 转:C#中String类的几个方法(IndexOf、LastIndexOf、Substring)
  8. jackson 转json. 过滤null值
  9. 201521123089 《Java程序设计》第8周学习总结
  10. LeetCode 110. Balanced Binary Tree (平衡二叉树)
  11. cs231n spring 2017 lecture14 Reinforcement Learning 听课笔记
  12. Java注解(一):介绍,作用,思想及优点
  13. Swagger2 添加HTTP head参数
  14. Eclipse External Tool Configration Notepad++
  15. SpringBoot 定时任务不能同时运行的问题
  16. ubuntu下修改网卡名称
  17. 【Java】 剑指offer(15) 数值的整数次方
  18. 【拓扑排序】BZOJ4010-[HNOI2015]菜肴制作
  19. switch语句语法
  20. Unity加载二进制数据

热门文章

  1. 我的Android进阶之旅------>Android使用cmd窗口进行adb logcat时出现中文乱码问题的解决办法
  2. postman 编码加密汇总
  3. HDFS权限管理指南(HDFS Permissions Guide)
  4. 【生产问题】-dbcc checkdb报错-数据页故障
  5. 0405-服务注册与发现-客户端负载均衡-Ribbon 同Eureka使用,Ribbon脱离Eureka使用
  6. BDC程序步骤
  7. Java CLASSPATH
  8. cookie、Session工作原理
  9. arcgis for flex map遮罩
  10. 获取本地IP并设置到QLineEdit中