“ contrib”文件夹中有什么?


42

开源软件项目通常都有一个名为“ contrib”的文件夹。例如,Django有一个。这是为了什么


分享您的研究成果对所有人都有帮助。告诉我们您尝试过的内容以及为什么它不能满足您的需求。这表明您已花时间尝试自我帮助,这使我们免于重复显而易见的答案,并且最重要的是,它可以帮助您获得更具体和相关的答案。另请参见“ 如何问”
2014年

11
IMO,问题很清楚。-“ Contrib我在项目中一直看到的这个文件夹是什么?” -“为什么,或者为什么一个项目没有一个?” -“我应该了解一些标准惯例吗?”
BrainSlugs83 2015年

Answers:


17

这是已被软件的contrib贡献的项目,但是这可能不是实际的核心开发人员进行维护。将其命名为“ contrib”或“ Contrib”是一个历史悠久的约定,但是名称实际上并没有什么特别的,它通常仅由相当大的项目使用。


2
这是正确的答案。
Blrfl

我也注意到,有贡献的东西有时会变成无贡献的东西。我想这暗示着它已经被项目主线采用,以获得更积极的支持和发展?
fostandy

1
@fostandy:是的,这是正确的。
布莱恩·奥克利

15

在考虑流行的开源项目时,我没有提到任何“ contrib”文件夹:

唯一具有“ contrib”文件夹的文件夹是Django。对于Django,此文件夹的作用已在文档中说明

Django旨在遵循Python的“含电池”理念。它附带了许多额外的可选工具,可以解决常见的Web开发问题。

此代码位于django/contribDjango发行版中。本文档简要介绍了软件包的概要以及这些软件包具有的所有依赖关系。

Django Book的第16章包含对该目录的作用和目录的更详细描述。

另一个例子是Solr。使用gitstats,我们可以获得有关贡献者的统计信息。

Robert Muir         22.09%
Michael McCandless  13.60%
Mark Robert Miller   9.73%
Uwe Schindler        8.17%
Yonik Seeley         5.56%
Steven Rowe          5.55%

然后,我们可以contrib通过运行以下命令仅选择目录:

git filter-branch --subdirectory-filter solr/contrib --prune-empty

并再次获得统计信息:

Robert Muir         19.62%
Steven Rowe          8.87%
Mark Robert Miller   8.33%
Uwe Schindler        8.06%
James Dyer           7.80%

因此,顶级作者实际上是相同的,这意味着这些不是外部人士的贡献。查看contrib文件夹中的目录,似乎它们再次是“各种其他可选工具”,与Django中的完全相同。例如,您不需要数据导入请求处理程序即可使Solr工作,但是如果您想从数据库或XML导入数据,最好将其放在contrib文件夹中。与map-reduce相同,您可能不一定需要它,但是在某些情况下您确实需要。

是那些插件或附件吗?我不会用这个词。插件和附加组件与主应用程序具有特定的集成。例如,插件不应独立运行,而是托管在主应用程序中。另一方面,contrib包含可能可以独立运行的工具。


2
实际上,我确实想知道“贡献”是什么。Solr也有,Grunt也有。这仅仅是插件/附加/的另一个术语吗?
马丁·2015年

@ user3265472:我编辑了答案以包含Solr。至于咕unt,您在谈论这个吗?我认为没有contrib目录。
Arseni Mourzenko

是的,很抱歉,我错过了这个问题的文件夹。我想自己理解“贡献”一词。Grunt有各种各样的插件/库(?),它们的名称如此(Grunt-contrib-uglify,Grunt-contrib-jshint等)。谢谢您的描述给了我一个更好的主意。
马丁·2015年

2
Debian中的某些软件包属于称为“ contrib”的软件包类别。这就是Debian政策手册对此所说的:“其他档案区中的软件包(贡献的,非自由的)不被视为Debian发行版的一部分,尽管我们支持它们的使用并为其提供基础设施(例如我们的错误跟踪系统和邮件列表。”
凯文·惠勒

3
多年来,我看过的很多OSS项目都有一个名为Contrib(在Akka.NET中现在又看一个)的文件夹!-我不知道为什么会有一个名为该文件夹的文件夹,或者该命名约定的约定是什么。-到目前为止,提到的所有内容似乎都不符合我所看到的“ contrib”使用的所有方式。-似乎每个项目中都有完全不同的内容(Akka.Net似乎在其中放置了相当一部分代码库:Akka.Clustering,Logging,DI,Persistence,TestKits等)。
BrainSlugs83 2015年

6

它用于对项目有贡献的库或组件,但不属于项目本身也不属于项目本身。我一直将它用作放置我正在使用的任何第三方库的公共或共享位置。

例如,您可能有:

  • /贡献/ log4net-xxx
  • /贡献/SSH.NET-xxx
  • /后端服务
  • /桌面UI
  • / GenUtils
  • / SMCore
  • / WebUI

然后使用相对路径在每个项目组件中引用它们,因此在构建之前不需要任何类型的设置或配置。无论它在本地检出,它都将直接从存储库中构建。


我不同意这种观点。对于您的描述,我宁愿使用名称vendorthirdparty
moi

2

Git是使用此约定的开源软件的一个很好的例子:

https://github.com/git/git/tree/master/contrib

这是该README.md文件的相关摘录:

贡献软件

尽管这些片段可作为官方git源码树的一部分获得,但它们的状态有些不同。目的是在git周围保留有趣的工具,甚至是实验性工具,以使用户更容易访问它们,并为工具提供更广泛的了解,以便可以更快地对其进行改进。

我不希望自己碰那么多。就我的日常操作而言,这些子目录由其各自的主要作者拥有。如果这些组件和contrib /子树“所有者”的用户有要解决的技术/设计问题,我愿意提供帮助,但是修复和/或增强功能的主动权必须在子树所有者方面。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.