Command line 如何识别CV中存在哪些分支?

Command line 如何识别CV中存在哪些分支?,command-line,scripting,cvs,branch,Command Line,Scripting,Cvs,Branch,我有一个遗留CVS存储库,该存储库将迁移到Perforce 对于每个模块,我需要确定该模块中存在哪些分支 我只想要一个分支名称的列表,没有标签。 出于编写脚本的原因,它必须是一个命令行工具 例如(假设存在cvs-list-BRACKS.sh脚本): 这也会显示标记,但在CVS中标记和分支基本相同 $cvs.exe rlog -h -l -b module1 对于Wincvs(Gui client for windows),这很简单,右键单击将显示文件的任何分支和标记 通过shell,您可以使用

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

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

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

例如(假设存在cvs-list-BRACKS.sh脚本):


这也会显示标记,但在CVS中标记和分支基本相同

$cvs.exe rlog -h -l -b module1
对于Wincvs(Gui client for windows),这很简单,右键单击将显示文件的任何分支和标记


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

您可以简单地解析
cvs log-h
的日志输出。每个文件都有一个名为
符号名:
的部分。此处列出的所有标签的修订号均为分支,其最后一位数字为零。例如:

$ 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 :

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

在本例中,
维护分支机构
显然是一个分支机构,因为其修订号列为1.1。0.2。这有时也被称为神奇的分支修订号。

我有一小部分“方便”的KornShell函数,其中一个函数获取给定文件的标记。我已经做了一个快速的尝试来调整它,以满足您的需要。它只是对(r)日志输出执行一些seding/greping,并列出其中包含“.0”的版本(这表示它是一个分支标记):

简单地说:)rlog也是如此

cvs log -h | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u
根据改进的版本,隐藏不相关的输出并左对齐结果:

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

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

是否有一种简单的方法来过滤标记?我们的CI服务器每天晚上都会产生大量的标签。。。或者CVS真的那么愚蠢,以至于没有办法分辨分支和标记之间的区别?除了解析版本号,没有办法分辨。你必须记住,分支是CVS添加到RCS中的东西,RCS是引擎盖下的真正版本控制。那么,如何解析版本号以过滤掉标记并只保留分支呢?@sschuberth我已经10多年没有使用CVS了,所以我想如果你想得到答案,我建议把它作为一个恰当的问题来问。没关系,我已经问过了。有两条主要规则:“分支数由奇数个点分隔的小数组成”和“CVS有时会在第二个最右边的位置插入额外的0”!A刚刚添加了wincvs信息,以便对其他人有用。您好,如果没有具有神奇分支修订号的分支,这意味着什么?
cvs log-h
提供了大量输出,如果您有大量文件。要降低音量,请使用
cvslogpom.xml
或类似的方法获取一个文件的日志。(这在所有情况下都有效,对吗?@limitedAtoniment:是的,确实有效。当我写“parse the output of”时,我假设人们会编写某种脚本来对输出进行预处理,然后再用肉眼消费它……;)我在那个输出中看到了分支修订:。在寻找分支时,这似乎不起任何作用,这有点令人困惑。有人能解释一下该条目的用途吗?@sschuberth:如果我没记错的话(我现在已经有一段时间没有主动使用CVS了,我不再有一个活动实例可以快速检查),该行将指示当前签出的分支修订(如果有-在我的示例中显然没有,即文件当前在主干上签出)Small beautify:
cvs log-h2>&1 | awk-F“[.:]”/^\t/&&&$(NF-1)==0{print$1}| awk{print$1}| sort-u
它还隐藏了以“cvs log:”开头的行:并将结果向左对齐。使用2>&1和隐藏无关数据的触感很好。有人能详细说明他的实际功能吗?我的意思是,它在
cvs log-h
的输出中寻找什么?至少对我来说,这并不明显。
cvs log -h | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u
cvs log -h 2>&1 | awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | awk '{print $1}' | sort -u