Co znajduje się w folderze „contrib”?

42

Często projekty oprogramowania open source mają folder o nazwie „contrib”. Na przykład Django ma jeden . Po co to jest?

Pułkownik Panika
źródło
Udostępnianie badań pomaga wszystkim . Powiedz nam, co próbowałeś i dlaczego nie spełnia twoich potrzeb. To pokazuje, że poświęciłeś trochę czasu, aby spróbować sobie pomóc, oszczędza nam to powtarzania oczywistych odpowiedzi, a przede wszystkim pomaga uzyskać bardziej konkretną i odpowiednią odpowiedź. Zobacz także How to Ask
gnat
11
Pytanie było dość jasne, IMO. - „Co to za Contribfolder, który wciąż widzę w projektach?” - „Dlaczego lub dlaczego projekt nie miałby takiego?” - „Czy istnieje jakaś standardowa konwencja w tej sprawie, o której powinienem wiedzieć?”
BrainSlugs83

Odpowiedzi:

18

Jest za oprogramowanie, które zostało contrib oddziaływał na projekcie, ale nie w rzeczywistości może być utrzymana przez twórców bazowych. Nazywanie go „contrib” lub „Contrib” jest od dawna przyjętą konwencją, ale tak naprawdę nie ma w tym nic specjalnego, a zwykle używa się go tylko w dość dużych projektach.

Bryan Oakley
źródło
2
To jest poprawna odpowiedź.
Blrfl
Zauważyłem również, że rzeczy w contrib czasami trafiają do non-contrib. Podejrzewam, że implikacją jest to, że została ona przyjęta do głównej linii projektu w celu bardziej aktywnego wsparcia i rozwoju?
fostandy
1
@fostandy: tak, to prawda.
Bryan Oakley
15

Patrząc na popularne projekty open source, które przychodzą na myśl, nie widzę wzmianki o żadnym folderze „contrib”:

Jedynym, który ma folder „contrib” jest Django. W przypadku Django rola tego folderu została już wyjaśniona w dokumentacji :

Django dąży do przestrzegania filozofii Pythona „dołączone baterie”. Dostarczany jest z szeregiem dodatkowych, opcjonalnych narzędzi, które rozwiązują typowe problemy z tworzeniem stron internetowych.

Ten kod znajduje się w django/contribdystrybucji Django. Ten dokument zawiera podsumowanie pakietów w contrib, wraz z wszelkimi zależnościami, jakie mają te pakiety.

Rozdział 16 Księgi Django zawiera bardziej szczegółowy opis roli tego katalogu i spis treści.

Innym przykładem jest Solr . Dzięki gitstatsmożemy uzyskać statystyki dotyczące autorów.

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%

Następnie możemy wybrać tylko contribkatalog, uruchamiając:

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

i uzyskaj statystyki jeszcze raz:

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

Zatem najlepsi autorzy są praktycznie tacy sami, co oznacza, że ​​nie są to wypowiedzi osób postronnych. Patrząc na katalogi w contribfolderze, wydaje się, że po raz kolejny są to „różnorodne dodatkowe, opcjonalne narzędzia”, dokładnie tak jak w Django. Na przykład nie potrzebujesz modułu obsługi żądania importu danych, aby Solr działał, ale jeśli chcesz importować dane z bazy danych lub XML, dobrze jest mieć je w contribfolderze. To samo dotyczy zmniejszania mapy, niekoniecznie będziesz jej potrzebować, ale są przypadki, w których to robisz.

Czy to są wtyczki lub dodatki? Nie użyłbym tego terminu. Wtyczki i dodatki mają specyficzną integrację z główną aplikacją. Na przykład wtyczka nie powinna działać autonomicznie, ale będzie hostowana w głównej aplikacji. Z drugiej strony contribzawiera narzędzia, które prawdopodobnie mogą działać samodzielnie.

Arseni Mourzenko
źródło
2
Właściwie zastanawiałem się dokładnie, czym jest „wkład”. Solr ma, Grunt też. Czy to tylko kolejny termin na wtyczkę / dodatek /?
Martyn
@ user3265472: Zredagowałem swoją odpowiedź, aby uwzględnić Solr. Co do Grunta, mówisz o tym ? Nie sądzę, że istnieje katalog contrib.
Arseni Mourzenko
Tak, to jest ten, przepraszam, że brakowało mi folderu z pytania. Próbowałem zrozumieć termin „wnieść wkład”. Grunt ma tak zwane różne wtyczki / biblioteki (?) (Grunt-contrib-uglify, Grunt-contrib-jshint itp.). Podany opis daje mi lepszy pomysł, dzięki.
Martyn
2
Niektóre pakiety w Debianie należą do klasy pakietów zwanych „contrib”. Tak mówi o tym Podręcznik Polityki Debiana „Pakiety w innych obszarach archiwów (contrib, non-free) nie są uważane za część dystrybucji Debiana, chociaż wspieramy ich użycie i zapewniamy infrastrukturę dla nich (np. nasz system śledzenia błędów i listy mailingowe). ”
Kevin Wheeler
3
Wiele projektów OSS, na które patrzyłem przez lata, ma folder o nazwie Contrib(patrząc na jeszcze jeden w Akka.NET)! - Nie mam pojęcia, dlaczego mają taki folder, ani jaka jest konwencja dla tej konwencji nazewnictwa. - Żadna z wyżej wymienionych rzeczy nie wydaje się pasować do wszystkich sposobów, w jakie widziałem użycie „contrib”. - wygląda na to, że każdy projekt ma tam zupełnie inne rzeczy (Akka.Net wydaje się, że umieszcza tam dobrą ćwierć swojej bazy kodu: Akka.Klastry, Logowanie, DI, Trwałość, Zestawy testowe itp.).
BrainSlugs83
6

Jest przeznaczony dla bibliotek lub komponentów, które wnoszą wkład do projektu, ale nie są własnością ani częścią samego projektu. Zawsze używałem go jako wspólnej lub współdzielonej lokalizacji do umieszczania dowolnych bibliotek stron trzecich, których używam.

Na przykład możesz mieć:

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

Następnie odwołaj się do nich w każdym ze składników projektu, używając ścieżek względnych, aby nie było potrzeby instalowania ani konfigurowania przed budowaniem. Będzie budować bezpośrednio z repozytorium bez względu na to, gdzie jest sprawdzane lokalnie.

Amac
źródło
Nie udostępniam tego widoku. Do tego, co opisujesz, wolałbym używać nazw vendorlub thirdparty.
moi
2

Git jest doskonałym przykładem oprogramowania typu open source, które korzysta z tej konwencji:

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

Oto odpowiedni fragment tego pliku README.md:

Oprogramowanie wnoszone

Chociaż te elementy są dostępne jako część oficjalnego drzewa źródeł git, mają nieco inny status. Chodzi o to, aby trzymać tutaj interesujące narzędzia, może nawet eksperymentalne, aby zapewnić użytkownikom łatwiejszy dostęp do nich i dać narzędziom szerszą ekspozycję, aby można je było szybciej ulepszyć.

Nie oczekuję, że dotknę ich tak bardzo. Jeśli chodzi o moją codzienną działalność, te podkatalogi są własnością ich głównych autorów. Jestem gotów pomóc, jeśli użytkownicy tych komponentów i „właściciele” kontrybutu / poddrzewa mają problemy techniczne / projektowe do rozwiązania, ale inicjatywa naprawy i / lub ulepszenia musi być po stronie właścicieli poddrzewa.

Alex W.
źródło