为什么在Git中忽略IDE特定的项目文件?

时间:2013-01-28 08:51:22

标签: git github ide

我已经看到在Github上发布的许多项目都有一个.gitignore文件,明确排除了与IDE相关的控制文件。这些控制文件广泛用于定义项目及其依赖项。这些可以是.NET的.sln或Eclipse的.project

我想问一下,为什么这种做法被广泛应用或被认为是一种好的做法,考虑到我同意实现IDE中立(不要将开发人员绑定到特定的IDE)是一个很好的原则,一般而言。

相反,这些控制文件通常在多个配置中规定项目依赖关系,配置或编译变量(例如.csproj文件的情况)。

我已经看到大量的开源项目忽略了Eclipse文件,但是到目前为止我没有设置没有项目文件的开发环境(即使我从现有代码创建项目,或创建一个新项目并导入代码,我总是得到编译错误的补充。)

如果项目文件存在于存储库中,那么设置一个“下载代码,导入项目并编译源代码”的开发环境将变得非常简单,但它显然会将开发人员绑定到特定的IDE(这就是不好笑。)

标准化或迁移项目文件超出了问题的范围。

因此,从外部贡献者的角度来看,如何为他从Github下载源代码的项目构建工作和编译项目环境? (克隆所有子模块后,如果需要)

只是选择一个示例项目,我想导入Eclipse,分析并稍加修改,here它是。

3 个答案:

答案 0 :(得分:6)

请注意,csproj文件特定于IDE,而是形成基本项目结构并构建.NET项目的步骤。即使你切换到像SharpDevelop这样完全不同的IDE,你仍然需要它们来运行项目。因此,通常那些不应该在.gitignore文件上。只应排除用户或IDE特定的内容。

答案 1 :(得分:1)

因为有些人不使用这些IDE,而其他人对他们的配置进行了一些调整。更不用说这些IDE特定文件在每个编译步骤后变化太快而且无用。

最好的方法是使用Makefile,Ant文件或其他等效的构建系统,而不是依赖IDE文件。

当然,有些错误是由于缺少库造成的。您必须自己安装它们,在repo中使用IDE文件并不重要。

我通常做的事情:克隆项目,创建构建脚本(如果不存在),将其添加到.git/info/exclude,因为它是特定于机器的。

答案 2 :(得分:1)

Java世界中有很多构建系统(Maven,Gradle,SBT等)。为IDE生成项目文件是一件小事。这使得无需将它们检入版本控制,因为它们可以被视为构建工件。

此外,在混合团队中,不同的人使用不同的IDE,当有人更新Eclipse项目文件时,使用IntelliJ的人突然也需要更新他的项目文件,因为他现在遇到了编译问题。而使用生成这些文件的构建系统,确保它们始终是最新的。以Maven为例,当您将M2Eclipse插件添加到Eclipse或使用IntelliJ时,甚至无需用户交互即可完成。

所以我总是提倡将项目文件添加到.gitignore ...