在ClearCase中创建一个新的子目录结构?

时间:2009-01-06 15:05:35

标签: clearcase

我是一名ClearCase新手,直到现在已经习惯了SVN。因此,我对在创建包含多个文件到ClearCase的新目录结构时需要采取的步骤感到困惑。

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

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

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

但是,我已经在本地计算机上创建了必要的文件和目录,所以我只需要以某种方式将它们检入ClearCase。使用SVN,我需要做的就是将父文件夹复制到已检出的仓库并执行添加&提交命令序列。

3 个答案:

答案 0 :(得分:5)

正如How can I use ClearCase to “add to source control …” recursively?中所解释的那样,你必须使用clearfsimport来实现你所说的(检查父目录,mkelem表示元素)

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

请注意:

  • -preview选项:它可以检查在没有实际执行任何操作的情况下会发生什么。
  • '*'仅在Windows环境中使用,以便导入目录的内容
  • -nset选项(请参阅我的previous answer关于nset)。

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

  • 快照视图(类似于SVN工作区,但所有.svn实际上都是在工作区外的视图存储中外部化的)
  • 动态视图:您的所有文件都可通过网络查看(即时访问/更新)

答案 1 :(得分: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镜像上使用。

答案 2 :(得分:1)

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