Was befindet sich im Ordner "contrib"?

42

Oft haben Open-Source-Softwareprojekte einen Ordner mit dem Namen "contrib". Zum Beispiel hat Django einen . Wofür ist das?

Oberst Panic
quelle
Das Teilen Ihrer Forschung hilft allen . Sagen Sie uns, was Sie versucht haben und warum es nicht Ihren Bedürfnissen entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen, es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten. Siehe auch Wie man fragt
Mücke
11
Die Frage war ziemlich klar, IMO. - "Was ist dieser ContribOrdner, den ich in Projekten sehe?" - "Warum oder warum hätte ein Projekt keine?" - "Gibt es eine Standardkonvention, über die ich Bescheid wissen sollte?"
BrainSlugs83

Antworten:

17

Es ist für Software , die war contrib das Projekt ausgeschüttete, die aber möglicherweise nicht tatsächlich von den Kern - Entwicklern aufrecht erhalten werden. Die Bezeichnung "contrib" oder "Contrib" ist eine seit langem etablierte Konvention, aber der Name ist eigentlich nichts Besonderes und wird normalerweise nur von größeren Projekten verwendet.

Bryan Oakley
quelle
2
Das ist die richtige Antwort.
Blrfl
Mir ist auch aufgefallen, dass Sachen in contrib gelegentlich den Weg in non-contrib finden. Ich nehme an, dass dies impliziert, dass es für eine aktivere Unterstützung und Entwicklung in die Hauptlinie des Projekts aufgenommen wurde.
Pfingsten
1
@fostandy: ja das ist richtig
Bryan Oakley
15

Wenn ich mir beliebte Open-Source-Projekte anschaue, sehe ich keinen Hinweis auf einen „contrib“ -Ordner:

Der einzige Ordner, der über einen Contrib-Ordner verfügt, ist Django. Für Django ist die Rolle dieses Ordners bereits in der Dokumentation erklärt :

Django ist bestrebt, die Python-Philosophie „Batterien inklusive“ zu befolgen. Es wird mit einer Vielzahl von zusätzlichen, optionalen Tools ausgeliefert, mit denen häufig auftretende Probleme bei der Webentwicklung gelöst werden können.

Dieser Code ist django/contribin der Django-Distribution enthalten. Dieses Dokument enthält eine Übersicht über die in contrib enthaltenen Pakete sowie die Abhängigkeiten, die diese Pakete aufweisen.

Kapitel 16 des Django-Buches enthält eine detailliertere Beschreibung der Rolle dieses Verzeichnisses und des Inhaltsverzeichnisses.

Ein anderes Beispiel ist Solr . Mit gitstatskönnen wir die Statistiken über die Mitwirkenden abrufen.

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%

Dann können wir nur das contribVerzeichnis auswählen, indem wir Folgendes ausführen:

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

und die Statistik noch einmal abrufen:

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

Die Top-Autoren sind also praktisch gleich, was bedeutet, dass dies keine Beiträge von Außenstehenden sind. Bei Betrachtung der Verzeichnisse im contribOrdner scheint es sich erneut um „eine Vielzahl zusätzlicher, optionaler Tools“ zu handeln, genau wie in Django. Zum Beispiel benötigen Sie den Datenimport-Anforderungs-Handler nicht, damit Solr funktioniert, aber wenn Sie Daten aus einer Datenbank oder XML importieren möchten, ist es schön, sie in einem contribOrdner zu haben . Das Gleiche gilt für die Kartenreduzierung. Sie brauchen es möglicherweise nicht unbedingt, aber es gibt Fälle, in denen dies der Fall ist.

Sind das Plugins oder Add-Ons? Ich würde diesen Begriff nicht verwenden. Plugins und Add-Ons sind spezifisch in die Hauptanwendung integriert. Zum Beispiel wird erwartet, dass ein Plugin nicht eigenständig ausgeführt wird, sondern in der Hauptanwendung gehostet wird. Auf der anderen Seite contribenthält Tools, die wahrscheinlich eigenständig ausgeführt werden können.

