如何对任意目录树执行更新

how to perform an update on an arbitrary directory tree

几天前我问过 ,得到的答案是使用 clearfsimport 工具。到目前为止,这已经完美地工作并且可以 "import" 进入 ClearCase(到动态视图)任意目录树(来自一些外部文件系统目录):

clearfsimport -recu -nset /some/external/directory/foo .

我的工作流程是,我在该外部目录 (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 中),因此我在 运行 宁 [=12] 之前创建了我的项目的 "clean" 副本=](删除 git-specific 文件,如 .git.gitignore 等)。我通常在 git 中有更详细的历史记录,但我只对维护 ClearCase 中特定值得注意的 "milestones" 的历史记录感兴趣,以供可能希望查看我的代码及其随时间演变的其他团队成员使用。话虽这么说,我不想(至少暂时)使用任何工具来桥接 git 到 ClearCase,并且更愿意保持简单。

我澄清我试图建立的工作流程只是一种方式(ClearCase 的外部目录)并且我正在导入动态视图。

查看 clearfsimport 的手册页,我看到提到了 'two passes' 之类的内容和 -rmname 之类的选项,这让我觉得可以 运行 clearfsimport 目标是 现有 目录结构(即无需先 ct rm 它)。但是我不确定到底要使用哪种咒语,以及这是否会处理给定名称以各种方式更改的情况(例如,从文件到目录或从目录到符号链接或从符号链接到文件)或如何根据以下方式处理重命名历史。

Do you see any problems with the above approach in terms of history, etc?

是的:在使用 clearfsimport 时你不应该 rm 任何东西。
只需导入同一个 view/destination 文件夹,ClearCase 就会为您检测 new/modified/deleted 文件,并相应地检出、更新或删除这些文件。

-rmname option 添加到您的 clearfsimport,ClearCase 将确保 "mirror" 您的导入,这意味着源文件夹中的已删除文件也会 在目标文件夹中被删除。

"incantation to use"和以前一样,只是多了一个-rmname参数。

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