什么不应该在源头控制下?

时间:2009-08-13 18:57:53

标签: language-agnostic version-control

对于哪些文件和/或目录不应该(在大多数情况下)处于源代码管理之下,最好有一个或多或少的完整列表。您认为应该排除什么?

到目前为止的建议:

一般

  • 使用敏感信息(密码,私钥等)配置文件
  • Thumbs.db,.DS_Store和desktop.ini
  • 编辑器备份:*〜(emacs)
  • 生成的文件(例如DoxyGen输出)

C#

  • 仓\ *
  • OBJ \ *
  • *。exe文件

Visual Studio

  • *。锁
  • *。NCB
  • *。用户
  • *。APS
  • * .cachefile
  • * .backup
  • _UpgradeReport_Files

爪哇

  • *。类

的Eclipse

我不知道,这就是我现在正在寻找的: - )

的Python

  • *。PYC

临时文件   - 。*。sw?   - *〜

24 个答案:

答案 0 :(得分:42)

生成的任何内容。二进制,字节码,从XML生成的代码/文档。

从我的评论者中,排除:

  • 构建生成的任何内容,包括代码文档(doxygen,javadoc,pydoc等)

但包括:

  • 您没有 OR 来源的第三方图书馆不会构建。

FWIW,在我为一个非常大的项目工作时,我们在ClearCase下有以下内容:

  • 所有原始代码
  • Qt source AND built debug / release
  • (非常过时)规格

我们没有为我们的软件构建模块。每两周发布一个完整的二进制文件,并附上最新的更新。

答案 1 :(得分:18)

特定于操作系统的文件,由其文件浏览器生成 Thumbs.db.DS_Store

答案 2 :(得分:15)

其他一些Visual Studio典型文件/文件夹

*.cachefile 
*.backup 
_UpgradeReport_Files

例如,我的tortoise全局忽略模式看起来像这样

bin obj *.suo *.user *.cachefile *.backup _UpgradeReport_Files

答案 3 :(得分:11)

不应在

中检查

构建的文件

答案 4 :(得分:7)

就像Corey D生成said任何内容一样,特别是构建过程和开发环境生成的任何内容都是很好的候选者。例如:

  • 二进制文件和安装程序
  • 字节码和档案
  • 从XML和代码生成的文档
  • 模板和代码生成器生成的代码
  • IDE设置文件
  • IDE或编辑器生成的备份文件

以上的一些例外情况可能是:

  • 图片和视频
  • 第三方图书馆
  • 特定于团队的IDE设置文件

第三方图书馆,如果您需要发货,或者您的构建依赖于第三方库,将其置于源代码管理之下是不合理的,特别是如果您没有源代码库。还要考虑一些源控制系统在存储二进制blob方面效率不高,你可能无法利用这些文件的系统差异工具。

Paul也对生成的文件做出了很好的评论,你应该查看他的answer

  

基本上,如果你不能合理   期望开发人员具备准确性   他们需要的确切工具的版本,   有一个案例可以把   在版本控制中生成文件。

说到最后,你需要根据具体情况考虑你在源代码管理下的所有内容。定义一个简单的列表,列出什么和什么不放在它下面只会对某些人有效,而且可能只有这么长时间。当然,您添加到源代码控制的文件越多,更新工作副本所需的时间就越长。

答案 5 :(得分:6)

IDE,构建过程或二进制可执行过程可以生成的任何内容。

答案 6 :(得分:6)

例外:

4或5个不同的答案表示生成的文件不应该受源代码控制。那不太正确。

专业工具生成的文件可能属于源代码管理,特别是在需要这些工具的特定版本的情况下。

示例:

  • 由bison / yacc / antlr生成的解析器,
  • autotools文件,例如configure或Makefile.in,由autoconf,automake,libtool等创建,
  • 翻译或本地化文件,
  • 文件可能由昂贵的工具生成,只在几台机器上安装它们可能更便宜。

基本上,如果您无法合理地期望开发人员拥有他们需要的确切版本的确切版本,则可以将生成的文件置于版本控制中。

svn人在best practices talk中讨论了这个例外。

答案 7 :(得分:6)

我会以不同的方式解决问题;什么东西应该包含在源代码管理中?您应该只控制那些文件:

  • (需要修订历史记录或在您的构建之外创建,但它们是构建,安装或媒体的一部分)和
  • 无法由您控制的构建过程生成
  • 对于构建产品的所有用户(无用户配置)都是通用的

该列表包括:

  • 源文件
  • 制作,项目和解决方案文件
  • 其他构建工具配置文件(与用户无关)
  • 第三方图书馆
  • 预先构建的文件,如PDF和&amp ;;文件
  • 文档
  • 图片,视频,声音
  • 描述文件,如WSDL,XSL

有时构建输出可以是构建输入。例如,模糊重命名文件可以是输出和输入以保持相同的重命名方案。在这种情况下,使用签入文件作为构建输入,并将输出放在不同的文件中。构建之后,检查输入文件并将输出文件复制到其中并将其签入。

