Co oznacza „porcelana” w Git?

433

Termin „porcelana” pojawia się czasami w dokumentacji Git. Co to znaczy?

Jan Hettich
źródło

Odpowiedzi:

515

„Porcelana” to materiał, z którego zwykle wykonane są toalety (a czasem inne urządzenia, takie jak umywalki). Różni się to od „hydrauliki” (rzeczywiste rury i odpływy), gdzie porcelana zapewnia bardziej przyjazny interfejs dla hydrauliki.

Git stosuje tę terminologię analogicznie, aby oddzielić polecenia niskiego poziomu, których użytkownicy zwykle nie muszą używać bezpośrednio („hydraulika”), od bardziej przyjaznych dla użytkownika poleceń wysokiego poziomu („porcelana”).

Greg Hewgill
źródło
45
Myślę, że odpowiedź ma dla mnie sens, ale z drugiej strony zakładam, że Linus był tym, który wymyślił ten termin, więc staram się dostosowywać mój mózg, by był bardziej bezpośredni i szorstki podczas analizowania jego świata. :)
Nick Klauer
58
Zastanawiasz się, czy Linus wyobrażał sobie potencjalne strumienie ekskrementów, których użyłaby jego hydraulika. Instalacja w otwartym kodzie źródłowym jest brudną robotą, ale ktoś musi to zrobić.
Evan Plaice,
36
I niektórzy z nas uważają, że faktyczna porcelana git jest bardziej jak warstwa farby na kanalizacji.
hemflit
14
inna odpowiedź poniżej jest zarówno bardziej prawdziwa, jak i bardziej przydatna
Charney Kaye,
14
czy ktokolwiek inny uważa to za komiczne?
Ben Wilde,
446

Co ważniejsze, termin „porcelana” odnosi się do poleceń wysokiego poziomu , z wyjściem:

  • przeznaczone do odczytania przez człowieka
  • nie przeznaczone do analizy
  • podatne na zmiany / ewolucje

To jest klucz: jeśli piszesz, powinieneś używać, jeśli to możliwe, poleceń hydraulicznych ze stabilnymi wyjściami. Nie porcelanowe polecenia.

Jednakże, można użyć wyjściowe polecenia porcelany, który ma --porcelainopcję w skrypcie (patrz poniżej), takich jak:

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

Chociaż git zawiera własną warstwę porcelany , jego polecenia niskiego poziomu są wystarczające, aby wspierać rozwój alternatywnych porcelan.
Interfejs (wejście, wyjście, zestaw opcji i semantyka) tych poleceń niskiego poziomu ma być znacznie bardziej stabilny niż polecenia poziomu Porcelany, ponieważ te polecenia są głównie do użytku skryptowego .
Z drugiej strony interfejs poleceń porcelany może ulec zmianie, aby poprawić wrażenia użytkownika końcowego.

Zobacz „ Jak programowo ustalić, czy są niezatwierdzone zmiany? ” Jako przykład użycia poleceń hydraulicznych zamiast porcelanowych.


Uwaga: Polecenie porcelanowe może mieć --porcelainopcję.
Na przykład:, git status --porcelainktóry oznacza wynik przeznaczony do przeanalizowania .

--porcelain

Podaj dane wyjściowe w łatwym do przeanalizowania formacie dla skryptów. Jest to podobne do krótkiego wyjścia, ale pozostanie stabilne w wersjach git i niezależnie od konfiguracji użytkownika. Szczegóły poniżej.

Wątek wspomniany powyżej:

To w pewnym stopniu moja wina.
„Krótki stan” jest przeznaczony dla ludzkich gałek ocznych i został zaprojektowany przez Junio.
Niektóre osoby również chciały uzyskać dane wyjściowe o statusie skryptowym, więc uderzyłem „ --porcelain” w ten sam format, który wyłącza konfigurowalne funkcje, takie jak względne nazwy ścieżek i kolorowanie, i daje domyślną obietnicę, że nie wprowadzimy dalszych zmian w formacie.
Chodziło o to, aby uniemożliwić ludziom pisanie skryptów --short, ponieważ nigdy nie miało być stabilne.
Tak, chociaż --porcelainsam w sobie jest stabilny i skryptowalny, być może nie jest najbardziej przyjazny dla analizatorów składni. Format „ -z --porcelain” jest o wiele bardziej korzystny i polecam go każdemu, kto pisze „git status”

