Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 出于历史目的注释掉代码的替代方案_Version Control_Comments_Codebase - Fatal编程技术网

Version control 出于历史目的注释掉代码的替代方案

Version control 出于历史目的注释掉代码的替代方案,version-control,comments,codebase,Version Control,Comments,Codebase,出于可查找性的原因,是否有人可以选择使用签入存储库的已注释代码 我问这个问题的原因是因为我最近与一位同事讨论了签入被注释掉的代码的问题。我的立场是,注释掉的代码永远不应该被检查到我们的VCS中,因为从技术上讲,它不是代码库的一部分,因此,可以说,令人讨厌的代码不值得占用字节 与之相对应的是,他签入的一些注释掉的代码仍然说明了他希望在未来修复的一些工作(在这一点上,注释掉发生在2年前,但这不是重点)。他想把它保存在代码库中,这样他就可以很容易地找到它,尽管它目前无法编译,但它仍然在全局行中显示了解

出于可查找性的原因,是否有人可以选择使用签入存储库的已注释代码

我问这个问题的原因是因为我最近与一位同事讨论了签入被注释掉的代码的问题。我的立场是,注释掉的代码永远不应该被检查到我们的VCS中,因为从技术上讲,它不是代码库的一部分,因此,可以说,令人讨厌的代码不值得占用字节

与之相对应的是,他签入的一些注释掉的代码仍然说明了他希望在未来修复的一些工作(在这一点上,注释掉发生在2年前,但这不是重点)。他想把它保存在代码库中,这样他就可以很容易地找到它,尽管它目前无法编译,但它仍然在全局行中显示了解决它的正确方法

最后,他同意,某种程度上,注释掉的代码不属于。但是,当我们在考虑可能的替代方案时,我们的答案很短

我能想到的唯一选择是:

  • Wiki:只需将其粘贴到Wiki上的某个位置即可。这样做的缺点是,它会与其他与代码无关的wiki内容混合在一起,这可能会使搜索变得困难
  • 为所有VCS修订版编制索引:这对我来说基本上是理论性的,但是否有系统可以使代码库及其整个历史记录成为可搜索的
有人知道/使用任何替代品吗?我的两个选择听起来都比实际价值大,但这可能是因为我认为注释掉的代码毫无价值。我不想走“嘿,如果你现在没有时间去修复它,那么不管怎样,留在代码库中都不够重要”的路线(但如果没有可行的替代方案,我会这么做)


很抱歉这个标题太糟糕了,我想不出更好的了。

听起来你的朋友应该创建一个分支,并在那里尝试他的“改进”。您可以很容易地区分此改进分支和当前源代码,以清楚地表示他打算进行的更改。

我知道代码已不再使用,但它包含了将来可能会感兴趣的想法


我会将其存储在控制版本系统中,但我会将其保存在一个单独的文件夹中,类似于
删除代码以供以后查看。然后,我会在查看时将其删除。

分支在这里很有用。使用SCM的一种模式是为每个特征创建分支。当分支合并没有痛苦时,这是很流行的-这是所有SCM都无法提供的一种方便…:-)

其思想是,您处理的每个特性都有一个专用的分支,并且完全在该分支内处理。当功能完成时,工作、测试、记录并获得两枚奥运金牌等。。然后分支合并到主干中。或者,如果功能从未完成或放弃等,分支将无限期地保持打开状态,但代码将保持可见,随时准备有一天被人拾取

这是存储“正在进行的工作”的好方法,因为代码是分支的,您可以自由地签入暂定代码。它不需要注释掉,因为正在进行的工作更改仅在该独立分支中,它甚至不需要编译,因为这些分支在达到成熟度之前通常不会迁移到持续集成中

与注释掉的代码不同,这些暂定的代码更改是可见的和可搜索的,可用于代码分析工具、重构等

在某些环境中,功能及其分支还可能具有关联的更改通知单或问题跟踪id。这可确保重大更改不会丢失,并提供一种对各种功能进行优先级排序和组织的方法,从解决争端的方法到以一种可能永远看不到曙光的不同方式实现某些东西的实验

至于搜索,一些SCM有一个搜索前端。例如,SVN具有SVNSearch
- . 还有,它可以搜索历史记录,也可以搜索头。

根据我的经验,签入注释代码的最大原因是开发人员非常讨厌键入,他们宁愿将未使用的代码放在手边,以防将来需要键入类似的代码片段

你的情况有点不同,但我还是说“要么使用它,要么失去它”。如果注释掉的解决方案解决了一些重要的问题,那么这将是完成它的一个很好的动机。我们很容易花更多的时间来解释为什么有些事情不太对劲,以及“我们怎么没有时间去解决它”,而不是去做它

最后一点是基于开发人员时间是非线性的断言,并且开始做一些你有动力去做的事情比每次“为Y项目预订X小时”带来的价值要大得多


有些版本控制系统非常擅长创建和合并分支。Mercurial、git等都能做到这一点。即使您不使用其中一个作为主要风险投资工具,也没有什么可以阻止您的同事创建本地存储库来保存他的实验。

在某些情况下,最好记录一些复杂/独特问题的解决方案,以供参考。我不认为它应该属于代码。我想某种形式的维基是最好的选择

如果您在过去两年中没有使用过该代码,您会使用它吗?如果您使用了,您是否仍在使用已使用两年的代码?如果您需要再次将该逻辑添加到代码中,那么最好从头开始编写,因为在这段时间内,情况很可能已经发生了变化,您将学到很多东西,您将获得更多的资源,等等

他签入的一些注释掉的代码仍然说明了他所做的一些工作