什么不应该在源代码控制之下?
对于不应该(在大多数情况下)不应该受源代码pipe理的文件和/或目录,或多或less有一个完整的列表将是很好的。 你认为应该排除什么?
build议到目前为止:
一般来说
- configuration敏感信息文件(密码,私钥等)
- Thumbs.db,.DS_Store和desktop.ini
- 编辑备份:*〜(emacs)
- 生成的文件(例如DoxyGen输出)
C#
- BIN \ *
- OBJ \ *。
- *。可执行程序
视觉工作室
- 名为.suo *
- * .NCB
- *。用户
- * .APS
- * .cachefile
- *的.backup
- _UpgradeReport_Files
Java的
- *。类
蚀
我不知道,这就是我正在寻找的:-)
python
- * .pyc文件
临时文件 – 。*。sw? – *〜
任何产生的东西。 二进制,字节码,从XML生成的代码/文档。
从我的评论者,排除:
- 构build生成的任何东西,包括代码文档(doxygen,javadoc,pydoc等)
但是包括:
- 第三方库,你没有源或OR不build立。
FWIW,在我为一个非常大的项目所做的工作中,我们在ClearCase下有以下内容:
- 所有原始代码
- Qt源代码,并构builddebugging/发布
- (非常过时)的规格
我们没有为我们的软件build立模块。 一个完整的二进制文件每两周发布一次最新的更新。
操作系统特定的文件,由其文件浏览器(如Thumbs.db
和.DS_Store
其他一些Visual Studio典型的文件/文件夹是
*.cachefile *.backup _UpgradeReport_Files
例如,我的乌龟全局忽略模式是这样的
bin obj *.suo *.user *.cachefile *.backup _UpgradeReport_Files
build立的文件不应该被检入
像Corey D曾经说过的任何东西,特别是构build过程和开发环境所产生的东西都是很好的候选者。 例如:
- 二进制文件和安装程序
- 字节码和档案
- 从XML和代码生成的文档
- 由模板和代码生成器生成的代码
- IDE设置文件
- 备份由IDE或编辑器生成的文件
以上的一些例外情况可能是:
- 图像和video
- 第三方库
- 团队特定的IDE设置文件
以第三方库为例,如果您需要发货,或者您的版本取决于第三方库,将其置于源代码控制之下并不合理,特别是如果您没有源代码。 另外考虑一些源代码pipe理系统在存储二进制blob方面效率不高,你可能无法利用这些文件的系统diff工具。
保罗还对生成的文件做出了很好的评论,你应该看看他的答案 :
基本上,如果您不能合理地期望开发人员具有他们所需的确切工具的确切版本,则可以将生成的文件放入版本控制中。
尽pipe如此,最终你还是需要考虑一下你在源代码控制下的情况。 定义一个什么和什么不要放在它下面的硬清单只会有一些,而且可能只有这么长时间。 当然,添加到源代码控制的文件越多,更新工作副本的时间就越长。
我会以不同的方式处理这个问题。 什么东西应该包括在源代码pipe理中? 你应该只能控制那些文件:
- (需要修改历史OR是在你的构build之外创build的,但是构build,安装或媒体的一部分)
- 不能由您控制AND的构build过程生成
- 所有build立产品的用户都是共同的(没有用户configuration)
该清单包括如下内容:
- 源文件
- 制作,项目和解决scheme文件
- 其他构build工具configuration文件(与用户无关)
- 第三方库
- 预先构build的文件,如PDF和文档媒体上
- 文件
- 图像,video,声音
- 描述文件,如WSDL,XSL
有时,构build输出可以是构buildinput。 例如,模糊重命名文件可能是输出和input以保持相同的重命名scheme。 在这种情况下,使用签入的文件作为构buildinput,并将输出放在不同的文件中。 构build完成后,检查input文件并将输出文件复制到其中,并将其检入。
使用排除列表的问题是,你永远不会知道所有的排除,并可能最终控制源不应该被源代码控制的东西。
一个例外:
有4或5个不同的答案说,生成的文件不应该在源代码pipe理下进行。 这不完全正确。
由专业工具生成的文件可能属于源代码pipe理,特别是如果这些工具的特定版本是必要的。
例子:
- 由bison / yacc / antlr生成的parsing器,
- autotools文件,如configure或Makefile.in,由autoconf,automake,libtool等创build,
- 翻译或本地化文件,
- 文件可能是由昂贵的工具生成的,而且仅仅在几台机器上安装它们可能会更便宜。
基本上,如果您不能合理地期望开发人员具有他们所需的确切工具的确切版本 ,则可以将生成的文件放入版本控制中。
这个例外是由svn家伙在他们的最佳实践谈话中讨论的 。
来自编辑器的临时文件。
.*.sw? *~
等等
任何可以由IDE生成的,构build进程或二进制可执行进程。
desktop.ini
是我见过的另一个窗口文件。
configuration包含密码或任何其他敏感信息的文件。
实际的configuration文件,如asp.net中的web.config,因为人们可以有不同的设置。 通常我处理这个的方式是通过一个SVN上的web.config.template。 人们得到它,做出他们想要的改变,并将其重命名为web.config。
除了这个以及你所说的,要小心包含密码的敏感文件(例如)。
避免所有由Windows(拇指)或Mac OS(.ds_store)生成的烦人文件
WinMerge生成的*.bak
。
另外:
视觉工作室
- * .NCB
我发现想到的最好的方法如下:
假装你有一个全新的,商店买电脑。 您安装操作系统和更新; 你安装了所有的开发工具,包括源代码pipe理客户端; 你创build一个空目录作为本地源的根目录; 你做一个“得到最新的”,或者你的源代码控制系统调用它来获取你想要构build的版本的干净副本; 然后运行构build(从源代码控制中获取),然后构build一切。
这个思考过程告诉你为什么某些文件必须在源代码控制中:构build在一个干净的系统上工作所需的那些文件。 这包括.designer.cs文件,T4模板的输出以及构build不会创build的任何其他工件。
临时文件,configuration除全球发展和敏感信息以外的任何东西
无论什么语言:
- caching文件
- 一般来说,导入的文件不应该(如用户上传的图像,在Web应用程序上)
- 临时文件; 甚至是由您的操作系统(如windows下的thumbs.db)或IDE生成的
- 用密码configuration文件? 取决于谁可以访问存储库
而对于那些不了解的人来说: svn:ignore
!
没有进入源代码pipe理的东西有三类
- 与项目完全无关的东西(显然)
- 可以在安装媒体上find的东西,永远不会改变(例如:第三方API)。
- 可以通过构build过程从源代码控制的东西(或者类2中的东西)机械生成的东西。
如果您的代码有运行时环境(例如,依赖库,特定的编译器版本等),则不要将这些包放入源代码pipe理中。 我的方法是残酷的,但有效的。 我提交了一个makefile,其作用是下载(通过wget)的东西,解压缩,并build立我的运行时环境。
我有一个特定的.c文件,不在源代码pipe理中。
该规则在构build过程中生成的源代码pipe理中是没有的。
唯一已知的例外是,如果一个工具需要自己的旧版本来build立(引导问题)。 在这种情况下,您需要在源代码pipe理中使用已知的良好引导副本,以便从空白处构build。
在这里出去走走,但我相信如果你在Visual Studio中使用任务列表,它们将保存在.suo文件中。 这可能不是让他们在源代码pipe理的原因,但这是一个保持备份的原因,以防万一…
意见:如果需要的话,任何东西都可以在源代码控制中,除非它带来了诸如频繁更改或大块的大量资源库开销。
第三方二进制文件,难以生成(在时间上)生成的文件,以加快您的部署过程,一切都好。
源代码控制的主要目的是将一个连贯的系统状态与一个版本号相匹配。 如果可能的话,我会用代码构build工具和目标操作系统来冻结整个宇宙。
这个问题问了很多时间,我认为很多答案在相关的时候都没有关于.gitignore
的每个语言或者IDE级别的细节。
Github提出了一个非常有用的社区协作的.gitignore
文件列表,用于各种项目和IDE,值得一看。
这里有一个链接到这个git repo: https : //github.com/github/gitignore
要回答这个问题,下面是相关的例子:
- C# – >请参阅Visual Studio
- 视觉工作室
- Java的
- 蚀
- python
也有操作系统特定的.gitignore
文件。 以下:
- 视窗
- OS X
- Linux的
因此,假设您正在运行Windows并使用Eclipse ,则可以将Eclipse.gitignore
和Windows.gitignore
连接到项目顶级目录中的.gitignore
文件。 非常漂亮的东西。
不要忘记将.gitignore添加到您的回购中,并将其提交!
机会是,你的IDE已经为你处理这个。 Visual Studio不pipe怎样。
对于.gitignore
文件,如果在特定的.gitignore
看到任何文件或模式丢失,则可以使用build议的更改在该文件上打开PR。 看看提交和拉请求追踪器的想法。