To odzwierciedla potrzebę korzystania z porcelanowych poleceń w skryptach przez użytkowników git!
Ale tylko przy stabilnej wydajności (z --porcelain)


Jak skomentował przez william-Berg , to samo dotyczy git push!

--porcelain

Twórz dane wyjściowe do odczytu maszynowego.
Wyjściowa linia statusu dla każdego odwołania będzie oddzielona tabulatorami i wysyłana do stdoutzamiast stderr.
Podane zostaną pełne symboliczne nazwy referencji.


Jak John Glassmyer proponuje w komentarzach :

Być może znaczeniem tego --porcelainjest „produkcja wyjściowa nadająca się do konsumpcji za pomocą skryptów porcelanowych” .

I może to być wspierane przez pierwszy przypadek wprowadzenia „ --porcelainopcji”
(wcześniej git status --porcelain, zatwierdzenie 6f15787, wrzesień 2009, git 1.7.0 ,
wcześniej git push --porcelain, zatwierdzenie 1965ff7, czerwiec 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Pokaż w formacie zaprojektowanym do zużycia przez maszynę.

Commit b5c698d, październik 2006, git 1.4.4

Nowa opcja sprawia, że ​​natywny format wyjściowy polecenia emituje dane wyjściowe, które są łatwiejsze w obsłudze przez Porcelain .

VonC
źródło
2
Zauważam, że git pushma podobnie anomalny odczyt maszynowy --porcelain.
william.berg
13
Być może znaczeniem tego --porcelainjest „produkcja wyjściowa nadająca się do konsumpcji za pomocą skryptów porcelanowych”.
John Glassmyer,
@JohnGlassmyer to bardzo prawdopodobne wytłumaczenie. Zobacz moją zredagowaną odpowiedź (na końcu)
VonC
1
Równieżgit diff-tree --word-diff=porcelain
Nicholas Shanks
1
@PatrickSanan w pewnym sensie tak. Ich wyniki można w niezawodny sposób przeanalizować za pomocą tej opcji.
VonC
57

Moneta i użycie terminu „porcelana” w git zostało faktycznie napisane przez Mike'a Tahta, a poza tym przegrał gorącą dyskusję z Linusem Torvaldsem.

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

W rzeczywistości jedną z moich nadziei było to, że inni SCM mogliby po prostu użyć hydrauliki git.
Ale wtedy naprawdę sugerowałbym, żebyś używał samego „git”, a nie żadnego „ libgit”. To znaczy, że bierzesz całą hydraulikę jako prawdziwe programy i zamiast próbować łączyć się z poszczególnymi procedurami, piszesz ją.

Jeśli tego nie chcesz, nie zrobię tego.
Nadal jednak ma sens oddzielenie kanalizacji od porcelany .

Dave Taht
źródło
7
Ciekawy. +1. Moja własna odpowiedź powyżej pochodzi z używania produktu, ale twój link odwołuje się do źródła, które wydaje się być początkiem tego terminu.
VonC,
21

Porcelana to urocza nazwa programów i pakietów programów w zależności od rdzenia git, prezentująca wysoki poziom dostępu do rdzenia git. Porcelany ujawniają więcej interfejsu SCM niż „hydraulikę”.

- Porcelana , Git Wiki

Johnsyweb
źródło
7

Polecenia porcelanowe są przeznaczone do spożycia przez ludzi, w przeciwieństwie do poleceń, których dane wyjściowe są łatwe do przeanalizowania przez komputery. git statusbyłby jednym przykładem.

dahlbyk
źródło
8
„Porcelana”… „do spożycia przez ludzi”… Mogę jeść szklankę . (tylko żartuję / zauważam mieszaną metaforę dla każdego, kto może łatwo zostać zdezorientowany)
ajm475du
5
Polecenia z porcelany są przeznaczone do spożycia przez ludzi, ale gdy użyjesz tej --porcelainopcji, będą one przeznaczone do spożycia przez maszynę.
ThomasW,
git status --porcelain: Daj wynik w łatwym do przeanalizowania formacie dla skryptów. (...), ale pozostanie stabilny we wszystkich wersjach Git i niezależnie od konfiguracji użytkownika.
tymtam
Dzięki za recenzję. 🙄 Tak, git status --porcelainma stabilny format, który można analizować, ale statussamo polecenie jest zaprojektowane tak, aby było skierowane do użytkownika (w przeciwieństwie do, na przykład, git ls-files).
dahlbyk
7

Krótkie i proste wyjaśnienie

  • Istnieją dwa rodzaje poleceń: „poreclain” i „hydraulika”.
  • Podczas programowania / skryptów nie należy polegać na komendach „ porcelanowych ” : ponieważ mogą się one zmienić i są przeznaczone dla ludzi, a nie maszyn.
  • Do tworzenia skryptów należy używać poleceń „ hydraulicznych ”, ponieważ są one bardziej stabilne i rzadziej się zmieniają.

Ale co z mylącą --porcelainopcją !?

  • Jeśli chcesz: (i) użyć polecenia porcelany ORAZ (ii) chcesz upewnić się, że dane wyjściowe mogą być niezawodnie parsowane (pamiętaj, że polecenia porcelany są przeznaczone tylko dla ludzi, a nie parsowania), możesz dodać --porcelainopcję, a następnie użyj danych wyjściowych do tworzenia skryptów. Zasadniczo autorzy git domyślnie obiecują, że niczego tu nie zmienią, w najbliższym czasie. przykład: mogę używać git status --porcelaini używać danych wyjściowych do tworzenia skryptów, co byłoby całkowicie w porządku.

Skąd się bierze terminologia związana z porcelaną / hydrauliką?

  • Jeśli angielski nie jest twoim pierwszym językiem, Greg Hewgill wyjaśnia to doskonale.
  • Aby uzyskać więcej informacji, sprawdź odpowiedź VonC .
BKSpurgeon
źródło
1
Co z mylącą opcją --porcelain? Zwracam się z tym w mojej odpowiedzi: stackoverflow.com/a/6978402/6309
VonC
Zgoda! Dodałem link do twojej odpowiedzi powyżej:For more detail, checkout VonC's answer.
BKSpurgeon
OK, przynajmniej użycie opcji nazwanej --porcelainna już „porcelanowych” poleceniach w celu osiągnięcia funkcjonalności „pseudo-hydraulicznej” bardzo dobrze komponuje się z ogólnym projektem interfejsu użytkownika Git ...;)
Sz.
1
Nie rozumiem, dlaczego ta opcja nazywa się „porcelaną”. Całe polecenie jest już „porcelanowe”. Należy wywołać tę opcję --plumbing(tym razem jesteś hydraulikiem, a nie zwykłym użytkownikiem „porcelany”).
seeker_of_bacon
3

