代码之家  ›  专栏  ›  技术社区  ›  Bittercoder

什么不应该受到源代码管理?

  •  59
  • Bittercoder  · 技术社区  · 6 年前

    最好有一个或多或少完整的列表,列出哪些文件和/或目录不应该(在大多数情况下)受源代码管理。你认为应该排除哪些因素?

    迄今为止的建议:

    一般来说

    • 使用敏感信息(密码、私钥等)配置文件
    • thumbs.db、.ds_store和desktop.ini
    • 编辑器备份:*(Emacs)
    • 生成的文件(例如doxygen输出)

    C.*

    • 宾*
    • Obj*
    • *EXE

    Visual Studio

    • *苏
    • *NCB
    • *用户
    • *APS
    • *高速缓存
    • *备份
    • _升级报表文件

    爪哇

    • *类

    日食

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

    蟒蛇

    • *

    临时文件 - *.SW? -*~

    24 回复  |  直到 7 年前
        1
  •  42
  •   Corey D    15 年前

    任何产生的东西。二进制,字节码,由XML生成的代码/文档。

    从我的评论中排除:

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

    但包括:

    • 没有源的第三方库 不要建造。

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

    • 所有原始代码
    • qt源代码和编译调试/发布
    • (非常过时的)规格

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

        2
  •  18
  •   pgb    15 年前

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

        3
  •  15
  •   apparat    15 年前

    其他一些visual studio典型的文件/文件夹是

    *.cachefile 
    *.backup 
    _UpgradeReport_Files
    

    例如,我的乌龟全局忽略模式如下所示

    bin obj *.suo *.user *.cachefile *.backup _UpgradeReport_Files
    
        4
  •  11
  •   pmeerw    15 年前

    不应签入生成的文件

        5
  •  7
  •   Nathan Strutz    8 年前

    喜欢 Corey D said 生成的任何东西,特别是由构建过程和开发环境生成的任何东西都是很好的候选者。例如:

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

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

    • 图像和视频
    • 第三方库
    • 特定于团队的IDE设置文件

    以第三方库为例,如果您需要发布或者您的构建依赖于第三方库,那么将其置于源代码控制下是不合理的,特别是如果您没有源代码的话。还可以考虑一些源代码管理系统在存储二进制blob方面效率不高,并且您可能无法利用systems diff工具来存储这些文件。

    Paul 同时对生成的文件做了很好的评论,您应该查看他的 answer :

    基本上,如果你不能合理地 希望开发人员拥有 他们需要的工具的版本, 有理由把 在版本控制中生成的文件。

    所有这些最终都被说出来了,你需要逐个考虑你在源代码管理下做了什么。定义一个什么和什么不放在它下面的硬性清单只对一些人有效,而且可能只会持续很长时间。当然,添加到源代码管理中的文件越多,更新工作副本所需的时间就越长。

        6
  •  6
  •   LiraNuna    15 年前

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

        7
  •  6
  •   Ed Greaves    15 年前

    我会用不同的方法来处理这个问题;什么事情 应该 是否包含在源代码管理中?您应该只对以下文件进行源代码管理:

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

    该列表包括以下内容:

    • 源文件
    • 生成、项目和解决方案文件
    • 其他生成工具配置文件(与用户无关)
    • 第三方库
    • 预先构建的文件,如PDF和文档
    • 文档
    • 图像、视频、声音
    • 描述文件,如wsdl、xsl

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

    使用排除列表的问题是,您永远不会知道所有正确的排除,并且可能最终会控制源代码不应该控制的内容。

        8
  •  6
  •   user10402    15 年前

    例外情况:

    4到5个不同的答案都说生成的文件不应该受源代码管理。这不完全正确。

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

    实例:

    • 由bison/yacc/antlr生成的解析器,
    • 自动工具文件,如configure或makefile.in,由autoconf、automake、libtool等创建,
    • 翻译或本地化文件,
    • 文件可能是由昂贵的工具生成的,而且只在少数几台机器上安装可能更便宜。

    基本上,如果你不能合理地期望开发人员拥有 精确工具的精确版本 他们需要,有一个将生成的文件放入版本控制的案例。

    SVN的人在他们的 best practices talk .

        9
  •  5
  •   John Hyland    15 年前

    编辑器中的临时文件。

    .*.sw?
    *~
    

    等。

        10
  •  4
  •   Jason Berry    15 年前

    desktop.ini 是我看到的另一个windows文件。

        11
  •  3
  •   John Hyland    15 年前

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

        12
  •  3
  •   marcgg    15 年前

    ASP.NET中的Web.CONFIG这样的实际配置文件,因为人们可以有不同的设置。通常我处理这个问题的方法是在svn上有一个web.config.template。人们得到它,做他们想要的更改,并将其重命名为web.config。

    除了这个和你说的,小心包含密码的敏感文件(例如)。

    避免所有由Windows(Thumb)或Mac OS(.ds_store)生成的烦人文件

        13
  •  2
  •   Sam Harwell    15 年前

    *.bak 由WinMerge生成。

        14
  •  2
  •   ufukgun    15 年前

    另外:

    Visual Studio

    • *NCB
        15
  •  2
  •   John Saunders    15 年前

    我认为最好的办法是:

    假装你有一台全新的,商店买的电脑。安装操作系统和更新;安装所有开发工具,包括源代码管理客户端;创建一个空目录作为本地源的根目录;执行“获取最新版本”或源代码管理系统调用的任何操作,以获取所需版本的干净副本构建;然后运行构建(从源代码管理获取),所有内容都将构建。

    这个思想过程告诉您为什么某些文件必须在源代码管理中:所有这些都是构建在干净系统上工作所必需的。这包括.designer.cs文件、t4模板的输出以及生成将不会创建的任何其他工件。

        16
  •  1
  •   Codebeef    15 年前

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

        17
  •  1
  •   T.E.D.    15 年前

    不属于源代码管理的东西分为三类

    1. 与项目完全无关的事情(显然)
    2. 可以在安装介质上找到的东西,并且永远不会改变(例如:第三方API)。
    3. 可以通过你的构建过程机械地生成的东西,从 在源代码管理中(或从类2中的内容)。
        18
  •  0
  •   Pascal MARTIN    15 年前

    不管是什么语言:

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

    对于那些不知道的人: svn:ignore 太棒了!

        19
  •  0
  •   Stefano Borini    15 年前

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

        20
  •  0
  •   Joshua    15 年前

    我有一个不在源代码管理中的特定.c文件。

    规则在源代码管理中不是在生成过程中生成的。

    唯一已知的异常是,如果工具需要自己的旧版本来构建(引导问题)。在这种情况下,您需要在源代码管理中知道一个良好的引导复制,这样您就可以从空白中构建。

        21
  •  0
  •   Benjol    15 年前

    但我相信,如果在visual studio中使用任务列表,它们会保存在.suo文件中。这可能不是让它们保持在源代码管理中的原因,但这是在某处保留备份的原因,以防万一……

        22
  •  0
  •   Ehtesh Choudhury    8 年前

    这个问题被问了很多时间,我认为很多答案,而相关的,没有详细的细节。 .gitignore 在每种语言或IDE级别上。

    Github提供了一个非常有用的社区协作列表 吉蒂格诺 各种项目和ide的文件,值得一看。

    以下是Git回购的链接: https://github.com/github/gitignore

    为了回答这个问题,以下是相关的示例:

    也有操作系统特定的 吉蒂格诺 文件夹。以下:

    所以,假设你在跑步 窗户 并使用 日食 你可以连接起来 Eclipse.gitignore Windows.gitignore 到A 吉蒂格诺 文件位于项目的顶层目录中。很漂亮的东西。

    别忘了将.gitignore添加到您的repo中并提交它!

    很可能,您的ide已经为您处理了这个问题。无论如何,visual studio是这样做的。

    为了 吉蒂格诺 文件,如果在特定的 吉蒂格诺 你可以在提议的变更文件上打开一个PR。看看 commit pull request 想法追踪者。

        23
  •  0
  •   Jacek Krawczyk    7 年前

    我总是用 www.gitignore.io 产生一个合适的 .ignore 文件。

        24
  •  -1
  •   Pavel Radzivilovsky    15 年前

    意见:如果需要的话,任何东西都可以在源代码管理中,除非它带来了大量的存储开销,如频繁更改或大的斑点。

    第三方二进制文件,很难生成(按时间计算)生成的文件来加快部署过程,一切正常。

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