Clearcase 如何在任意目录树上执行更新

Clearcase 如何在任意目录树上执行更新,clearcase,Clearcase,几天前我问过,我得到的答案是使用clearfsimport工具。到目前为止,它工作得非常完美,可以将任意目录树(从某些外部文件系统目录)“导入”到ClearCase(动态视图)中: 我的工作流程是,我在该外部目录(foo)中完成所有工作和测试,当我高兴时,我使用上述clearfsimport工具将我的源提交给ClearCase。到目前为止,这在初始提交中已经奏效,但现在我发现自己想要导入修改过的源代码。实际上,我需要在现有的foo目录中导入一个新的目录树。这些更改可能无处不在:添加、删除或重命名

几天前我问过,我得到的答案是使用
clearfsimport
工具。到目前为止,它工作得非常完美,可以将任意目录树(从某些外部文件系统目录)“导入”到ClearCase(动态视图)中:

我的工作流程是,我在该外部目录(
foo
)中完成所有工作和测试,当我高兴时,我使用上述
clearfsimport
工具将我的源提交给ClearCase。到目前为止,这在初始提交中已经奏效,但现在我发现自己想要导入修改过的源代码。实际上,我需要在现有的
foo
目录中导入一个新的目录树。这些更改可能无处不在:添加、删除或重命名文件/目录,将文件更改为目录或符号链接(反之亦然)。实际上,我们可能讨论的是两个非常不同的目录树,其输出非常详细
diff-r

我计划使用以下工作流:

ct co .
ct rm foo                                                // remove existing dir from view
ct ci .
clearfsimport -recu -nset /some/external/directory/foo . // import the new dir version
您认为上述方法在历史等方面存在任何问题吗

为了充分披露,我使用git维护我的项目(在
/some/external/directory
),因此我在运行
clearfsimport
(删除git特定的文件,如
.git
.gitignore
等)之前创建了一个项目的“干净”副本。我通常在git中有更详细的历史记录,但我只对在ClearCase中维护特定值得注意的“里程碑”的历史记录感兴趣,因为其他团队成员可能希望查看我的代码及其随时间的演变。话虽如此,我不想(至少目前)使用任何工具将git连接到ClearCase,我更喜欢保持简单

我澄清了我试图建立的工作流是单向的(ClearCase的外部目录),并且我正在导入到动态视图中

查看
clearfsimport
的手册页,我看到有人提到了类似“两个过程”的内容,以及类似
-rmname
的选项,这让我想到,只要运行
clearfsimport
,目标是现有的目录结构(即不必先运行
ct rm
即可)。但我不确定该确切使用哪种咒语,也不确定这是否能处理给定名称以各种方式发生变化的情况(例如,从文件到目录、从目录到符号链接或从符号链接到文件),或者根据历史如何处理重命名

您认为上述方法在历史等方面存在任何问题吗

是:使用
clearfsimport
时,您不应该
rm
任何内容
只需导入到相同的视图/目标文件夹,ClearCase将为您检测新的/修改的/删除的文件,并相应地签出、更新或删除这些文件

将添加到您的
clearfsimport
,ClearCase将确保“镜像”您的导入,这意味着源文件夹中删除的文件也将在目标文件夹中删除


“要使用的咒语”与之前相同,只是增加了一个
-rmname
参数。

您是否考虑过使用快照视图并直接在ClearCase中工作,这只是你的方法

我只是有点不安,
clearfsimport
在名称类型发生变化(例如从文件到符号链接或从符号链接到目录)时会做正确的事情,这就是为什么我认为
ct rm
会导致一张白纸。但我理解你的回答是说只要相信clearfsimport做正确的事情…@MarcusJuniusBrutus我同意,这需要嵌套在边缘情况下,但一般来说,
clearfsimport
是为这个用例制作的。@MarcusJuniusBrutus rm的问题是,您完全丢失了所有已修改的常用文件的历史记录。ClearCase将它们视为没有历史记录的新元素。
ct co .
ct rm foo                                                // remove existing dir from view
ct ci .
clearfsimport -recu -nset /some/external/directory/foo . // import the new dir version