Version control 如何获取在CVS存储库中创建的标记列表?
是否有任何CLI命令可用于获取在指定时间范围内在模块的分支或头上创建的标记列表 我需要的是标签列表和创建日期。给定以下参数Version control 如何获取在CVS存储库中创建的标记列表?,version-control,cvs,Version Control,Cvs,是否有任何CLI命令可用于获取在指定时间范围内在模块的分支或头上创建的标记列表 我需要的是标签列表和创建日期。给定以下参数 模块名 分支机构名称(或::HEAD) 开始日期 结束日期 CVS不能这样做,它太原始了。标记附着到单个文件修订,而不是模块或存储库。此外,这些标记没有日期元数据,因此您也无法判断它们是何时创建的 因此,无法使用您指定的任何选择标准。您可以使用的唯一标准是特定版本的文件,该文件将告诉您哪些修订版具有哪些标记,但仅此而已。可以使用以下命令列出模块中存在的标记或分支。这是从我这
CVS不能这样做,它太原始了。标记附着到单个文件修订,而不是模块或存储库。此外,这些标记没有日期元数据,因此您也无法判断它们是何时创建的
因此,无法使用您指定的任何选择标准。您可以使用的唯一标准是特定版本的文件,该文件将告诉您哪些修订版具有哪些标记,但仅此而已。可以使用以下命令列出模块中存在的标记或分支。这是从我这儿捡来的东西 要列出所有标记,请执行以下操作:
cvs -Q -d :pserver:*User*:*Pass*@*HostName*:/cvsroot rlog -h *Module*| awk -F"[.:]" '/^\t/&&$(NF-1)!=0{print $1}' | sort -u
要列出所有分支机构:
cvs -Q -d :pserver:*User*:*Pass*@*HostName*:/cvsroot rlog -h *Module*| awk -F"[.:]" '/^\t/&&$(NF-1)==0{print $1}' | sort -u
这使用神奇的分支编号来标识是一个符号链接是一个分支还是一个标记
正如skaffman在本页的一个答案中提到的,不可能确定创建标记的日期。最好的方法是通过考虑日志中列出的标签的最新日期来确定大致日期
大概是这样的:
cvs -Q -d :pserver:*User*:*Pass*@*HostName*:/cvsroot rlog -N -S -r*TagName* *Module* | grep ^date: | sort | tail -1 | cut -d\; -f1 | sed -e 's/date: //'
这是我编写的一个bash脚本,它列出了所有标记及其大约创建日期
#!/bin/bash
CVSROOT=$1
PROTOCOL=$2
LOGIN=$3
PASSWORD=$4
MODULE=$5
REVISION=$6
OUTPUT=$7
CVS_HOST=""
if test "${PASSWORD:-t}" != "t" ; then
CVS_HOST=":${PROTOCOL}:${LOGIN}:${PASSWORD}@${CVSROOT}"
else
CVS_HOST=":${PROTOCOL}:${LOGIN}@${CVSROOT}"
fi
CVS_REVISION=""
if test "${REVISION:-t}" != "t" ; then
CVS_REVISION="-r${REVISION}"
fi
echo "\"Tag Name\",\"Create Date\"" > ${OUTPUT}
echo "EXEC: cvs -Q -d ${CVS_HOST} rlog -h -S ${CVS_REVISION} ${MODULE} | awk -F"[.:]" '/^\t/&&\$(NF-1)!=0{print \$1}' | sort -u"
cvs -Q -d ${CVS_HOST} rlog -h ${CVS_REVISION} ${MODULE} | awk -F"[.:]" '/^\t/&&\$(NF-1)!=0{print $1}' | sort -u | while read tagName
do
#get approx create date
echo "EXEC: cvs -Q -d ${CVS_HOST} rlog -N -S -r$tagName ${MODULE} | grep ^date: | sort | tail -1 | cut -d\; -f1 | sed -e 's/date: //'"
date=`cvs -Q -d ${CVS_HOST} rlog -N -S -r$tagName ${MODULE} | grep ^date: | sort | tail -1 | cut -d\; -f1 | sed -e 's/date: //'`
#Save to output file
echo "\"$tagName\",\"$date\"" >> ${OUTPUT}
done
如果启用了历史记录功能,则可以执行 以下命令:
cvs history -a -T
它会给你一些这样的行,给你每个标记操作的日期+时间、用户、模块和标记名:
T 2011-04-02 07:55 +0000 ralph mylib [testtag:A]
有关更多信息,请查看我刚学到的:
cvs status -v
列出每个文件和任何文件的所有标记和分支及其所属的修订
您可以从那里开始工作…我正在使用cvsnt(安装)使用Cvs存储库 查询: 1) 我只需要cvs中的标记名列表 2) 如何使用cvsnt创建存储库 3) 如何将整个模块签入新存储库 我尝试以下示例: 1) 当我尝试创建新存储库时
cvs -d :pserver:<user>@<host>:<new_repository> init
cvs -d repository_path import name_of_project vendor_tag release_tag
有可能操纵任何CVS命令的输出来获取这些信息吗?@Salman:没有-就像我说的,CVS不存储这些信息。谢谢。我已经发布了我的一些发现和我解决问题的方法。这不是一个精确的方法,但给了我相当好的结果。你能看一下答案,如果你发现这里有什么问题就告诉我吗?几天前,我刚刚开始使用CVS,第二种意见将非常有用。谢谢。实际上CVS在它的历史文件中存储了这种信息。但是,在设置存储库时必须启用此日志记录。list all tags命令似乎可以工作,但在打印输出之前,我收到错误“Terminated with fatal signal 11”。