Apa arti istilah "porselen" dalam Git?

435

Istilah "porselen" muncul sesekali dalam dokumentasi Git. Apa artinya?

Jan Hettich
sumber

Jawaban:

516

"Porcelain" adalah bahan dari mana toilet biasanya dibuat (dan kadang-kadang perlengkapan lainnya seperti wastafel). Ini berbeda dari "pipa ledeng" (pipa dan saluran air yang sebenarnya), di mana porselen menyediakan antarmuka yang lebih ramah pengguna ke pipa ledeng.

Git menggunakan terminologi ini dalam analogi, untuk memisahkan perintah tingkat rendah yang biasanya tidak perlu digunakan pengguna secara langsung ("plumbing") dari perintah tingkat tinggi yang lebih ramah pengguna ("porselen").

Greg Hewgill
sumber
45
Saya pikir jawabannya masuk akal bagi saya, tetapi sekali lagi, saya berasumsi Linus adalah orang yang menciptakan istilah, jadi saya cenderung menyesuaikan otak saya menjadi sedikit lebih langsung dan kasar ketika mengurai dunianya. :)
Nick Klauer
58
Membuat Anda bertanya-tanya apakah Linus sedang membayangkan potensi aliran kotoran yang akan digunakan pipa salurannya. Memipakan kode sumber terbuka adalah pekerjaan kotor, tetapi seseorang harus melakukannya.
Evan Plaice
36
Dan beberapa dari kita merasa bahwa porselen git yang sebenarnya lebih seperti lapisan cat di atas pipa.
hemflit
14
jawaban lain di bawah ini lebih benar dan lebih bermanfaat
Charney Kaye
14
apakah orang lain menganggap ini lucu?
Ben Wilde
447

Lebih penting lagi, istilah "porselen" berlaku untuk perintah tingkat tinggi , dengan output:

  • dimaksudkan untuk dibaca oleh manusia
  • tidak dimaksudkan untuk diuraikan
  • rentan terhadap perubahan / evolusi

Itu kuncinya: jika Anda skrip, Anda harus menggunakan perintah plumbing jika mungkin , dengan output yang stabil. Bukan perintah porselen.

Namun, Anda dapat menggunakan output dari perintah porselen yang memiliki --porcelainopsi dalam skrip (lihat di bawah), seperti:

git status --porcelain
git push --porcelain
git blame --porcelain

Meskipun git menyertakan lapisan porselennya sendiri , perintah tingkat rendahnya cukup untuk mendukung pengembangan porselen alternatif.
Antarmuka (input, output, set opsi dan semantik) untuk perintah tingkat rendah ini dimaksudkan untuk menjadi jauh lebih stabil daripada perintah tingkat Porcelain, karena perintah ini terutama untuk penggunaan skrip .
Antarmuka ke perintah Porcelain dapat berubah untuk meningkatkan pengalaman pengguna akhir.

Lihat " Bagaimana cara saya menentukan secara program apakah ada perubahan yang tidak dikomit? " Sebagai contoh untuk menggunakan perintah plumbing alih-alih yang porselen.


Catatan: Perintah porselen dapat memiliki --porcelainopsi.
Misalnya:, git status --porcelainyang menunjukkan output yang ingin diuraikan .

--porcelain

Berikan hasil dalam format skrip yang mudah diurai. Ini mirip dengan output pendek, tetapi akan tetap stabil di versi git dan terlepas dari konfigurasi pengguna. Lihat di bawah untuk detailnya.

Utas yang disebutkan di atas merinci:

Ini salahku, sampai taraf tertentu.
The "status pendek" bentuk yang dimaksudkan untuk bola mata manusia, dan dirancang oleh Junio.
Beberapa orang juga menginginkan keluaran status yang dapat di-skrip, jadi saya menampar " --porcelain" pada format yang sama yang mematikan fitur yang dapat dikonfigurasi seperti nama jalur relatif dan pewarnaan, dan membuat janji tersirat bahwa kita tidak akan membuat perubahan lebih lanjut pada format.
Idenya adalah untuk mencegah orang dari skrip sekitar --short, karena tidak pernah dimaksudkan untuk menjadi stabil
Jadi ya, sementara --porcelaindengan sendirinya adalah stabil dan scriptable, itu mungkin bukan yang paling ramah untuk parser. Format " -z --porcelain" lebih dari itu, dan saya akan merekomendasikan ini kepada siapa pun yang menulis "git status"

