Що знаходиться в папці "contrib"?


42

Найчастіше програмні проекти з відкритим кодом мають папку під назвою "contrib". Наприклад, у Джанго є такий . Навіщо це?


Обмін дослідженнями допомагає всім . Розкажіть, що ви пробували і чому це не відповідало вашим потребам. Це свідчить про те, що ви знайшли час, щоб спробувати допомогти собі, це позбавляє нас від повторення очевидних відповідей, а найбільше це допомагає вам отримати більш конкретну та релевантну відповідь. Також дивіться Як просити
gnat

11
Питання було досить ясним, ІМО. - "Яку Contribпапку я бачу в проектах?" - "Чому, або чому проект не мав би його?" - "Чи існує якась стандартна конвенція для цього, про яку я повинен знати?"
BrainSlugs83

Відповіді:


18

Це програмне забезпечення , яке вже було вно соновской до проекту, але які не можуть бути фактично підтримується основними розробниками. Назвати його "contrib" або "Contrib" - це давно встановлена ​​конвенція, але насправді в назві немає нічого особливого, і зазвичай його використовують лише досить великі проекти.


2
Це правильна відповідь.
Blrfl

Я також зауважував, що інколи в contrib буде періодично проникати в не-внесок. Я гадаю, що наслідком цього є те, що він був прийнятий до основної лінії проекту для активнішої підтримки та розвитку?
fostandy

1
@fostandy: так, це правильно.
Брайан Оуклі

15

Дивлячись на популярні проекти з відкритим кодом, які мають на увазі, я не бачу жодної папки "contrib":

Єдина, яка має папку "contrib" - це Django. Для Django роль цієї папки вже пояснена в документації :

Django прагне дотримуватися філософії Python "включені батареї". Він постачається з різноманітними додатковими, необов'язковими інструментами, які вирішують поширені проблеми веб-розробки.

Цей код існує в django/contribдистрибуції Django. Цей документ дає змогу скинути пакунки в додаток, а також будь-які залежності, які вони мають.

Глава 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. Щодо Грунта, ти говориш про це ? Я не думаю, що існує каталог дописів.
Арсеній Муренко

Так це, вибачте, що я пропустив папку з питання. Я прив’язувався до розуміння терміна "внесок" сам. Grunt має різні плагіни / бібліотеки (?), Названі як такі (Grunt-contrib-uglify, Grunt-contrib-jshint тощо). Ваш опис дає мені кращу ідею, дякую.
Мартін

2
Деякі пакети в Debian потрапляють у клас пакунків, який називається "contrib". Це те, що про це має сказати в Посібнику з політик Debian "Пакети в інших областях архіву (внесок, невільний) не вважаються частиною дистрибутива Debian, хоча ми підтримуємо їх використання та надаємо інфраструктуру для них (наприклад, наша система відстеження помилок та списки розсилки). "
Кевін Вілер

3
Багато і багато проектів OSS, які я переглядав протягом багатьох років, має папку під назвою Contrib(дивлячись ще на одну зараз в Akka.NET)! - Я не маю поняття, чому вони мають папку з таким ім'ям, або що це за умова цього іменування. - Жодна з речей, про які говорилося до цього часу, здається, не відповідає всім способам, якими я бачив "внесок". - здається, що у кожного проекту є абсолютно різні речі (Akka.Net, здається, розмістив там добру чверть своєї кодової бази: Akka.Clustering, Logging, DI, Persistent, TestKits тощо).
BrainSlugs83

6

Він призначений для бібліотек або компонентів, які вносять внесок у проект, але не належать до нього або є частиною самого проекту. Я завжди використовував це як загальне або спільне місце для розміщення будь-яких сторонніх бібліотек, якими я користуюся.

Наприклад, у вас можуть бути:

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

Потім посилайтеся на них у кожному з компонентів проекту, використовуючи відносні шляхи, щоб не було потрібних налаштувань або конфігурацій, перш ніж будувати його. Він будуватиметься прямо з репо, незалежно від того, де це перевірено місцево.


Я не поділяю цю думку. За те , що ви описали, я б вважав за краще використовувати імена vendorабо thirdparty.
moi

2

Git - прекрасний приклад програмного забезпечення з відкритим кодом, який використовує цю конвенцію:

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

Ось відповідний уривок із цього файлу README.md:

Програмне забезпечення, що надається

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

Я не сподіваюся, що я так сильно їх торкнуся. Що стосується моєї щоденної роботи, то ці підкаталоги належать їх відповідним первинним авторам. Я готовий допомогти, якщо у користувачів цих компонентів та власників contrib / subtree є технічні / конструкторські проблеми для вирішення, але ініціатива виправити та / або покращити речі повинна бути на стороні власників підкреслень.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.