如何识别CVS中存在哪些分支?

时间:2009-02-19 16:27:10

标签: command-line scripting cvs branch

我有一个遗留的CVS存储库,应该迁移到Perforce。

对于每个模块,我需要确定该模块中存在哪些分支。

我只想要一个分支名称列表,没有标签。 出于脚本原因,它必须是命令行工具。

例如(假设有一个cvs-list-branches.sh脚本):

$ ./cvs-list-branches.sh module1
HEAD
dev_foobar
Release_1_2
Release_1_3
$

6 个答案:

答案 0 :(得分:25)

快速破解:) rlog也是如此。

cvs log -h | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u

根据bdevay改进版本,隐藏不相关的输出并左对齐结果:

cvs log -h 2>&1 | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | awk '{print $1}' | sort -u

答案 1 :(得分:15)

您只需解析cvs log -h的日志输出即可。对于每个文件,将有一个名为Symbolic names :的部分。其中列出的所有标签的修订号都包含零作为最后一位但是一位数是分​​支。 E.g:

$ cvs log -h

Rcs file : '/cvsroot/Module/File.pas,v'
Working file : 'File.pas'
Head revision : 1.1
Branch revision : 
Locks : strict
Access :
Symbolic names :
    1.1 : 'Release-1-0'
    1.1.2.4 : 'Release-1-1'
    1.1.0.2 : 'Maintenance-BRANCH'
Keyword substitution : 'kv'
Total revisions : 5
Selected revisions : 0
Description :

===============================================

在此示例中,Maintenance-BRANCH显然是一个分支,因为其修订号列为1.1。 0 .2。这有时也称为 magic 分支修订号。

答案 2 :(得分:4)

这也会带来标签,但CVS中的标签和分支基本相同。

$cvs.exe rlog -h -l -b module1

答案 3 :(得分:0)

使用Wincvs(Windows的Gui客户端)这是微不足道的,右键单击将为您提供文件所具有的任何分支和标记。

通过shell,您可以使用cvs log -h -l module。

答案 4 :(得分:0)

我有一小部分“方便”的korn shell函数,其中一个函数为给定文件提取标签。我已经做了很快的尝试,让它适应你想做的事情。它只是对(r)日志输出进行一些调整/ greping,并列出具有“.0”的版本。在它们中(表示它是分支标记):

get_branch_tags()
{
    typeset FILE_PATH=$1

    TEMP_TAGS_INFO=/tmp/cvsinfo$$

    /usr/local/bin/cvs rlog $FILE_PATH 1>${TEMP_TAGS_INFO} 2>/dev/null

    TEMPTAGS=`sed -n '/symbolic names:/,/keyword substitution:/p' ${TEMP_TAGS_INFO} | grep "\.0\." | cut -d: -f1 | awk '{print $1}'`
    TAGS=`echo $TEMPTAGS | tr ' ' '/'`
    echo ${TAGS:-NONE}
    rm -Rf $TEMP_TAGS_INFO 2>/dev/null 1>&2
}

答案 5 :(得分:0)

检查在存储库中创建并提交的第一个文件。在服务器中打开文件,该文件将同时列出所有标记和分支