这是我在WxWidgets中找到的 header 之一,我喜欢它。
我想知道是否有办法在我的所有源文件中插入这样的 header 并保持其自动更新?
它包括我所知道的SVN的两个属性。
/////////////////////////////////////////////////////////////////////////////
// Name: <filename>.cpp
// Purpose:
// Author: <AuthorName>
// Modified by:
// Created: $Date$
// RCS-ID: $Id$
// Copyright: (c) <Year> <AuthorName>
// Licence: <licensetype>
/////////////////////////////////////////////////////////////////////////////
最佳答案
这部分取决于您使用哪个VCS。对于我自己的工作,我一直使用SCCS直到1999年,但为了避免Y2K出现问题,切换到RCS(SCCS日期格式使用年份的2位数字,我认为这是 Not Acceptable )。结果,我对如何合理地合理使用这些系统有很强的见解。在SO的某个地方,我已经讨论了文件头中的内容,但是找到插图比其他答案更简单...
/*
@(#)File: $RCSfile: stderr.c,v $
@(#)Version: $Revision: 9.14 $
@(#)Last changed: $Date: 2009/07/17 19:00:58 $
@(#)Purpose: Error reporting routines
@(#)Author: J Leffler
@(#)Copyright: (C) JLSS 1988-91,1996-99,2001,2003,2005-09
@(#)Product: :PRODUCT:
*/
这是我最古老的源文件之一-从SCCS迁移到RCS。 VCS(即RCS)自动维护$ RCSfile $,$ Revision $和$ Date $值。我有一个shell脚本,该脚本可驱动Perl脚本来维护版权日期。我需要记住在任何一年中第一次编辑文件时都使用它。我还没有费心去制作一个只破坏版权行的过滤器脚本(这对我来说是不寻常的,我制作了很多脚本)。该文件为“未分发”格式;当我将其与产品一起分发时,“:PRODUCT:”元关键字会被扩展以命名相关产品(通过我的发布构建软件)。显然,我的名字和文件用途都不需要太多维护。 (顺便说一句,我仍然更喜欢使用SCCS管理关键字的方式-相当于$ RCSfile $的SCCS等)。
如果版本控制系统本质上不支持关键字,则很难决定如何处理此类信息。第一条规则是“不要与您的VCS对抗”。 war 故事-我们试图与VCS作战,但没有成功。很久以前(十年半前),该公司从SCCS切换到Atria Clearcase(现在为IBM Rational ClearCase)。 ClearCase不支持将版本信息嵌入到源文件中。它确实支持 checkin 触发器。我们编写并部署了触发器,以确保将ClearCase版本号嵌入到文件中,就像以前的SCCS版本号一样。 checkin 触发器工作正常;我们可以在 View 的内部或外部查看文件,并查看文件所属的版本。但是版本号的更改破坏了合并代码-即使唯一的冲突在于版本号,所有合并都变成了手动合并。这是因为我们正在与VCS作战,它不愿意让我们获胜。因此,我们最终放弃了 checkin 触发器。
我仍在尝试找出如何使用git等现代DVCS处理版本标记源文件的方法。看来我将不得不重新设计整个发行版系统-可能是同时包含SCCS和RCS(尽管现在,尽管SCCS部分已经十年没有使用)和git的混合体。
许多人使用的一种理论是,应避免将元数据构建到源文件中。我仍然完全相信这是很好的-我认为即使源文件与原始上下文脱离(已重命名,从其原始包中删除,修改并包含在某些文件中),查看源文件的源也很有帮助。新产品)。使用DVCS时,我可能还不得不接受这种观点。
我的理论是,我(但不一定是其他任何人)使用的理论是,元数据应该存储在文件中,因为它们并不总是在其原始上下文中使用,并且元数据可以生存并帮助确定其起源,甚至数十年之后。因此,在构建源代码发行版时,我使用发行版软件自动编辑产品信息,并使用:PRODUCT:等符号标记应编辑的内容。如果下载我在IIUG(国际Informix用户组)网站上提供的任何软件包,则可以在工作中看到这一点。我建议SQLCMD可能是最大和最新的软件包-尽管自90年代中期和23左右(当前版本86.00)以来就可以使用它。
我在git中遇到的最大问题之一是,几乎所有程序都使用stderr.c和stderr.h中的代码。但是,我还不清楚如何将相同的代码合并到许多使用它的产品中,而不需要对其进行多次维护。这远不是我在许多不同产品中使用不变的唯一一对源文件。但是我不想使用每个产品来构建整个库-库将比许多产品都要大,并且任何给定的产品仅使用库中的一些文件。嗯,有一天,启蒙将会来临
我不同意文件名称不是值得保留在文件中的元数据的意见。我认为值得保留-因为名称可以在内容不存在时更改,并且如果元数据存在,则更容易看出名称。当然,恶意软件可以篡改(或删除)元数据-但是它们通常不会这样做。