代码之家  ›  专栏  ›  技术社区  ›  umar

脚本来生成连续提交之间的差异,并将它们写入文件

  •  0
  • umar  · 技术社区  · 14 年前

    svn diff -r 3000:3025 > daychanges.diff
    

    我想修改这个命令,以便它在连续提交之间生成差异,将它们连接起来并输出到文件,比如

    svn diff -r 3000:3001 > daychanges.diff
    svn diff -r 3001:3002 >> daychanges.diff
    svn diff -r 3002:3003 >> daychanges.diff
    ...
    svn diff -r 3019:3020 >> daychanges.diff
    

    我怎么能写这样的剧本呢?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Amber    14 年前

    for bash中的循环:

    http://www.cyberciti.biz/tips/how-to-generating-print-range-sequence-of-numbers.html

    svn diff 在一系列的提交中。

    在单行命令中,可以从CLI运行:

    for ((start=3000,finish=3001; finish<=3025; start++,finish++)); do svn diff -r $start:$finish; done > out.file
    

    或者如果你喜欢,短一点的版本,

    for ((i=3000; i<3025; i++)); do svn diff -r $i:$(($i + 1)); done > out.file
    

    在多行脚本中:

    #!/bin/bash
    $begin=$1
    $end=$2
    $outfile=$3
    
    for ((start=$begin,finish=$begin+1; finish <= $end; start++,finish++))
    do
        svn diff -r $start:$finish
    done > $outfile
    

    (省略 > $outfile 如果您只想手动指导脚本的输出。)

        2
  •  1
  •   Community agent420    9 年前

    应该是这样的:

    diffs.sh :

    #!/bin/bash
    first=$(($1 + 1))
    last=${2}
    for a in `seq $first $last`; do
        svn diff -r $(($a - 1)):$a
    done > daychanges.diff
    

    然后:

    ./diffs.sh 3000 3020
    
        3
  •  0
  •   Rondo    10 年前

    #!/bin/bash
    unset last;
    for r in `svn log $1|grep '^r'|awk '{print$1}'|sed -e 's/r//g'|sort`;do 
        if [ ! -v last ]; then 
            last=$r;
            continue; 
        fi;
        echo ------------------------;
        echo diff  $last:$r ; 
        echo ------------------------; 
        svn diff -r$last:$r;last=$r;
    done>diffs