如何查找在ClearCase分支下被修改过的文件

20

我修改并提交了一堆文件到我的分支下。现在我需要获取我修改的文件列表。有没有脚本可以做到这一点?

5个回答

29

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

以下将查找分支上的所有文件

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

请参阅查找示例或"cleartool find命令的其他示例"获取更多示例。


sarath提出:

它给我一个带有@和其他字符的损坏文件名。 是否可能获得普通路径?

确实,这样的命令会给你类似于以下内容(作为示例):

.\.checkstyle@@\main\MyBranch
.\.classpath@@\main\MyBranch_Int\MyBranch
.\.classycle@@\main\MyBranch_Int\MyBranch
.\.fbprefs@@\main\MyBranch_Int\MyBranch

要仅获取路径,您有两个解决方案:

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

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

(请注意-branch被替换为-ele
那将会是:

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

但是你仍然有“丑陋”的 '@@'。

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

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

为了可读性,使用多行表单:

cleartool find . -type f -ele "brtype(mybranch)" \
  -exec "cleartool descr -fmt \"%En\n\" \"%CLEARCASE_PN%\""
请注意,所有“内部”双引号都需要转义。
%En将给您找到的元素名称。
.\.checkstyle
.\.classpath
.\.classycle
.\.fbprefs
.\.pmd
.\.project
.\.settings\dico.txt

它给我一个带有@和其他字符的受损文件名,是否可能使用正常路径获取? - sarat
谢谢您的回答,但我如何在指定文件夹而不是vob下找到已修改的文件呢?例如,我需要找到已修改的文件\vob_name\sub1\sub2。我该怎么做? - sarat
@sarat:只需将“ct find . -type ...”中的“.”替换为您要查找的完整路径即可。 - VonC

9

find命令是最好的来源。为了解决OPs关于返回“残缺”的带@@以及之后所有分支和版本信息的问题,可以添加“-nxn”选项来避免提供此信息。这比执行元素搜索并使用exec指令格式化输出要容易得多。

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

7

上述命令将列出特定分支(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 \nName\t\t:\040%En\nResponsible\t:\040%u\nDate\t\t:\040%d\nComment\t\t:\040%c\n %CLEARCASE_XPN%" \
                 -print >> D:\test.xls

(in one giant line for copy/paste purpose:)

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 \nName\t\t:\040%En\nResponsible\t:\040%u\nDate\t\t:\040%d\nComment\t\t:\040%c\n %CLEARCASE_XPN%" -print >> D:\test.xls

1
有趣的(+1)。我尝试改进您的答案的呈现方式,使命令的不同部分更加清晰可见。 - VonC

3

尝试使用此命令

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

这是这个页面上唯一对我有效的东西。 - InfiniteZoom

0
使用以下脚本
   #!/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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接