【问题标题】:How can I compare 2 files and ignore any changes in comments?如何比较 2 个文件并忽略评论中的任何更改?
【发布时间】:2010-10-24 07:09:15
【问题描述】:

我正在使用 C# 和 VB.NET。

我经常(每天...)将 cmets 添加到现有源文件中。当我签入这些文件时,我想让我的合并工具忽略对 cme​​ts 所做的任何更改 - 我只是想确保我没有更改代码。

我使用 WinMerge 和 Team Foundation Control Server(是的,没有机会:当我接受这份工作时,Subversion 不是一个选项 :o)。它们都可以忽略空格,但不能忽略 cmets。结果:在签入之前,我必须仔细查看对每个文件所做的所有更改。这非常麻烦。

(好吧,因为我的大多数同事根本不发表评论 - 嘿,他们使用很长的命名空间/类/方法/属性/类型/常量名称来说明一切,伙计们!- 很多工作。)

有什么建议吗?

一切顺利, 西尔文。

【问题讨论】:

  • 在我的 winmerge 中有选项 > 比较过滤器 cmets。不知道效果如何,但可能值得一试。

标签: version-control merge comments


【解决方案1】:

BeyondCompare 有一个用于忽略“不重要”更改的过滤器,默认情况下 cmets 属于该类别。

【讨论】:

  • 哇,我已经用它做了一些测试,这正是我想要的正是!非常感谢您的提示:o)
【解决方案2】:

如果 cmets 的内容不是您关心的内容,并且无关紧要,为什么不删除它们呢?

如果您所创建的内容具有良好的可读性和可理解性的文档化代码,为什么不查看对元数据的更改?

【讨论】:

  • 对不起,我的英语很差 - 事实上,我真的关心 cmets !这就是为什么当我必须弄清楚事情是如何运作时,我总是添加一些。
【解决方案3】:

你说你使用了 WinMerge - 它有过滤掉 cmets 的能力。

但是它只适用于单独一行的 cmets,例如:

int i; // comment

将被检测为不同于

int i;

【讨论】:

  • 很好的提示。我的问题:大多数时候,我不修改 cmets,我添加了一些。谢谢你的回答!
【解决方案4】:

听起来您正在使用注释作为工具来理解您使用的代码。这是一个有趣的想法,相当于突出一本书或做笔记。但在与他人合作之前,您需要确保去掉所有这些瞬态 cmets。

在比较或提升之前,请通过过滤程序运行您的源文件,以去除评论。这可能是一个单行 perl 脚本。

为方便起见,请为您的非永久性 cmets 使用独特的模式,以使它们更容易被过滤掉(并区分这些暂态 cmets 和您真正想留在源中的 cmets)。例如。如果您使用 C++ 编写,请始终使用

进行评论
 //Sylvain: this is my comment here.

或其他一些更容易 grep 的模式。

【讨论】:

  • 嗯,大多数时候,我不会在我理解代码的情况下评论代码——事实上,我评论它是为了方便我的同事的工作。所以我所有的 cmets 都必须登记。但是您的想法很有趣-我们可以将 cmets 剥离为比较工具,然后在签入前将它们带回来...感谢您的回答 Alex!
【解决方案5】:

给你的代码添加注释是你的代码难以阅读的味道,代码应该是自我描述的,就像有人说的那样,好的代码就像一个笑话,不需要解释。最好更改变量名,将部分代码放入子例程中。重构比评论更好。即使你找到了一个工具来解决你的评论问题,它并没有解决真正的问题,那就是让你的代码易于理解。

【讨论】:

  • 嗯,你是对的:好的代码不需要注释。问题是我的开发人员编写的代码非常好(他们总是使用已知的设计模式,而且他们很聪明)但是像我这样无知的人无法理解他们做了什么!我不是编写软件的人,我是必须维护它的人。而且大部分时间都非常复杂。为什么不告诉读者意图是什么?对我来说,不说类的目的至少有 2 行注释是犯罪。
【解决方案6】:

Compare++ 有一个选项“忽略评论更改”和“忽略纯格式更改”,这应该满足您的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多