【问题标题】:How to get a list of tags created in CVS repository?如何获取在 CVS 存储库中创建的标签列表?
【发布时间】:2011-05-30 09:52:32
【问题描述】:

是否有任何 CLI 命令可用于获取在指定时间范围内在模块的分支或头上创建的标签列表?

我简要需要的是标签列表及其创建日期。给定以下参数

  1. 模块名称
  2. 分支名称(或 :: HEAD)
  3. 开始日期
  4. 结束日期

【问题讨论】:

    标签: version-control cvs


    【解决方案1】:

    我刚学会:

    cvs status -v
    

    列出每个文件的所有标签和分支以及它所属的修订版。

    你可以从那里工作......

    【讨论】:

      【解决方案2】:

      可以使用以下命令列出模块中存在的标签或分支。这是从another answer at SO获取的东西

      列出所有标签:

      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
      

      【讨论】:

      • 列出所有标签命令似乎可以工作,但在打印输出之前出现错误“以致命信号 11 终止”。
      【解决方案3】:

      如果你启用了历史功能,你可以执行 以下命令:

      cvs history -a -T
      

      它会给你一些这样的行,给你每个标记操作的日期+时间、用户、模块和标记名:

      T 2011-04-02 07:55 +0000 ralph  mylib [testtag:A]
      

      更多信息请查看cvsbook on history

      【讨论】:

        【解决方案4】:

        CVS 做不到,它太原始了。标签附加到单个文件修订,而不是模块或存储库。此外,标签没有日期元数据,因此您也无法知道它们是何时创建的。

        因此,您指定的任何选择标准都不能使用。你可以使用的唯一标准是一个特定的版本文件,它会告诉你哪些修订有哪些标签,但就是这样。

        【讨论】:

        • 是否可以操纵任何 CVS 命令的输出来获取此信息?
        • @Salman:不——就像我说的,CVS 不存储这些信息。
        • 谢谢。我已经发布了一些我的发现和解决问题的方法。这不是一个准确的方法,但给了我相当好的结果。你能看看答案,如果你发现这里有问题,请告诉我?几天前我刚刚开始使用 CVS,第二个意见会有很大帮助。谢谢。
        • 实际上 CVS 确实将这种信息存储在它的历史文件中。但是必须在设置存储库时启用此日志记录。
        【解决方案5】:

        我正在使用 Cvs Repository 使用 cvsnt(install) ..

        查询:

        1) 我只想要来自 cvs 的标签名称列表。

        2) 如何使用 cvsnt 创建 Repository。

        3) 如何将整个模块签入到新存储库中。

        我试试样品:

        1) 当我尝试创建新的存储库时

        cvs -d :pserver:<user>@<host>:<new_repository> init
        

        2) 将模块导入存储库

        cvs -d repository_path import name_of_project vendor_tag release_tag
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-08-15
          • 2011-03-25
          • 1970-01-01
          • 2014-01-25
          • 1970-01-01
          • 2017-05-17
          • 2012-01-17
          • 2011-09-10
          相关资源
          最近更新 更多