AccuRev:你如何列出托管文件?

时间:2014-04-09 22:32:00

标签: accurev

我需要查看在两个流之间添加或删除了哪些文件。最明显的方式是" git lsfiles"在每个流中。除了这不是GIT,我没有看到类似的命令。所以今天:

for f in $(find * -type f);do
    accurev stat "$f"
done | \
    fgrep -v '(external)' | \
    awk '{print $1}' > .list

如果有更好的方法,那么应该清楚易懂:

http://www.accurev.com/download/docs/5.7.0_books/AccuRev_5_7_User_CLI.pdf

但事实并非如此。救命?谢谢。

3 个答案:

答案 0 :(得分:0)

如果要查看两个流之间的差异,请运行以下命令:accurev diff -a -v“Stream1”-V“Stream2”

答案 1 :(得分:0)

由于已经回答了命令行问题,以下是如何通过AccuRev GUI执行相同的操作。

  1. 选择一个动态流,工作区或快照。
  2. 右键单击并选择"按文件显示差异"
  3. 选择其他动态流,工作区或快照。

    您将看到两个选项之间不同的文件列表,是的,您可以在动态流,工作区和快照之间进行混合匹配。

    然后,您可以选择任何文件并选择"显示差异"看两个文件之间的差异。

答案 2 :(得分:0)

由于这两个答案都没有解决这个问题,我最终制定了一个脚本来完成真正需要的工作。 " accurev lsfiles"非常需要。

#! /bin/bash

declare -r progpid=$$
declare -r progdir=$(cd $(dirname $0) >/dev/null && pwd)
declare -r prog=$(basename $0)
declare -r program="$progdir/$prog"
declare -r usage_text=' [ <directory> ... ]
If no directory is specified, "." is assumed'

die() {
    echo "$prog error:  $*"
    exec 1>/dev/null 2>&1
    kill -9 $progpid
    exit 1
} 1>&2

usage() {
    test $# -gt 0 && {
        exec 1>&2
        echo "$prog usage error:  $*"
    }
    printf "USAGE:  $prog %s\n" "$usage_text"
    exit $#
}

init() {
    shift_ct=$#
    tmpd=$(mktemp -d ${TMPDIR:-/tmp}/ls-XXXXXX)
    test -d "$tmpd" || die "mktemp -d does not work"
    exec 4> ${tmpd}/files
    trap "rm -rf '$tmpd'" EXIT
    prune_pat=

    while :
    do
        test $# -eq 0 && break
        test -f "$1" && break
        [[ "$1" =~ -.* ]] || break
        case "X$1" in
            X-p )
                prune_pat+="${2}|"
                shift 2 || usage "missing arg for '-p' option"
                ;;

            X-p* )
                prune_pat+="${1#-p}"
                shift
                ;;

            X-x* )
                set -x
                tput reset 1>&2
                PS4='>${FUNCNAME:-lsf}> '
                shift
                ;;

            X-* )
                usage "unknown option:  $1"
                ;;

            * )
                break
                ;;
        esac
    done

    (( shift_ct -= $# ))
    test ${#prune_pat} -gt 0 && \
        prune_pat='(^|/)('${prune_pat%|}')$'
}

chkdir() {
    declare list=$(exec 2> /dev/null
        for f in "$@"
        do ls -d ${f}/* ${f}/.*
        done | \
            grep -v -E '.*/\.\.*$' )

    for f in $(accurev stat ${list} | \
        grep -v -F '(external)' | \
        awk '{print $1}' | \
        sed 's@^/*\./@@')
    do
        test ${#prune_pat} -gt 0 && [[ $f =~ ${prune_pat} ]] && continue

        if test -d "$f"
        then chkdir "$f"
        elif test -f "$f" -o -L "$f"
        then echo "$f" 1>&4
        fi
    done
}

init ${1+"$@"}
(( shift_ct > 0 )) && shift ${shift_ct}
test $# -eq 0 && set -- .
chkdir "$@"
exec 4>&-
sort -u ${tmpd}/files

它有点过分,但我总是使用样板来制作脚本。