一个简单的项目版本管理脚本
2010-03-03 16:12
267 查看
对项目完成改动之后,需要进行Check-in。
有很多软件可以完成这种事情,比如CM Synergy。
但是,对一些项目,只是在本地维护一个最新的版本。
我通常的做法是,拷贝该最新的版本到新的目录为工作目录。
也就是说,有两个目录。一个用于保存,一个用于工作。
每次在工作目录下修改调试后,需要check-in到用于保存的目录。
如果用工具如CM Synergy,时间相当长,而且要打开工具。如果用beyond compare,但是,那是Windows下的。Linux下不好用。
所以写了下面的脚本,命名为devDiffStb225.sh。
devDiffStb225.sh 工作目录 用于保存的目录
之后生成 diffresult和checkin-sync文件
运行checkin-sync文件,会列出被修改的文件,等待用于选择recover或者override。同时还会对覆盖前或recover之前的文件进行备份。(linux真的挺强大)
如果是新增或删除的文件,一般手动拷贝。量大的话也可以类似使用awk来生成shell脚本。
因为该文件牵扯到bash, diff, awk, sed等,所以有必要笔记一下。红色为注释
#!/bin/sh
if [ $# -ne 2 ]
then
echo "Usage: sh $0 fromDir toDir"
exit
fi
if [ ! -d $1/design_in ]; then #stb225相关
echo "dir $1/design_in is not exist"
exit
fi
if [ ! -d $2/design_in ]; then
echo "dir $2/design_in is not exist"
exit
fi
exclude="-X /home/qianjiang/work/env/stb225/devDiffExclude" #diff不包含的内容
opt=""
:>diffresult
diff $opt $exclude -r $1/design_in/Mico $2/design_in/Mico >> diffresult
diff $opt $exclude -r $1/reference_design/Cabot $2/reference_design/Cabot >> diffresult
diff $opt $exclude -r $1/stb225 $2/stb225 >> diffresult
:>checkin-sync
#生成check-sync脚本
echo '
#
func()
{
echo "$1 <=> $2"
echo "(o: override r: recover v: view diff n: nothing to do)"
while true; do
read opt
if [ $opt == "v" ]; then
diff $1 $2
continue;
fi
case $opt in
o)
#backup
filename=$(echo $2 | sed "s#/#-#g")
cp $2 $dir_overriden/$filename
#override
cp -f $1 $2
;;
r)
#backup
filename=$(echo $1 | sed "s#/#-#g")
cp $1 $dir_discard/$filename
#recover
cp -f $2 $1
;;
*)
;;
esac
break;
done
}
dir=~/diff-backup/$(date +%Y-%m-%d-%H-%M-%S)
dir_overriden=$dir/overriden
dir_discard=$dir/discard
mkdir -p $dir_overriden
mkdir -p $dir_discard
'>>checkin-sync
#把diff的文件调用func执行
grep diff.-X diffresult | awk '{print "func " $5" "$6}' >> checkin-sync
有很多软件可以完成这种事情,比如CM Synergy。
但是,对一些项目,只是在本地维护一个最新的版本。
我通常的做法是,拷贝该最新的版本到新的目录为工作目录。
也就是说,有两个目录。一个用于保存,一个用于工作。
每次在工作目录下修改调试后,需要check-in到用于保存的目录。
如果用工具如CM Synergy,时间相当长,而且要打开工具。如果用beyond compare,但是,那是Windows下的。Linux下不好用。
所以写了下面的脚本,命名为devDiffStb225.sh。
devDiffStb225.sh 工作目录 用于保存的目录
之后生成 diffresult和checkin-sync文件
运行checkin-sync文件,会列出被修改的文件,等待用于选择recover或者override。同时还会对覆盖前或recover之前的文件进行备份。(linux真的挺强大)
如果是新增或删除的文件,一般手动拷贝。量大的话也可以类似使用awk来生成shell脚本。
因为该文件牵扯到bash, diff, awk, sed等,所以有必要笔记一下。红色为注释
#!/bin/sh
if [ $# -ne 2 ]
then
echo "Usage: sh $0 fromDir toDir"
exit
fi
if [ ! -d $1/design_in ]; then #stb225相关
echo "dir $1/design_in is not exist"
exit
fi
if [ ! -d $2/design_in ]; then
echo "dir $2/design_in is not exist"
exit
fi
exclude="-X /home/qianjiang/work/env/stb225/devDiffExclude" #diff不包含的内容
opt=""
:>diffresult
diff $opt $exclude -r $1/design_in/Mico $2/design_in/Mico >> diffresult
diff $opt $exclude -r $1/reference_design/Cabot $2/reference_design/Cabot >> diffresult
diff $opt $exclude -r $1/stb225 $2/stb225 >> diffresult
:>checkin-sync
#生成check-sync脚本
echo '
#
func()
{
echo "$1 <=> $2"
echo "(o: override r: recover v: view diff n: nothing to do)"
while true; do
read opt
if [ $opt == "v" ]; then
diff $1 $2
continue;
fi
case $opt in
o)
#backup
filename=$(echo $2 | sed "s#/#-#g")
cp $2 $dir_overriden/$filename
#override
cp -f $1 $2
;;
r)
#backup
filename=$(echo $1 | sed "s#/#-#g")
cp $1 $dir_discard/$filename
#recover
cp -f $2 $1
;;
*)
;;
esac
break;
done
}
dir=~/diff-backup/$(date +%Y-%m-%d-%H-%M-%S)
dir_overriden=$dir/overriden
dir_discard=$dir/discard
mkdir -p $dir_overriden
mkdir -p $dir_discard
'>>checkin-sync
#把diff的文件调用func执行
grep diff.-X diffresult | awk '{print "func " $5" "$6}' >> checkin-sync
相关文章推荐
- 6/27 项目编码开始:一个简单的员工管理程序
- 用一个简单的perl包轻松管理脚本中的软件调用
- 问题 如何断开VS2012中与SVNServer的连接?让项目在SVN上重新建立一个版本管理。
- 分享高通平台刷版本简单的一个shell脚本
- 搭建一个简单的GIT版本管理 Gitolite 服务器
- Git本地项目上传,版本管理工具与GitHub的简单结合使用
- 多人共同使用一个github的仓库,实现版本管理,多人开发一个项目
- svn新建一个tag版本管理已经发布的项目应用版本
- 一个mysql数据库的脚本帮助dba简单的管理数据库信息
- Title: 搭建一个简单的GIT版本管理 Gitolite 服务器
- 通过JAVA编写一个简单的雇员管理系统小项目
- BASH 创建一个命令 f1 使之可以简单管理文件版本
- python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)
- 由于嵌入式项目版本较多不好管理,于是笔者写了一个“版本小助手”,和大家分享一下,附上程序
- JSPackager--- 一个简单、开放、无侵入的脚本管理框架
- 一个简单的 python 实现 图片同步脚本 ,对于有图片群集的项目有参考价值
- Django 一个简单的图书管理程序(一建立项目)
- 多人共同使用一个github的仓库,实现版本管理,多人开发一个项目
- 【小项目】实现一个简单的对象池,用来管理空间的申请和释放
- 以前做过的一个项目,就是电话薄管理的一个系统