您的位置:首页 > 其它

一个简单的项目版本管理脚本

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