ClearCase 注释以找到添加特定 LOC 的罪魁祸首

ClearCase annotate to find the culprit who added a particular LOC

我正在编写一个脚本来查找在 ClearCase 中添加特定代码行的罪魁祸首。我为此使用注释命令。 cleartool annotate -all -fmt "%Ad %-8.8u %-100.150Vn | " -nheader -force 我正在使用 -all 以便我可以探索不相关的级别(不在同一血统中)。但我闻到一个问题。如果我的 .c 文件中有两行相同的代码,应该选择哪一行? 所以为了解决这个问题,我想我可以删除它 -all 并在同一血统中找到一个特定的版本。然后查看任何合并到该特定版本并在该版本中执行另一个 annotate
所以我的问题是,如果我现在不在这个版本,我可以这样做吗?

cleartool annotate -all -fmt "%Ad %-8.8u %-100.150Vn | "  -nheader -force MEMManager.c@@\main\optimus_2_build\optimus_r10_integration_branch

我的方向对吗?或者有什么更好的命令可以用来实现这个目标吗?

我真的无法说出处理这个问题的最佳方法,我可以说说我上次不得不处理 "where did THAT change come from?" 问题时所做的事情。

我使用 annotate 将 vtree 往回走。我用 -long 对当前版本进行了注释(以获取整行代码,因为它的缩进相当大),并找到了更改的行及其来源。然后我转到那个版本并对其进行注释,发现有问题的行来自另一个版本(已合并到这个 "middle" 版本中)。起泡沫,冲洗,根据需要重复。

是的,这很乏味,但那是很久以前的事了……出于某种原因,我没有想到要使用 -all。

“2 项相同的更改”问题可能不会对运营产生任何影响。但这是 "identical changes" 在简单的 hello.c 来源中的样子:

##### 2016-12-05T09:19:55-05:00 Brian    \main                  |                         | #include <stdio.h>
#####                             .                               |                         | 
#####                             .                               |                         | int main(int argc, char** argv)
#####                             .                               |                         | {
##### 2016-12-05T09:23:38-05:00 Brian    \main\testbr           |                         |         // And here 
##### 2016-12-05T09:22:10-05:00 Brian    \main                  | UNRELATED               |         // And here 
##### 2016-12-05T09:19:55-05:00 Brian    \main                  |                         |         printf("Hello World!\n");
#####                             .                               |                         |         return 0;
##### 2016-12-05T09:21:31-05:00 Brian    \main                  | UNRELATED               |         // I felt like adding this here
##### 2016-12-05T09:21:02-05:00 Brian    \main\testbr           |                         |         // I felt like adding this here
##### 2016-12-05T09:19:55-05:00 Brian    \main                  |                         | }

"UNRELATED" 表示它不是来自当前的 "line of descent" 并且还告诉您更改也发生在哪里。这可能是因为其中一个版本被合并到多个分支,或者某些版本是一位非常多产的打字员。

cleartool annotate 在(太多)情况下无法查明更改代码行的人。试想一下由于合并而创建的文件版本。 cleartool annotate 将此版本视为更改,但它不是真正的版本!真正的其实在另一个 stream/branch 上。此外,这个 "real" 源版本可能不是真实版本,而是另一个合并的目标!这是一种递归。

有一个 ClearCase 实用程序 GetRealChange,它为您提供给定代码行的真实版本。它速度很快,并且支持 Windows 和 Linux。参见 http://almtoolbox.com/va4vs