Odpowiedź Grega Hewgilla jest dokładnie poprawna. Pamiętaj, że dla Git dostępne są alternatywne porcelany, w tym Easy Git, yap, piryt i vng. Każda z nich ma ułatwić Gitowi naukę / korzystanie z niej przez jakąś część społeczności. Linki do wszystkich tych projektów znajdują się na stronie Easy Git: http://people.gnome.org/~newren/eg/ .

Pablo Halpern
źródło
1

Istnieją dwa różne znaczenia porcelany w git.

Te dwa znaczenia, chociaż można argumentować, nie są ze sobą ściśle sprzeczne, mogą wydawać się sprzeczne.

A. Konceptualna (hydraulika kontra porcelana)

Oficjalna książka Pro Git :

Ponieważ jednak Git był początkowo zestawem narzędzi do kontroli wersji, a nie w pełni przyjaznym dla użytkownika VCS, ma wiele podkomend, które wykonują pracę na niskim poziomie i zostały zaprojektowane do łączenia w stylu UNIX lub wywoływania ze skryptów. Polecenia te są ogólnie nazywane poleceniami „Git”, a bardziej przyjazne dla użytkownika polecenia nazywane są „porcelanowymi”.

B. --porcelain/ =porcelainopcje

Wiele poleceń git pochodzą z --porcelainopcji, które jest przeznaczone dla skryptów.

git statusdokumentacja :

--porcelain[=<version>]

Podaj dane wyjściowe w łatwym do przeanalizowania formacie dla skryptów. Jest to podobne do krótkiego wyjścia, ale pozostanie stabilne w wersjach Git i niezależnie od konfiguracji użytkownika. Szczegóły poniżej.

git diff„s dokumentacji :

--word-diff[=<mode>]

porcelana

      Użyj specjalnego formatu liniowego przeznaczonego do użycia skryptu.

tymtam
źródło