Apa yang ada di folder "contrib"?

42

Seringkali proyek perangkat lunak sumber terbuka memiliki folder yang disebut "contrib". Misalnya, Django memilikinya . Untuk apa ini?

Kolonel Panic
sumber
Berbagi penelitian Anda membantu semua orang . Beri tahu kami apa yang telah Anda coba dan mengapa itu tidak memenuhi kebutuhan Anda. Ini menunjukkan bahwa Anda telah meluangkan waktu untuk mencoba membantu diri sendiri, itu menyelamatkan kami dari mengulangi jawaban yang jelas, dan yang paling utama itu membantu Anda mendapatkan jawaban yang lebih spesifik dan relevan. Lihat juga Cara Meminta
nyamuk
11
Pertanyaannya cukup jelas, IMO. - "Apa Contribfolder ini yang terus saya lihat di proyek?" - "Mengapa, atau mengapa suatu proyek tidak memiliki satu?" - "Apakah ada konvensi standar untuk hal ini yang harus saya ketahui?"
BrainSlugs83

Jawaban:

18

Hal ini untuk perangkat lunak yang telah contrib usikan ke proyek, tetapi yang tidak mungkin benar-benar dipertahankan oleh para pengembang inti. Memberinya nama "contrib" atau "Contrib" adalah konvensi yang sudah lama mapan, tetapi sebenarnya tidak ada yang istimewa dengan namanya, dan biasanya hanya digunakan oleh proyek-proyek yang cukup besar.

Bryan Oakley
sumber
2
Ini jawaban yang benar.
Blrfl
Saya perhatikan juga bahwa barang-barang di contrib kadang-kadang akan berubah menjadi non-contrib. Saya kira implikasi dalam hal ini adalah bahwa ia telah diadopsi ke dalam arus utama proyek untuk dukungan dan pengembangan yang lebih aktif?
fostandy
1
@fostandy: ya, itu benar.
Bryan Oakley
15

Melihat proyek open source populer yang muncul dalam pikiran, saya tidak melihat penyebutan folder "contrib":

Satu-satunya yang memiliki folder "contrib" adalah Django. Untuk Django, peran folder ini sudah dijelaskan dalam dokumentasi :

Django bertujuan untuk mengikuti filosofi "baterai termasuk" Python. Ini dikirimkan dengan berbagai alat tambahan opsional yang memecahkan masalah pengembangan Web yang umum.

Kode ini hidup di django/contribdalam distribusi Django. Dokumen ini memberikan ikhtisar paket dalam contrib, bersama dengan setiap dependensi yang dimiliki paket tersebut.

Bab 16 dari The Django Book berisi deskripsi yang lebih rinci tentang peran direktori ini dan daftar konten.

Contoh lain adalah Solr . Dengan gitstats, kita bisa mendapatkan statistik tentang kontributor.

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%

Kemudian, kita hanya dapat memilih contribdirektori dengan menjalankan:

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

dan dapatkan statistik sekali lagi:

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

Jadi penulis teratas praktis sama, yang berarti bahwa itu bukan kontribusi dari pihak luar. Melihat direktori di dalam contribfolder, tampaknya sekali lagi, itu adalah "berbagai alat tambahan, opsional", persis seperti di Django. Misalnya, Anda tidak memerlukan Handler Permintaan Impor Data untuk membuat Solr berfungsi, tetapi jika Anda ingin mengimpor data dari basis data atau XML, senang memilikinya dalam contribfolder. Sama untuk pengurangan peta, Anda mungkin tidak perlu, tetapi ada beberapa kasus di mana Anda melakukannya.

Apakah itu plugin atau add-on? Saya tidak akan menggunakan istilah ini. Pengaya dan pengaya memiliki integrasi spesifik dengan aplikasi utama. Sebagai contoh, sebuah plugin tidak diharapkan untuk menjalankan standalone, tetapi dihosting di dalam aplikasi utama. Di sisi lain, contribberisi alat yang mungkin dapat menjalankan standalone.

