4

我是一个 ClearCase 新手,到目前为止,我已经习惯了 SVN。因此,我对创建包含多个 ClearCase 文件的新目录结构所需采取的步骤有点困惑。

因此,举例来说,ClearCase 中有一个现有的目录结构,如下所示:

\ParentDirectory
    \ChildDirectory1
        \File1
        \File2
    \ChildDirectory2
    \ChildDirectory3
        \File1
    \ChildDirectory4

如果我想在这个结构中添加一个新的子目录 ChildDirectory5,它将包含许多其他文件,我该怎么做呢?从我一直在阅读的内容来看,我需要首先检查父目录,然后使用 mkelem 命令创建每个子目录和文件。

但是,我已经在本地机器上创建了必要的文件和目录,所以我只需要以某种方式将它们签入 ClearCase。使用 SVN,我需要做的就是将父文件夹复制到已签出的存储库中,然后对其执行添加和提交命令序列。

4

3 回答 3

5

正如我如何使用 ClearCase 递归地“添加到源代码控制……”中解释的那样?,您必须使用 clearfsimport 执行您所说的操作(检查父目录,元素的 mkelem)

clearfsimport -preview -rec -nset c:\sourceDir\ChildDirectory5 m:\MyView\MyVob\ParentDirectory

注意:

  • -preview 选项:它将允许在不实际执行任何操作的情况下检查会发生什么。
  • '*' 只在 Windows 环境下使用,为了导入目录的内容
  • -nset 选项(参见我之前关于 nset的回答)。

对于需要导入大量数据的初始化阶段,我建议使用动态视图:无需进行任何更新即可快速查看视图的外观(例如“不更新工作区”):
ClearCase 允许以两种方式访问​​数据方法:

  • 快照视图(类似于 SVN 工作区,除了所有 .svn 实际上都外部化在工作区外部的视图存储中)
  • 动态视图:您的所有文件都通过网络可见(即时访问/更新)
于 2009-01-06T21:14:52.737 回答
2

我使用了这个脚本的一个变体(我称之为“ctadd”):

#!/usr/bin/perl

use strict;
use Getopt::Attrribute;

(our $nodo : Getopt(nodo));
(our $exclude_pat : Getopt(exclude_pat=s));

for my $i (@ARGV) {
  if ($i =~ /\s/) {
    warn "skipping file with spaces ($i)\n";
    next;
  }
  chomp(my @files = `find $i -type f`);
  @files = grep !/~$/, @files;  # emacs backup files
  @files = grep !/^\#/, @files; # emacs autosave files
  if (defined($exclude_pat)) {
    @files = grep !/$exclude_pat/, @files;
  }
  foreach (@files) {
    warn "skipping files with spaces ($_)\n" if /\s/ ;
  }
  @files = grep !/\s/, @files;
  foreach (@files) {
    my $cmd = "cleartool mkelem -nc -mkp \"$_\"";
    print STDERR "$cmd\n";
    system($cmd) unless $nodo;
  }
}

cleartool mkelem 的 -mkpath 选项将自动创建和/或签出任何需要的目录。

对于这个脚本,-nodo 将让它简单地输出命令,而 -exclude 将允许您指定一个模式,任何匹配它的文件都将被排除在外。

请注意,Getopt::Attribute 不是标准 Perl 发行版的一部分,但它可以在您附近的 CPAN 镜像上使用。

于 2010-07-15T14:49:49.653 回答
1

您必须导入本地目录结构。命令是clearfsimport

于 2009-01-06T16:03:34.880 回答