在版本控制下放什么?

mmu*_*lva 19 version-control

几乎任何IDE都会创建许多与正在开发的应用程序无关的文件,它们由IDE生成并保留,因此他知道如何构建应用程序,版本控制存储库等等.

这些文件是否应该保留在版本控制下以及与aplication有关的文件(源代码,应用程序的配置文件......)?

事情是:在某些IDE上,如果您创建一个新项目,然后使用IDE中嵌入的版本控制客户端/命令将其导入版本控制存储库,那么所有这些文件都将被发送到respitory.而且我不确定这是对的:在同一个项目上工作的两个不同的开发人员想要使用两个不同的IDE?


我想让这个问题不可知,避免引用任何特定的IDE,编程语言或版本控制系统.所以这个问题与这些问题并不完全相同:

Aar*_*lla 18

经验法则:

  1. 包括对构建结果有影响的所有内容(编译器选项,文件编码,ASCII /二进制设置等)
  2. 包含所有内容,以便可以从干净的结帐中打开项目,并且无需任何进一步的手动干预即可编译/运行/测试/调试/部署项目
  3. 不包含包含绝对路径的文件
  4. 避免包括个人喜好(标签大小,颜色,窗口位置)

遵循此顺序中的规则.

[更新]始终存在生成代码应该发生什么的问题.根据经验,我总是把那些置于版本控制之下.一如既往,采取这种规则与一粒盐.

我的理由:

版本化生成的代码似乎浪费时间.它产生了吗?我只需按一下按钮就可以恢复!

真?

如果你必须咬紧牙关,并且必定会生成一些先前版本的完全相同版本,那将会付出多少努力?生成代码时,您不仅需要正确获取所有输入文件,还必须为代码生成器本身转回时间.你能做到吗?总是?如果您将其置于版本控制之下,那么检查生成的代码的某个版本会非常简单吗?

即使你可以,你能不能确定没有错过什么?

因此,一方面,将生成的代码置于版本控制之下是有意义的,因为它使得很容易做到VCS的用途:回到过去.

此外,它可以很容易地看到差异.代码生成器也是错误的.如果我修复了一个错误并生成了150'000个文件,那么当我将它们与之前的版本进行比较时,它会有很大的帮助,以便看到a)错误消失了b)没有其他意外的变化.这是您应该担心的意外部分.如果不这样做,让我知道,我会确保你永远为我公司工作 :-)

代码生成器的主要痛点是稳定性.当你的代码生成器每次运行时只吐出随机乱七八糟的字节时,它就不会这样做(好吧,除非你不关心质量).代码生成器需要稳定且具有确定性.使用相同的输入运行它们两次,输出必须相同,直到最低位.

因此,如果您无法检入生成的代码,因为生成器的每次运行都会产生不存在的差异,那么您的代码生成器就会出现错误.修理它.必要时对代码进行排序.使用保留顺序的哈希映射.尽一切可能使输出非随机.就像你在代码中的其他地方一样.

我可能不会在版本控制下生成的代码将是文档.文档有点软目标.当我重新生成错误版本的文档时(例如,它或多或少有一些错别字),这并不重要.但对于发行版,我可能会这样做,所以我可以看到版本之间的差异.例如,可能有用,以确保发行说明完整.

我也没有签入JAR文件.因为我可以完全控制整个构建并完全相信我可以在一分钟内找回任何版本的源代码加上我知道我有一切必要的构建它而无需任何进一步的手动干预,为什么我需要可执行文件?再次,将它们放入特殊的发行版回购中可能是有意义的,但最好还是在公司的Web服务器上保留最近三年的副本以进行下载.想一想:比较二进制文件很难,并没有告诉你太多.

  • 我实际上同意1和2 100%.能够获得源代码的副本,输入"ant run"或者某些东西,然后继续前进是非常重要的.我甚至会包含我依赖的库的源代码或二进制代码.我对这种方法非常满意; 它比要求所有开发人员每次有新依赖项时下载和安装一些东西要好得多. (6认同)
  • 规则1和2完全错误.它们适用于分发tarball,但不适用于VCS. (2认同)
  • 版本控制生成的代码是良好的SQL数据库开发工作流程的一部分.首先,使用您喜欢的任何工具创建实时数据库.然后使用工具生成描述每个对象的CREATE脚本.要对数据库结构进行版本控制,所有脚本都将进入版本控制.在应用程序开发术语中,它有点像从二进制文件开始并反编译它以获取源代码.很奇怪,是吗? (2认同)

sfu*_*ger 6

我认为最好将任何版本控制下来,以帮助开发人员快速入门,忽略可能由IDE或构建工具自动生成的任何内容(例如,Maven的eclipse插件生成.project和.classpath - 无需检查这些内容).特别要避免经常更改的文件,除了用户首选项之外什么都没有,或IDE之间的冲突(例如,像eclipse一样使用.project的另一个IDE).

对于eclipse用户,我发现添加代码样式(.settings/org.eclipse.jdt.core.prefs - 启用保存时自动格式化)以获得一致格式化的代码特别方便.