Itu mencerminkan kebutuhan, bagi pengguna git, untuk menggunakan perintah porselen dalam skrip mereka!
Tetapi hanya dengan output yang stabil (dengan --porcelain)


Seperti yang dikomentari oleh william-berg , hal yang sama berlaku untuk git push!

--porcelain

Menghasilkan keluaran yang bisa dibaca mesin.
Baris status output untuk setiap referensi akan dipisahkan dan dikirim ke tab stdoutalih-alih stderr.
Nama simbolis lengkap dari referensi akan diberikan.


Seperti John Glassmyer usulkan dalam komentar :

Mungkin yang dimaksud di --porcelainsini adalah "menghasilkan keluaran yang cocok untuk dikonsumsi oleh skrip porselen" .

Dan itu bisa didukung oleh kasus pertama dari --porcelainpengenalan "opsi"
(sebelum git status --porcelain, komit 6f15787, September 2009, git 1.7.0 ,
sebelumnya git push --porcelain, komit 1965ff7, Juni 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Tampilkan dalam format yang dirancang untuk konsumsi mesin.

Commit b5c698d, Oktober 2006, git 1.4.4

Opsi baru membuat format output asli perintah untuk mengeluarkan output yang lebih mudah ditangani oleh Porcelain .

VONC
sumber
2
Saya perhatikan git pushmemiliki mesin yang juga dapat dibaca --porcelain.
william.berg
13
Mungkin yang dimaksud di --porcelainsini adalah "menghasilkan keluaran yang cocok untuk dikonsumsi oleh skrip porselen".
John Glassmyer
@JohnGlassmyer memang penjelasan yang sangat mungkin. Lihat jawaban saya yang diedit (di akhir)
VonC
1
Jugagit diff-tree --word-diff=porcelain
Nicholas Shanks
1
@ Patrickanan dalam arti tertentu, ya. Output mereka dapat diurai dengan andal dengan opsi itu.
VonC
57

Mata uang dan penggunaan istilah "porselen" dalam git sebenarnya oleh Mike Taht, sementara sebaliknya kehilangan perdebatan sengit dengan Linus Torvalds.

http://www.gelato.unsw.edu.au/archives/git/0504/0881.html

Bahkan, salah satu harapan saya adalah bahwa SCM lain hanya bisa menggunakan pipa git.
Tapi kemudian saya benar-benar menyarankan agar Anda menggunakan "git" itu sendiri, bukan " libgit". Yaitu, Anda mengambil semua pipa ledeng sebagai program nyata, dan alih-alih mencoba menautkannya dengan rutinitas individu, Anda akan menuliskannya .

Jika Anda tidak menginginkannya, saya tidak akan melakukannya.
Tetap masuk akal untuk memisahkan pipa dari porselen .

dave itu
sumber
7
Menarik. +1. Jawaban saya sendiri di atas adalah dari menggunakan produk, tetapi tautan Anda merujuk apa yang tampaknya menjadi asal dari istilah itu.
VonC
21

Porcelain adalah nama yang lucu untuk program dan suite program tergantung pada core git, menghadirkan akses tingkat tinggi ke core git. Porcelains memperlihatkan lebih banyak antarmuka SCM daripada "plumbing".

- Porselen , Git Wiki

Johnsyweb
sumber
7

Perintah porselen dirancang untuk konsumsi manusia, berbeda dengan perintah yang outputnya mudah diurai oleh komputer. git statusakan menjadi salah satu contohnya.

dahlbyk
sumber
8
"Porcelain" ... "untuk konsumsi manusia" ... Aku bisa makan gelas . (hanya bercanda / mencatat metafora campuran untuk siapa saja yang mungkin mudah bingung)
ajm475du
5
Perintah porselen adalah untuk konsumsi manusia, tetapi ketika Anda menggunakan --porcelainopsi, itu untuk konsumsi mesin.
ThomasW
git status --porcelain: Berikan output dalam format skrip yang mudah diurai. (...) tetapi akan tetap stabil di seluruh versi Git dan terlepas dari konfigurasi pengguna.
tymtam
Terima kasih untuk downvote. 🙄 Ya, git status --porcelainmemiliki format stabil yang dapat diuraikan, tetapi statusperintah itu sendiri dirancang untuk menghadap pengguna (sebagai lawan, misalnya, git ls-files).
dahlbyk
7

Penjelasan Singkat dan Sederhana

  • Ada dua jenis perintah: "poreclain" dan "plumbing".
  • " Porcelain " perintah tidak diandalkan ketika pemrograman / scripting: karena mereka cenderung perubahan, dan dimaksudkan untuk manusia bukan mesin.
  • " Pipa " perintah harus digunakan untuk scripting, karena mereka lebih stabil, dan cenderung perubahan.

Tapi bagaimana dengan --porcelainpilihan yang membingungkan !?

  • Jika Anda ingin: (i) menggunakan perintah porselen DAN (ii) Anda ingin memastikan bahwa output dapat diuraikan secara andal (ingat, perintah porselen dimaksudkan hanya untuk manusia dan bukan penguraian), maka Anda dapat menambahkan --porcelainopsi lalu gunakan output untuk skrip. Pada dasarnya penulis git secara implisit berjanji untuk tidak mengubah apa pun di sana, dalam waktu dekat. contoh: Saya dapat menggunakan git status --porcelaindan menggunakan output untuk skrip dan itu akan baik-baik saja.

Dari mana asal istilah porselen / pipa ledeng?

  • Jika bahasa Inggris bukan bahasa pertama Anda maka Greg Hewgill menjelaskannya dengan sempurna.
  • Untuk lebih detail, cek jawaban VonC .
BKSpurgeon
sumber
1
Bagaimana dengan opsi --porcelain yang membingungkan? Saya mengatasinya dalam jawaban saya: stackoverflow.com/a/6978402/6309
VonC
sepakat! Saya telah menambahkan tautan ke jawaban Anda di atas:For more detail, checkout VonC's answer.
BKSpurgeon
OK, setidaknya menggunakan opsi bernama --porcelainpada perintah "porselen" yang sudah ada untuk mencapai fungsionalitas "pseudo-plumbing" berpadu dengan sangat baik dengan desain UI umum Git ...;)
Sz.
1
Saya tidak mengerti mengapa opsi ini disebut "porselen". Seluruh perintah sudah "porselen". Opsi harus dipanggil --plumbing(karena Anda tukang ledeng kali ini, bukan pengguna "porselen" biasa).
seeker_of_bacon
3

