对项目完成改动之后,需要进行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