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

4
我是一个 ClearCase 新手,之前我一直使用 SVN。因此,我对于在 ClearCase 中创建包含多个文件的新目录结构所需的步骤感到有些困惑。
假设现在 ClearCase 中存在以下目录结构:
\ParentDirectory
    \ChildDirectory1
        \File1
        \File2
    \ChildDirectory2
    \ChildDirectory3
        \File1
    \ChildDirectory4

如果我想向这个结构添加一个新的子目录ChildDirectory5,其中包含许多其他文件,我该怎么做?根据我所读的内容,我需要首先检出父目录,然后使用mkelem命令来创建每个子目录和文件。
然而,我已经在我的本地机器上创建了必要的文件和目录,所以我只需要以某种方式将它们检入ClearCase。对于SVN,我只需要将父文件夹复制到已检出的repo中,并在其上执行add&commit命令序列即可。
3个回答

5

如何使用ClearCase递归地“添加到源代码控制……”中所解释的,您需要使用clearfsimport来执行您所说的操作(检出父目录,为元素创建mkelem)。

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

请注意以下内容:
  • -preview选项:它允许在实际执行操作之前检查会发生什么。
  • '*'仅在Windows环境中使用,以导入目录的内容
  • -nset选项(请参阅我关于nset的先前回答)。

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

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

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 镜像上找到。


1

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