Arseni Mourzenko
sumber
2
Sebenarnya, saya bertanya-tanya apa sebenarnya "contrib" itu. Solr telah, Grunt juga. Apakah ini hanya istilah lain untuk plugin / add-on /?
Martyn
@ user3265472: Saya mengedit jawaban saya untuk menyertakan Solr. Adapun Grunt, apakah Anda berbicara tentang ini ? Saya tidak berpikir ada direktori contrib.
Arseni Mourzenko
Ya, itu dia, maaf saya melewatkan folder dari pertanyaan. Saya sangat ingin memahami istilah "contrib" sendiri. Grunt memiliki berbagai plugin / libraries (?) Yang dinamai demikian (Grunt-contrib-uglify, Grunt-contrib-jshint, dll). Deskripsi yang Anda berikan memberi saya ide yang lebih baik, terima kasih.
Martyn
2
Beberapa paket di Debian termasuk dalam kelas paket yang disebut 'contrib'. Inilah yang dikatakan oleh Manual Kebijakan Debian tentang hal itu "Paket-paket di area arsip lain (contrib, non-free) tidak dianggap sebagai bagian dari distribusi Debian, meskipun kami mendukung penggunaannya dan menyediakan infrastruktur untuk mereka (seperti sistem pelacakan bug dan milis kami). "
Kevin Wheeler
3
Banyak dan Banyak proyek OSS yang saya lihat selama bertahun-tahun memiliki folder bernama Contrib(melihat yang lain sekarang di Akka.NET)! - Saya tidak tahu mengapa mereka memiliki folder bernama itu, atau apa konvensi untuk konvensi penamaan ini. - Tak satu pun dari hal-hal yang disebutkan sejauh ini cocok dengan semua cara yang saya lihat "contrib" digunakan. - sepertinya setiap proyek memiliki hal-hal yang benar-benar berbeda di sana (Akka.Net tampaknya menempatkan seperempat basis kode yang bagus di sana: Akka.Clustering, Logging, DI, Kegigihan, TestKits, dll ...).
BrainSlugs83
6

Ini dimaksudkan untuk perpustakaan atau komponen yang berkontribusi pada proyek, tetapi tidak dimiliki atau bagian dari proyek itu sendiri. Saya selalu menggunakannya sebagai lokasi umum atau bersama untuk menempatkan perpustakaan pihak ketiga yang saya gunakan.

Misalnya, Anda mungkin memiliki:

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

Kemudian referensi mereka di masing-masing komponen proyek menggunakan jalur relatif, sehingga tidak ada jenis pengaturan atau konfigurasi yang diperlukan sebelum membangunnya. Itu akan membangun langsung dari repo di mana pun itu diperiksa secara lokal.

Amac
sumber
Saya tidak membagikan pandangan ini. Untuk apa yang Anda jelaskan, saya lebih suka menggunakan nama vendoratau thirdparty.
moi
2

Git adalah contoh yang bagus untuk perangkat lunak sumber terbuka yang menggunakan konvensi ini:

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

Berikut kutipan yang relevan dari file README.md:

Perangkat Lunak Berkontribusi

Meskipun potongan-potongan ini tersedia sebagai bagian dari pohon sumber git resmi, mereka berada dalam status yang agak berbeda. Tujuannya adalah untuk menjaga alat-alat menarik di sekitar git di sini, bahkan mungkin yang eksperimental, untuk memberikan pengguna akses yang lebih mudah kepada mereka, dan untuk memberikan alat paparan yang lebih luas, sehingga mereka dapat ditingkatkan lebih cepat.

Saya tidak berharap untuk menyentuh ini sendiri sebanyak itu. Sejauh menyangkut operasi saya sehari-hari, subdirektori ini dimiliki oleh masing-masing penulis utama. Saya bersedia membantu jika pengguna komponen ini dan "pemilik" contrib / subtree memiliki masalah teknis / desain untuk diselesaikan, tetapi inisiatif untuk memperbaiki dan / atau meningkatkan hal - hal harus berada di sisi pemilik subtree.

Alex W
sumber