Arseni Mourzenko
quelle
2
Eigentlich habe ich mich gefragt, was genau ein "Beitrag" ist. Solr hat dann auch Grunzen. Ist dies nur ein anderer Begriff für Plugin / Add-On /?
Martyn
@ user3265472: Ich habe meine Antwort so bearbeitet, dass sie Solr enthält. Was Grunt betrifft, sprichst du von diesem ? Ich glaube nicht, dass es ein Contrib-Verzeichnis gibt.
Arseni Mourzenko
Tut mir leid, dass ich einen Ordner von der Frage verpasst habe. Ich habe versucht, den Begriff "Beitragen" selbst zu verstehen. Grunt hat verschiedene Plugins / Bibliotheken (?), Die als solche bezeichnet werden (Grunt-contrib-uglify, Grunt-contrib-jshint usw.). Ihre Beschreibung gibt mir eine bessere Vorstellung, danke.
Martyn
2
Einige Pakete in Debian fallen in eine Klasse von Paketen mit dem Namen 'contrib'. Dies ist, was das Debian-Richtlinienhandbuch dazu sagt. "Pakete in den anderen Archivbereichen (Contrib, Non-Free) werden nicht als Teil der Debian-Distribution angesehen, obwohl wir deren Verwendung unterstützen und ihnen Infrastruktur zur Verfügung stellen (wie z unser Bug-Tracking-System und Mailing-Listen). "
Kevin Wheeler
3
Viele, viele OSS-Projekte, die ich mir im Laufe der Jahre angesehen habe, haben einen Ordner mit dem Namen Contrib(in Akka.NET sehen Sie sich noch einen an)! - Ich habe keine Ahnung, warum sie einen Ordner mit dem Namen haben oder wie die Konvention für diese Namenskonvention lautet. - Keines der bisher erwähnten Dinge scheint auf die Art und Weise zu passen, wie ich "contrib" verwendet habe. - Es scheint, als ob in jedem Projekt ganz andere Dinge stecken (Akka.Net scheint ein gutes Viertel seiner Codebasis zu haben: Akka.Clustering, Logging, DI, Persistence, TestKits, etc ...).
BrainSlugs83
6

Es ist für Bibliotheken oder Komponenten gedacht , die zum Projekt beitragen , aber nicht im Besitz oder Teil des Projekts selbst sind. Ich habe es immer als gemeinsamen oder gemeinsamen Speicherort für von mir verwendete Bibliotheken von Drittanbietern verwendet.

Zum Beispiel könnten Sie haben:

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

Verweisen Sie dann mit relativen Pfaden auf die einzelnen Projektkomponenten, sodass vor dem Erstellen keine Einrichtung oder Konfiguration erforderlich ist. Es wird direkt aus dem Repo erstellt, unabhängig davon, wo es vor Ort ausgecheckt wurde.

Amac
quelle
Ich teile diese Ansicht nicht. Für das, was du beschreibst, verwende ich lieber die Namen vendoroder thirdparty.
moi
2

Git ist ein großartiges Beispiel für Open Source-Software, die diese Konvention verwendet:

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

Hier ist ein relevanter Auszug aus dieser README.md-Datei:

Beigestellte Software

Obwohl diese Stücke als Teil des offiziellen Git-Quellenbaums verfügbar sind, haben sie einen etwas anderen Status. Die Absicht ist es, interessante Tools in der Nähe von Git zu belassen, vielleicht sogar experimentelle, um den Benutzern einen einfacheren Zugang zu ihnen zu ermöglichen und Tools besser zugänglich zu machen, damit sie schneller verbessert werden können.

Ich erwarte nicht, diese selbst so sehr zu berühren. Für meine tägliche Arbeit gehören diese Unterverzeichnisse den jeweiligen Erstautoren. Ich bin bereit zu helfen, wenn Benutzer dieser Komponenten und der "Eigentümer" des Beitrages / Teilbaums technische / gestalterische Probleme zu lösen haben. Die Initiative zur Behebung und / oder Verbesserung von Problemen muss jedoch auf der Seite der Eigentümer des Teilbaums liegen.

Alex W
quelle