使用排除列表的问题在于,您永远不会知道所有正确的排除项,并且最终可能会控制源不受源控制的内容。

答案 8 :(得分:5)

来自编辑的临时文件。

.*.sw?
*~

答案 9 :(得分:4)

desktop.ini是我见过的另一个Windows文件。

答案 10 :(得分:3)

实际配置文件如asp.net中的web.config,因为人们可以有不同的设置。通常我处理这个问题的方法是在SVN上安装web.config.template。人们得到它,进行他们想要的更改并将其重命名为web.config。

除此之外以及您所说的内容,请注意包含密码的敏感文件(例如)。

避免使用Windows(拇指)或Mac OS(.ds_store)生成的所有烦人文件

答案 11 :(得分:3)

配置包含密码或任何其他敏感信息的文件。

答案 12 :(得分:2)

由WinMerge制作的

*.bak

答案 13 :(得分:2)

我发现考虑它的最好方法如下:

假装你有一台全新的,商店买的电脑。您安装操作系统和更新;您安装所有开发工具,包括源控制客户端;您创建一个空目录作为本地源的根目录;你做一个“获取最新”或源控制系统调用它来获取你想要构建的发行版的干净副本;然后运行构建(从源代码控制中获取),然后构建所有内容。

这个思维过程告诉你为什么某些文件必须在源代码控制中:构建在一个干净的系统上运行所需的所有文件。这包括.designer.cs文件,T4模板的输出以及构建不会创建的任何其他工件。

答案 14 :(得分:2)

此外:

Visual Studio

  • *。NCB

答案 15 :(得分:1)

不进入源代码管理的东西分为3类

  1. 与项目完全无关的事情(显然)
  2. 可在安装媒体上找到的内容,并且永远不会更改(例如:第三方API)。
  3. 可以通过构建过程从源代码控制中的 (或类2中的内容)中机械生成的东西。

答案 16 :(得分:1)

临时文件,配置除全局开发和敏感信息之外的任何其他内容

答案 17 :(得分:0)

无论语言如何:

  • 缓存文件
  • 通常,导入的文件也不应该(如用户在Web应用程序上上传的图像)
  • 临时文件;甚至是你的操作系统生成的(如windows下的thumbs.db)或IDE
  • 使用密码配置文件?取决于谁有权访问存储库

对于那些不了解它的人:svn:ignore很棒!

答案 18 :(得分:0)

如果您的代码有运行时环境(例如依赖库,特定的编译器版本等),请不要将包放入源代码管理中。我的做法很残酷,但很有效。我提交了一个makefile,它的作用是下载(通过wget)这些东西,解压缩它,并构建我的运行时环境。

答案 19 :(得分:0)

我有一个特殊的.c文件没有进入源代码控制。

规则在构建过程中生成的源代码控制中没有任何内容。

唯一已知的例外是工具是否需要构建自身的旧版本(引导程序问题)。在这种情况下,您需要在源代码管理中使用已知的良好引导副本,以便可以从空白构建。

答案 20 :(得分:0)

在这里走出困境,但我相信如果您在Visual Studio中使用任务列表,它们将保存在.suo文件中。这可能不是将它们保留在源代码管理中的理由,但这是在某处保留备份的原因,以防万一......

答案 21 :(得分:0)

自从提出这个问题以来已经过了很多时间,我认为很多答案虽然相关,却没有关于每种语言或IDE级别的.gitignore的详细信息。

Github推出了一个非常有用的,社区合作的.gitignore文件列表,适用于各种项目和IDE,值得一看。

这是git repo的链接:https://github.com/github/gitignore

要回答这个问题,请参阅以下相关示例:

还有特定于操作系统的.gitignore文件。以下内容:

因此,假设您正在运行 Windows 并使用 Eclipse ,则可以将Eclipse.gitignoreWindows.gitignore连接到{{1}在项目的顶级目录中的文件。非常漂亮的东西。

不要忘记将.gitignore添加到您的回购并提交!

有可能,您的IDE已经为您处理了这个问题。无论如何,Visual Studio都会这样做。

对于.gitignore文件,如果您发现特定.gitignore中缺少任何文件或模式,则可以使用建议的更改在该文件上打开PR。请查看commitpull request跟踪器,了解相关信息。

答案 22 :(得分:0)

我一直使用www.gitignore.io生成一个合适的setConnectHandler('name1')文件。

答案 23 :(得分:-1)

意见:如果需要,一切都可以在源代码控制中,除非它带来重大的存储库开销,例如频繁更改或大块blob。

第三方二进制文件,难以生成(在时间上)生成的文件以加快部署过程,一切正常。

源控制的主要目的是将一个相干系统状态与修订号相匹配。如果有可能的话,我会用代码构建工具和目标操作系统冻结整个宇宙。