Что находится в папке «contrib»?

42

Часто проекты с открытым исходным кодом имеют папку с именем contrib. Например, у Django есть один . Для чего это?

Полковник паника
источник
Поделиться своими исследованиями помогает всем . Расскажите нам, что вы пробовали и почему это не соответствует вашим потребностям. Это свидетельствует о том, что вы потратили время, чтобы попытаться помочь себе, избавляет нас от повторения очевидных ответов и, прежде всего, помогает получить более конкретный и актуальный ответ. Также см. Как спросить
Гнат
11
Вопрос был довольно понятен, ИМО. - «Что это за Contribпапка, которую я постоянно вижу в проектах?» - «Почему или почему проект не имеет такого?» - «Есть ли какое-то стандартное соглашение для этого, о котором я должен знать?»
BrainSlugs83

Ответы:

18

Он предназначен для программного обеспечения, которое было внесено в проект, но на самом деле не может поддерживаться основными разработчиками. Называть его «contrib» или «Contrib» является давно установленным соглашением, но в этом имени нет ничего особенного, и обычно оно используется только в довольно крупных проектах.

Брайан Оукли
источник
2
Это правильный ответ.
Blrfl
Я также заметил, что материал в contrib иногда превращается в non-contrib. Я предполагаю, что это означает, что он был принят в основной проект для более активной поддержки и развития?
fostandy
1
@fostandy: да, это правильно.
Брайан Оукли
15

Глядя на популярные проекты с открытым исходным кодом, которые приходят на ум, я не вижу упоминаний ни о какой папке «contrib»:

Единственная папка «contrib» - это Django. Для Django роль этой папки уже объяснена в документации :

Django стремится следовать философии Python «батарейки включены». Он поставляется с множеством дополнительных, дополнительных инструментов, которые решают общие проблемы веб-разработки.

Этот код находится django/contribв дистрибутиве Django. Этот документ дает краткое изложение пакетов в contrib вместе со всеми зависимостями, которые имеют эти пакеты.

Глава 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папке. То же самое относится и к уменьшению карты, оно может вам и не понадобиться, но есть случаи, когда вы это делаете.

Это плагины или дополнения? Я бы не стал использовать этот термин. Плагины и дополнения имеют особую интеграцию с основным приложением. Например, плагин не должен запускаться автономно, но размещается в основном приложении. С другой стороны, contribсодержит инструменты, которые могут работать автономно.

Арсений Мурзенко
источник
2
На самом деле, мне было интересно, что такое «вклад». Солр тоже, Грант тоже. Это просто еще один термин для плагин / надстройка /?
Мартын
@ user3265472: я отредактировал свой ответ, включив в него Solr. Что касается Гранта, ты говоришь об этом ? Я не думаю, что есть каталог contrib.
Арсений Мурзенко
Да, извините, я пропустил папку из вопроса. Я пытался понять термин «вклад» сам. Grunt имеет различные плагины / библиотеки (?), Названные так (Grunt-contrib-uglify, Grunt-contrib-jshint и т. Д.). Ваше описание дает мне лучшую идею, хотя, спасибо.
Мартын
2
Некоторые пакеты в Debian попадают в класс пакетов, называемых «contrib». Вот что говорит об этом руководство по политике Debian: «Пакеты в других областях архива (contrib, non-free) не считаются частью дистрибутива Debian, хотя мы поддерживаем их использование и предоставляем им инфраструктуру (такую ​​как наша система отслеживания ошибок и списки рассылки). "
Кевин Уилер
3
У многих и многих проектов OSS, которые я просматривал на протяжении многих лет, есть папка, которая называется Contrib(глядя на еще один прямо сейчас в Akka.NET)! - Я понятия не имею, почему у них есть папка с таким именем, или что такое соглашение для этого соглашения об именах. - Ничто из упомянутого до сих пор не подходит ко всем способам, которыми я видел "contrib". - похоже, что в каждом проекте есть совершенно разные вещи (Akka.Net, похоже, поместил там четверть своей кодовой базы: Akka.Clustering, Logging, DI, Persistence, TestKits и т. д.).
BrainSlugs83
6

Он предназначен для библиотек или компонентов, которые вносят вклад в проект, но не являются собственностью или частью самого проекта. Я всегда использовал его как общее или общее местоположение для размещения любых сторонних библиотек, которые я использую.

Например, вы можете иметь:

  • / Contrib / log4net-ххх
  • /Contrib/SSH.NET-xxx
  • / BackendService
  • / DesktopUI
  • / GenUtils
  • / SMCore
  • / WebUI

Затем ссылайтесь на них в каждом из компонентов проекта, используя относительные пути, чтобы не было необходимости в какой-либо настройке или настройке перед его сборкой. Он будет построен прямо из репо, независимо от того, где он будет проверен локально.

Amac
источник
Я не разделяю эту точку зрения. Для того, что вы описываете, я бы предпочел использовать имена vendorили thirdparty.
Moi
2

Git - отличный пример программного обеспечения с открытым исходным кодом, которое использует это соглашение:

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

Вот соответствующая выдержка из этого файла README.md:

Программное обеспечение

Хотя эти части доступны как часть официального дерева исходников git, они находятся в несколько ином статусе. Намерение состоит в том, чтобы сохранить интересные инструменты вокруг git, может быть, даже экспериментальные, чтобы предоставить пользователям более легкий доступ к ним и дать инструментам более широкий доступ, чтобы они могли быть улучшены быстрее.

Я не собираюсь трогать их сам. Что касается моей повседневной работы, эти подкаталоги принадлежат их основным авторам. Я готов помочь, если у пользователей этих компонентов и «владельцев» contrib / поддерева есть технические / конструктивные проблемы, которые необходимо решить, но инициатива по исправлению и / или улучшению вещей должна быть на стороне владельцев поддерева.

Алекс W
источник