我有一个遗留的 CVS 存储库,应该迁移到 Perforce。
对于每个模块,我需要确定该模块中存在哪些分支。
我只想要一个分支名称列表,没有标签。出于脚本原因,它必须是命令行工具。
例如(假设有一个 cvs-list-branches.sh 脚本):
$ ./cvs-list-branches.sh module1
HEAD
dev_foobar
Release_1_2
Release_1_3
$
我有一个遗留的 CVS 存储库,应该迁移到 Perforce。
对于每个模块,我需要确定该模块中存在哪些分支。
我只想要一个分支名称列表,没有标签。出于脚本原因,它必须是命令行工具。
例如(假设有一个 cvs-list-branches.sh 脚本):
$ ./cvs-list-branches.sh module1
HEAD
dev_foobar
Release_1_2
Release_1_3
$
作为一个快速破解:) 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
您可以简单地解析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 :
===============================================
在这个例子Maintenance-BRANCH
中显然是一个分支,因为它的修订号被列为 1.1。0 .2。这有时也称为魔术分支修订号。
这也会调出标签,但标签和分支在 CVS 中基本相同。
$cvs.exe rlog -h -l -b module1
我有一小部分“方便”的 korn shell 函数集合,其中一个函数获取给定文件的标签。我做了一个快速的尝试来调整它来做你想做的事。它只是对 (r) 日志输出进行一些 seding/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
}
使用 Wincvs(Windows 的 GUI 客户端)这很简单,右键单击将为您提供文件具有的任何分支和标签。
通过 shell,您可以使用 cvs log -h -l 模块。
检查存储库中创建和提交的第一个文件。在服务器中打开文件,该文件将列出所有标签和分支