注:无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

shell脚本:利用7z备份git项目的更多相关文章

  1. Shell脚本,自动化发布tomcat项目【转载】

    Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...

  2. Shell脚本,自动化发布tomcat项目【转】

    Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...

  3. 使用shell脚本定时执行备份mysql数据库

    使用shell脚本定时执行备份mysql数据库 #!/bin/bash ############### common file ################ #本机备份文件存放目录 MYSQLBA ...

  4. Centos上通过shell脚本实现数据库备份和还原

    最近有个这样的需求,通过shell脚本实现数据库备份还原,最后通过网上查询自己测试实现,将脚本分享给大家 1.数据库备份脚本 #!/bin/bash ds=`` list=`date +%Y`/`da ...

  5. 用shell脚本实现定时备份数据库

    1.备份数据库的方法 可以使用命令查看 ls  /usr/local/mysql/bin 这个mysqldump就是系统内置的用来备份数据库的工具. 2.实现方法 ①先随便进入一个位置创建一个目录 ② ...

  6. shell脚本每天自动备份mysql数据库

    一.mysql提供了一个mysqldump的工具可以方便的导出导入数据库信息: 二.使用命令行shell测试执行mysqldump,理解必备的参数,查看生成的sql备份文件是否符合需求: /usr/b ...

  7. 写一个shell脚本利用wget抓取股票历史数据

    今天,大数据部老大交给我一项任务——抓取股票历史数据.于是乎,我自行在网上找了一下,发现wget真真是一个非常强大的linux下载工具.我已经被深深震撼到了.下面叙述今天的一些过程,还是比较坎坷的. ...

  8. shell脚本实现定时备份某文件

    1:目标       实现在图像化界面输入需要备份的源文件路径.目标路径,定时的时间.然后通过输入的信息,把需要备份的源文件打包放到指定的目标路径下以执行定时任务的时间为子目录       把/she ...

  9. JAVA调用shell脚本利用ansible修改多节点上的redis参数

    创建hosts文件 创建ansible-playbook执行时所用到的hosts文件,例如 /etc/redis/hosts 利用shell命令根据传入的host名和地址写入hosts文件: #set ...

随机推荐

  1. 2015-02-08——js笔记

    示例1: 关于事件对象 MSIE:window.event,  cancelBubble,  returnValue,  srcElement, button(鼠标按键,1,4,2,左中右) W3C: ...

  2. 前端基础-html(2)

    一.字体标签 字体标签包含:h1~h6.<font>.<u>.<b>.<strong>.<em>.<sup>.<sub&g ...

  3. windows下redis的安装和启动

    Rides: //cmd管理员进入 // 运行 : redis-cli.exe //报错  :Redis (error) NOAUTH Authentication required.解决方法 // ...

  4. 理解spring中的BeanFactory和FactoryBean的区别与联系

    原文地址:http://blog.csdn.net/joenqc/article/details/66479154 首先,这俩都是个接口… 实现 BeanFactory 接口的类表明此类事一个工厂,作 ...

  5. hadoop学习第七天-HBase的原理、安装、shell命令

    一. hbase的原理知识 1. hbase介绍 hbase是hadoop的一个重要成员,主要用于存储结构化数据,构建在hdfs之上的分布式存储系统,它主要通过横向扩展,通用不断增加廉价服务器增加计算 ...

  6. Hub,bridge,switch and router的区别

    首先说HUB,也就是集线器.它的作用可以简单的理解为将一些机器连接起来组成一个局域网.而交换机(又名交换式集线器)作用与集线器大体相同.但是两者在性能上有区别:集线器采用的式共享带宽的工作方式,而交换 ...

  7. Shell Script Notes

    shell Script学习笔记 <鸟哥的Linux私房菜 3rd Edition>: @1:若变量内容中包含空格字符,则可使用双引号"或单引号'将变量内容结合起来,但不同的是: ...

  8. Python基础(18)_面向对象程序设计2(反射、__str__、__del__、__item__系列)

    一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object) ...

  9. Centos 常用系统命令

    一.查看系统硬件信息: 1.CPU # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 c ...

  10. Python 1 数据类型的操作

    一.数字(Number) 1.数学函数: 函数 返回值 ( 描述 ) abs(x) 返回数字的绝对值,如abs(-10) 返回 10 ceil(x) 返回数字的上入整数,如math.ceil(4.1) ...