版本控制——如何找到clearcase分支下修改的文件



我修改并签入了分支下的一堆文件。现在我需要得到我修改过的文件列表。有这样的脚本吗?

cleartool命令find应该帮助您找到在给定分支上至少具有一个版本的任何元素(文件)。

下面的命令将查找分支

上的所有文件
cleartool find . -type f -branch "brtype(mybranch)" -print

请参阅查找示例或" cleartool查找命令的附加示例"以获取更多示例。


OP sarath添加:

给了我一个带有@和其他字符的残缺的文件名。有可能得到正常的路径吗?

True,这样的命令会给你类似(作为一个例子):

..checkstyle@@mainMyBranch
..classpath@@mainMyBranch_IntMyBranch
..classycle@@mainMyBranch_IntMyBranch
..fbprefs@@mainMyBranch_IntMyBranch

要只获得路径,您有两个解决方案:

1/查找具有正确分支的元素(而不是版本):

cleartool find . -type f -ele "brtype(mybranch)" -print

(注意-ele代替-branch)
这将得到:

..checkstyle@@
..classpath@@
..classycle@@
..fbprefs@@
..pmd@@

但你仍然有"丑陋的"' @@ '。

2/将查找与exec指令结合,exec指令描述以fmt_ccase格式找到的元素:

cleartool find . -type f -ele "brtype(mybranch)" -exec "cleartool descr -fmt "%Enn" "%CLEARCASE_PN%""

多行格式:

cleartool find . -type f -ele "brtype(mybranch)" 
  -exec "cleartool descr -fmt "%Enn" "%CLEARCASE_PN%""

请注意,所有的"内部"双引号都需要转义。

%En将给出找到的元素的名称。

..checkstyle
..classpath
..classycle
..fbprefs
..pmd
..project
..settingsdico.txt

find命令是最好的源代码。为了解决OPs对返回带有@@的"残缺"名称以及随后的所有分支和版本信息的担忧,可以添加"-nxn"选项以不提供此信息。这比将元素搜索与exec指令结合起来格式化输出要容易得多。

cleartool find . -type f -branch "brtype(mybranch)" -nxn -print

上面的命令将给出所有被修改的文件,特别是branch(myBranch)
但是,如果要查找特定用户在特定日期修改的文件,则需要使用以下命令:

cleartool find . -version "{created_since(28-APRIL-2011.23:00:00) 
                           && (!created_since(29-APRIl-2011.23:00:00)) 
                           && brtype(BR_test) 
                           && created_by(p723029)}" 
                 -exec "cleartool describe -fmt nNamett:40%EnnResponsiblet:40%unDatett:40%dnCommenttt:40%cn %CLEARCASE_XPN%" 
                 -print >> D:test.xls

(用于复制/粘贴)

cleartool find . -version "{created_since(28-APRIL-2011.23:00:00) && (!created_since(29-APRIl-2011.23:00:00))  && brtype(BR_test)  && created_by(p723029)}" -exec "cleartool describe -fmt nNamett:40%EnnResponsiblet:40%unDatett:40%dnCommenttt:40%cn %CLEARCASE_XPN%" -print >> D:test.xls

试试这个命令

cleartool find -avo -nxname -element '{brtype(branch_name)}' -print

使用以下脚本

   #!/bin/sh
   display()
   {
       echo "usage: $0 branchname -v vobs"
       echo "  branchname: optional, if absent uses the current view-name"
       echo "  -v vobs: optional, if absent uses default vob list"
   }
  if [ $# -gt 1 ]; then
      if [ $1 == -v ]; then
          branch=`basename $CLEARCASE_ROOT`
          VOB_LIST=${@:2:($# - 1)}
      elif [ $2 == -v ]; then
          branch=$1
          VOB_LIST=${@:3:($# - 2)}
      else
          display
         exit 1
      fi
  else
      VOB_LIST="/vobs/abc /vobs/def /vobs/ghi /vobs/jkl /vobs/mno"
      if [ $# -eq 1 ]; then
         if [ $1 == -h ]; then
              display
              exit 0
          else
              branch=$1
          fi
      else
         branch=`basename $CLEARCASE_ROOT`
      fi
  fi
  echo "Searching for files of branch <$branch> in following vobs:"
  echo "$VOB_LIST"
  echo "================================================================"
  cleartool find $VOB_LIST -all -version "version(.../$branch/LATEST)" -print

将其保存在名为ctlsbr的文件中,并在您想要查找修改文件列表的vob中使用此命令。

谢谢,Amit

最新更新