Cosa c'è nella cartella "contrib"?


42

Spesso i progetti software open source hanno una cartella chiamata "contrib". Ad esempio, Django ne ha uno . Cosa serve?


Condividere la tua ricerca aiuta tutti . Raccontaci cosa hai provato e perché non ha soddisfatto le tue esigenze. Ciò dimostra che hai impiegato del tempo per cercare di aiutarti, ci salva dal ribadire risposte ovvie e soprattutto ti aiuta a ottenere una risposta più specifica e pertinente. Vedi anche Come chiedere
moscerino

11
La domanda era abbastanza chiara, IMO. - "Cos'è questa Contribcartella che continuo a vedere nei progetti?" - "Perché o perché un progetto non dovrebbe averne uno?" - "Esiste una convenzione standard per questo che dovrei conoscere?"
BrainSlugs83

Risposte:


18

È per il software che ha contribuito al progetto, ma che potrebbe non essere gestito dagli sviluppatori principali. Chiamarlo "contrib" o "Contrib" è una convenzione consolidata da tempo, ma non c'è davvero nulla di speciale nel nome e di solito viene utilizzato solo da progetti abbastanza grandi.


2
Questa è la risposta corretta
Blrfl,

Ho notato anche che le cose in contrib occasionalmente si fanno strada nel non-contrib. Suppongo che ciò implichi che è stato adottato nella linea principale del progetto per un supporto e uno sviluppo più attivi?
Fostandy,

1
@fostandy: sì, è corretto.
Bryan Oakley,

15

Guardando i popolari progetti open source che vengono in mente, non vedo alcuna menzione di alcuna cartella "contrib":

L'unico che ha una cartella "contrib" è Django. Per Django, il ruolo di questa cartella è già spiegato nella documentazione :

Django mira a seguire la filosofia "batterie incluse" di Python. Viene fornito con una varietà di strumenti extra opzionali che risolvono problemi comuni di sviluppo Web.

Questo codice è presente django/contribnella distribuzione Django. Questo documento fornisce una panoramica dei pacchetti in contrib, insieme alle eventuali dipendenze di tali pacchetti.

Il capitolo 16 di The Django Book contiene una descrizione più dettagliata del ruolo di questa directory e dell'elenco dei contenuti.

Un altro esempio è Solr . Con gitstats, possiamo ottenere le statistiche sui contributori.

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%

Quindi, possiamo selezionare solo la contribdirectory eseguendo:

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

e ottieni le statistiche ancora una volta:

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

Quindi i migliori autori sono praticamente gli stessi, il che significa che quelli non sono contributi degli estranei. Guardando le directory all'interno della contribcartella, sembra che, ancora una volta, quelli siano "una varietà di strumenti extra, opzionali", esattamente come in Django. Ad esempio, non è necessario il gestore richieste di importazione dati per far funzionare Solr, ma se si desidera importare dati da database o XML, è bello averli nella contribcartella. Lo stesso vale per la riduzione della mappa, potresti non averne necessariamente bisogno, ma ci sono casi in cui lo fai.

Quei plugin o componenti aggiuntivi? Non userei questo termine. Plugin e componenti aggiuntivi hanno una specifica integrazione con l'applicazione principale. Ad esempio, non è previsto che un plug-in possa essere eseguito autonomamente, ma ospitato all'interno dell'applicazione principale. D'altra parte, contribcontiene strumenti che probabilmente possono essere eseguiti autonomamente.


2
In realtà, mi chiedevo esattamente cosa fosse un "contrib". Solr ha quindi, anche Grunt. È solo un altro termine per plugin / componente aggiuntivo /?
Martyn,

@ user3265472: ho modificato la mia risposta per includere Solr. Per quanto riguarda Grunt, stai parlando di questo ? Non penso che ci sia una directory contrib.
Arseni Mourzenko,

Sì, questo è quello, mi dispiace di aver perso la cartella dalla domanda. Stavo cercando di capire il termine "contrib" da solo. Grunt ha vari plugin / librerie (?) Chiamati come tali (Grunt-contrib-uglify, Grunt-contrib-jshint, ecc.). La tua descrizione mi dà un'idea migliore, grazie.
Martyn,

2
Alcuni pacchetti in Debian rientrano in una classe di pacchetti chiamata 'contrib'. Questo è ciò che il Debian Policy Manual ha da dire al riguardo "I pacchetti nelle altre aree di archivio (contrib, non-free) non sono considerati parte della distribuzione Debian, sebbene ne supportiamo l'uso e forniamo loro l'infrastruttura (come il nostro sistema di tracciamento dei bug e le mailing list). "
Kevin Wheeler,

3
Molti e molti progetti OSS che ho visto negli anni hanno una cartella chiamata Contrib(guardando un altro in questo momento in Akka.NET)! - Non ho idea del perché abbiano una cartella chiamata così, o quale sia la convenzione per questa convenzione di denominazione. - Nessuna delle cose menzionate finora sembra adattarsi a tutti i modi in cui ho visto "contrib" utilizzato. - sembra che ogni progetto contenga cose completamente diverse (Akka.Net sembra mettere un buon quarto della loro base di codice: Akka.Clustering, Logging, DI, Persistence, TestKits, ecc ...).
BrainSlugs83

6

È pensato per librerie o componenti che contribuiscono al progetto, ma non sono di proprietà o fanno parte del progetto stesso. L'ho sempre usato come posizione comune o condivisa per mettere tutte le librerie di terze parti che sto usando.

Ad esempio, potresti avere:

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

Quindi fare riferimento a loro in ciascuno dei componenti del progetto usando percorsi relativi, quindi non è necessario alcun tipo di installazione o configurazione prima di costruirlo. Verrà creato direttamente dal repository, indipendentemente da dove è stato verificato localmente.


Non condivido questa opinione. Per quello che descrivi, preferirei usare i nomi vendoro thirdparty.
moi,

2

Git è un ottimo esempio di software open source che utilizza questa convenzione:

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

Ecco un estratto rilevante da quel file README.md:

Software fornito

Sebbene questi pezzi siano disponibili come parte dell'albero ufficiale di git source, sono in uno stato leggermente diverso. L'intenzione è quella di mantenere strumenti interessanti intorno a git qui, forse anche sperimentali, per consentire agli utenti un accesso più facile a loro e per dare agli strumenti una più ampia esposizione, in modo che possano essere migliorati più velocemente.

Non mi aspetto di toccarli così tanto. Per quanto riguarda la mia operazione quotidiana, queste sottodirectory sono di proprietà dei rispettivi autori principali. Sono disposto ad aiutare se gli utenti di questi componenti e i "proprietari" di contrib / subtree hanno problemi tecnici / di progettazione da risolvere, ma l'iniziativa per correggere e / o migliorare le cose deve essere dalla parte dei proprietari di sottostruttura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.