23 cvs scripting command-line branch
我有一个遗留的CVS存储库,应该迁移到Perforce.
对于每个模块,我需要确定该模块中存在哪些分支.
我只想要一个分支名称列表,没有标签.出于脚本原因,它必须是命令行工具.
例如(假设有一个cvs-list-branches.sh脚本):
$ ./cvs-list-branches.sh module1
HEAD
dev_foobar
Release_1_2
Release_1_3
$
Run Code Online (Sandbox Code Playgroud)
小智 25
作为一个快速的黑客:)对于rlog也是如此.
cvs log -h | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u
Run Code Online (Sandbox Code Playgroud)
根据bdevay改进版本,隐藏不相关的输出并左对齐结果:
cvs log -h 2>&1 | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | awk '{print $1}' | sort -u
Run Code Online (Sandbox Code Playgroud)
Oli*_*sen 15
你可以简单地解析日志输出cvs log -h.对于每个文件,将有一个名为的部分Symbolic names :.其中列出的所有标签的修订号都包含零作为最后一位但是一位数是分支.例如:
$ 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 :
===============================================
Run Code Online (Sandbox Code Playgroud)
在这个例子Maintenance-BRANCH中显然是一个分支,因为它的修订号列为1.1.0 .2.这有时也称为魔术分支修订号.