对项目完成改动之后,需要进行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
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
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
echo "dir $2/design_in is not exist"
exit
fi
exclude="-X /home/qianjiang/work/env/stb225/devDiffExclude"
#diff不包含的内容
opt=""
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
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
}
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
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
grep diff.-X diffresult | awk '{print "func " $5" "$6}' >> checkin-sync
转载于:https://blog.51cto.com/jiangjqian/280265