Jawaban Greg Hewgill tepat sekali. Perhatikan bahwa ada porselen alternatif yang tersedia untuk Git, termasuk Easy Git, yap, pyrite, dan vng. Masing-masing dimaksudkan untuk membuat Git lebih mudah dipelajari / digunakan untuk beberapa bagian dari komunitas. Tautan ke semua proyek ini ada di halaman Easy Git: http://people.gnome.org/~newren/eg/ .

Pablo Halpern
sumber
1

Ada dua arti porselen berbeda di git.

Kedua makna ini, meskipun dapat diperdebatkan tidak sepenuhnya bertentangan, dapat muncul kontradiktif.

A. Konseptual (pipa vs porselen)

Buku Pro Git resmi :

Tetapi karena Git awalnya merupakan toolkit untuk sistem kontrol versi daripada VCS yang ramah pengguna, ia memiliki sejumlah sub-perintah yang melakukan pekerjaan tingkat rendah dan dirancang untuk dirantai bersama-sama dengan gaya UNIX atau dipanggil dari skrip. Perintah-perintah ini umumnya disebut sebagai perintah "plumbing" Git, sedangkan perintah yang lebih ramah pengguna disebut perintah "porselen".

B. --porcelain/ =porcelainopsi

Banyak perintah git datang dengan --porcelainopsi yang sedang dimaksudkan untuk scripting.

git status' dokumentasi :

--porcelain[=<version>]

Berikan hasil dalam format skrip yang mudah diurai. Ini mirip dengan keluaran pendek, tetapi akan tetap stabil di versi Git dan terlepas dari konfigurasi pengguna. Lihat di bawah untuk detailnya.

git diff's dokumentasi :

--word-diff[=<mode>]

porselen

      Gunakan format berbasis garis khusus yang ditujukan untuk konsumsi skrip.

tymtam
sumber