【问题标题】:clearcase create diff between parent and child branchesclearcase 在父分支和子分支之间创建差异
【发布时间】:2014-01-07 00:51:38
【问题描述】:

因此,我在 clearcase 中的两个分支之间创建差异日志/补丁的典型方法是简单地创建两个视图并执行典型的 unix 差异。但我必须假设有一种更清晰的方式(也是“1-liner”)。

所以知道如何获取分支上所有已修改文件的列表:

cleartool find . -type f -branch "brtype(<BRANCH_NAME>)" -print

并知道如何获取两个单独文件的差异格式输出:

cleartool diff FILE FILE@@/main/PARENT_BRANCH_PATH/LATEST

那么是否有人看到以下任何问题以获取分支中已更改的所有文件的差异?

cleartool find . -type f -branch "brtype(CHILD_BRANCH)" -exec 'cleartool diff -ser $CLEARCASE_PN `echo $CLEARCASE_XPN | sed "s/CHILD_BRANCH/LATEST/"` ' > diff.log

非常欢迎任何修改和cmets

提前致谢!

更新:任何关于如何使其成为 unix 统一差异的想法也将不胜感激。

update2:所以我想我有我的解决方案,感谢 VonC 向我发送了正确的方向:

cleartool find . -type f -branch "brtype(CHILD_BRANCH)" -exec 'cleartool get -to $CLEARCASE_PN.prev `echo $CLEARCASE_XPN | sed "s/CHILD_BRANCH/LATEST/"`; diff -u $CLEARCASE_PN.prev $CLEARCASE_PN; rm -f $CLEARCASE_PN.prev' > CHILD_BRANCH.diff

输出似乎有效,我可以毫无怨言地通过 kompare 读取文件。

【问题讨论】:

  • 我已经编辑了我的答案以解决您问题的最后一部分。
  • 看起来不错。我在下面的答案中包含了您的解决方案,以提高知名度。

标签: diff clearcase


【解决方案1】:

这个想法是正确的。

我会简单地确保$CLEARCASE_PN$CLEARCASE_XPN 用双引号括起来,以考虑文件路径或文件名中的潜在空格(如“How do I list ClearCase versions without the Fully-qualified version?”所示)。

cleartool find . -type f -branch "brtype(CHILD_BRANCH)" -exec 'cleartool diff -ser "$CLEARCASE_PN" `echo "$CLEARCASE_XPN" | sed "s/CHILD_BRANCH/LATEST/"` ' > diff.log

对 -exec 指令使用简单的引号是个好主意,如“CLEARCASE_XPN not parsed as variable in clearcase command”中所述。


但是,cleartool diff,即使使用-ser (-serial) 选项,也不会完全产生Unix unified diff format(或简称Unified Format)。

-diff(_format) 选项是最接近的,正如我在“How would you measure inserted / changed / removed code lines (LoC)?”中提到的那样

-diff_format 选项导致以 UNIX 和 Linux diff 实用程序的样式报告标头和差异,写入将要比较的第一个文件转换为第二个文件所需的更改列表。

一个想法是使用cleartool diff,而是直接使用diff,因为它可以通过extended pathname在动态视图中访问正确的版本> 找到的元素。


OP ckcinsolution 与使用 cleartool 获得的 I suggested 接近:

cleartool find . -type f -branch "brtype(CHILD_BRANCH)" -exec 'cleartool get -to $CLEARCASE_PN.prev `echo $CLEARCASE_XPN | sed "s/CHILD_BRANCH/LATEST/"`; diff -u $CLEARCASE_PN.prev $CLEARCASE_PN; rm -f $CLEARCASE_PN.prev' > CHILD_BRANCH.diff 

输出似乎有效,我可以毫无怨言地通过 kompare 读取文件。

多行,为了可读性:

cleartool find . -type f -branch "brtype(CHILD_BRANCH)" 
  -exec 'cleartool get -to $CLEARCASE_PN.prev 
           `echo $CLEARCASE_XPN | sed "s/CHILD_BRANCH/LATEST/"`; 
         diff -u $CLEARCASE_PN.prev $CLEARCASE_PN; 
         rm -f $CLEARCASE_PN.prev' > CHILD_BRANCH.diff 

(注意$CLEARCASE_XPN$CLEARCASE_PN 是由cleartool find 命令设置的,它们不是你自己设置的变量。)

【讨论】:

  • 有没有办法直接使用 diff 和快照视图?
  • @ckcin 不容易,考虑到扩展路径名不能从快照视图直接读取(请参阅stackoverflow.com/a/177350/6309,尽管您实际上可以尝试cleartool get:请参阅stackoverflow.com/a/18716494/6309)。我会坚持使用动态视图。
  • 这里有什么$CLEARCASE_PN$CLEARCASE_XPN?那么谁设置呢?
  • @einpoklum 路径名和扩展路径名,由 cleartool find 命令为所述命令 (cleartool find) 找到的每个元素设置,并使用 -exec 指令。跨度>
【解决方案2】:

将答案从 VonC 和 einpoklum 转移到 Windows 我想出了以下内容。创建一个单独的批处理文件,我称之为diffClearCase.bat,这大大简化了命令行。它为所有修改过的文件创建了一个单独的树,我个人很喜欢,但之后可以删除文件和文件夹。

@echo off
SET PLAINFILE=%1
SET PLAINDIR=%~dp1
SET CLEARCASE_FILE=%2
SET BRANCH_NAME=%3
SET SOURCE_DRIVE=T:
SET TARGET_TEMP_DIR=D:
SET DIFF_TARGET_FILE=D:\allPatch.diff
call set BASE_FILE=%%CLEARCASE_FILE:%BRANCH_NAME%=LATEST%%
call set TARGET_FILE=%%PLAINFILE:%SOURCE_DRIVE%=%TARGET_TEMP_DIR%%%
call set TARGET_DIR=%%PLAINDIR:%SOURCE_DRIVE%=%TARGET_TEMP_DIR%%%
echo Diffing file %PLAINFILE%
IF NOT EXIST %TARGET_DIR% mkdir %TARGET_DIR%
cleartool get -to %TARGET_FILE% %BASE_FILE%
diff -u %TARGET_FILE% %PLAINFILE% >> %DIFF_TARGET_FILE%
rem del /F/Q %TARGET_FILE%

然后我创建了第二个 bat 文件,它只是将分支名称作为参数。在我们的例子中,这个目录包含多个 VOB,所以我遍历它们并针对每个 VOB 执行此操作。

@echo off
SET BRANCHNAME=%1
SET DIFF_TARGET_FILE=D:\allPatch.diff
SET SOURCE_DRIVE=T:
SET DIFF_TOOL=D:\Data\Scripts\diffClearCase.bat
IF EXIST %DIFF_TARGET_FILE% DEL /Q %DIFF_TARGET_FILE%
for /D %%V in ("%SOURCE_DRIVE%\*") DO (
    echo Checking VOB %%V
    cd %%V
    cleartool find %%V -type f -branch "brtype(%BRANCHNAME%)" -exec "%DIFF_TOOL% \"%%CLEARCASE_PN%%\" \"%%CLEARCASE_XPN%%\" %BRANCHNAME%"
)

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2022-08-15
    • 2012-02-18
    相关资源
    最近更新 更多