Що означає термін "фарфор" у Git?


433

Термін "порцеляна" періодично з'являється в документації на Git. Що це означає?

Відповіді:


515

"Порцеляна" - це матеріал, з якого зазвичай виготовляються унітази (а іноді й інші світильники, такі як умивальники). Це відрізняється від "сантехніки" (власне труби та каналізації), де порцеляна забезпечує більш зручний інтерфейс для сантехніки.

Git використовує цю термінологію аналогічно, щоб відокремити команди низького рівня, якими користувачі, як правило, не повинні користуватися безпосередньо ("сантехніка") від більш зручних команд високого рівня ("фарфор").


45
Я думаю, що відповідь має сенс для мене, але знову ж таки, я припускаю, що саме Лінус придумав цей термін, тому я прагну підлаштовувати мозок, щоб бути трохи більш прямим і лукавим, коли розбирав його світ. :)
Нік Клауер

58
Змушує замислитися, якби Лінус уявляв потенційні потоки екскрементів, які його водопровід використовував би для транспортування. Сантехніка з відкритим кодом - це брудна робота, але хтось повинен це зробити.
Еван Плейс

36
І мало хто з нас відчуває, що власне порцеляна з ґіту більше нагадує шар фарби над сантехнікою.
hemflit

14
інша відповідь нижче є правдивішою та кориснішою
Charney Kaye

14
хтось ще вважає це комічним?
Бен Уайльд

446

Що ще важливіше, термін "порцеляна" застосовується до команд високого рівня , з виходом:

  • означав бути читаним людиною
  • не призначений для розбору
  • сприйнятливі до змін / еволюцій

Це головне: якщо ви сценарій, ви повинні використовувати по можливості сантехнічні команди зі стабільними виходами. Не порцелянові команди.

Однак ви можете використовувати вихід порцелянової команди, яка має --porcelainпараметр у сценарії (див. Нижче), наприклад:

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

Хоча git включає свій власний шар порцеляни , його команди низького рівня є достатніми для підтримки розвитку альтернативних порцеляни.
Інтерфейс (введення, вихід, набір опцій та семантика) цих команд низького рівня повинен бути набагато стабільнішим, ніж команди рівня порцелянового рівня, оскільки ці команди в основному призначені для сценаріїв .
З іншого боку, інтерфейс порцелянових команд може бути змінений, щоб покращити якість роботи кінцевого користувача.

Див. " Як я програмно визначити, чи немає змін? ", Як приклад використання сантехнічних команд замість порцелянових.


Примітка: Порцелянова команда може мати --porcelainопцію.
Наприклад:, git status --porcelainякий позначає вихід, призначений для розбору .

--porcelain

Дайте вихід у простому для розбору форматі для сценаріїв. Це схоже на короткий вихід, але залишатиметься стабільним у всіх версіях git та незалежно від конфігурації користувача. Детальніше дивіться нижче.

Нитка згаданих вище деталей:

Це я певною мірою винен.
«Коротке положення» форма має в вигляді для людини очних яблук, і була розроблена Junio.
Деякі люди також хотіли отримати сценарій вихідного статусу, тому я " --porcelain" ударив " " у тому ж форматі, який вимикає такі налаштовані функції, як відносні назви шляхів і кольоровість, і дає неявну обіцянку, що ми не будемо вносити подальші зміни у формат.
Ідея полягала в тому, щоб не допустити, щоб люди писали навколо себе --short, бо він ніколи не мав на меті бути стабільним.
Так так, хоча --porcelainсам по собі є стабільним і чудовим, це, мабуть, не найдобріше для парсерів. Формат " -z --porcelain" набагато більше, і я рекомендував би його всім, хто сценаріює навколо "git status"

Це відображає потребу користувачів git у використанні порцелянових команд у своїх сценаріях!
Але тільки при стабільному виході (з --porcelain)


Як зазначив по ВІЛЬЯМ-айсберг , те ж саме можна сказати git push!

--porcelain

Отримайте машиночитаний вихід.
Рядок статусу виводу для кожного посилання буде відокремлено вкладками та надіслано stdoutзамість stderr.
Будуть вказані повні символічні назви посилань.


Як пропонує Джон Глассмер у коментарях :

Можливо, сенс --porcelainтут полягає в тому, щоб "отримати вихід, придатний для споживання порцеляновими сценаріями" .

І це може бути підтверджено першим випадком введення " --porcelainваріанту"
(раніше git status --porcelain, фіксувати 6f15787, вересень 2009, git 1.7.0 ,
раніше git push --porcelain, виконувати 1965ff7, червень 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Показуйте у форматі, призначеному для споживання машини.

Комітет b5c698d, жовтень 2006 р., Git 1.4.4

Нова опція забезпечує вихідний вихідний формат команди, щоб виводити висновок, який простіше працювати з Porcelain .


2
Я помічаю, git pushмає аналогічну аномальну машиночитабельність --porcelain.
william.berg

13
Можливо, сенс --porcelainтут полягає в тому, щоб "отримати вихід, придатний для споживання порцеляновими сценаріями".
Джон Глассмер

@JohnGlassmyer - це дуже ймовірне пояснення. Дивіться мою відредаговану відповідь (наприкінці)
VonC

1
Такожgit diff-tree --word-diff=porcelain
Ніколас Шенкс

1
@PatrickSanan у певному сенсі, так. Їх вихід може бути надійно проаналізований за допомогою цього варіанту.
VonC

57

Намикання та використання терміна "порцеляна" в git насправді був Майком Тахом, інакше втратив гарячий аргумент з Лінусом Торвальдсом.

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

Насправді, одна з моїх сподівань полягала в тому, що інші SCM можуть просто використовувати сантехніку.
Але тоді я б дійсно запропонував вам використовувати "git" сам, а не будь-який " libgit". Тобто ви приймаєте всю сантехніку як справжню програму, і замість того, щоб намагатися з'єднатись з окремими підпрограмами, ви б її скриптували .

Якщо ви цього не хочете, я цього не зроблю.
Все ж має сенс відокремити сантехніку від порцеляни .


7
Цікаво. +1. Моя відповідь вище - це використання продукту, але ваше посилання посилається на те, що, здається, є походженням цього терміна.
VonC

21

Порцеляна - це мила назва програм та наборів програм залежно від core git, що пропонує доступ до core git високого рівня. Порцеляни викривають більше інтерфейс SCM, ніж "сантехнік".

- Порцеляна , Git Wiki


7

Порцелянові команди призначені для споживання людиною, на відміну від команд, вихід яких для комп'ютерів легко розбирати. git statusбув би одним із прикладів.


8
"Порцеляна" ... "для споживання людиною" ... Я можу з'їсти склянку . (просто жартую / відзначаю змішану метафору для всіх, кого можна легко сплутати)
ajm475du

5
Порцелянові команди призначені для споживання людиною, але коли ви використовуєте --porcelainваріант, це для споживання машиною.
ThomasW

git status --porcelain: Дайте вихід у простому для розбору форматі для сценаріїв. (...), але залишатиметься стабільним у всіх версіях Git і незалежно від конфігурації користувача.
tymtam

Дякуємо за голосування. 🙄 Так, git status --porcelainмає стабільний формат, який можна проаналізувати, але сама statusкоманда призначена для обраного користувача (на відміну від, наприклад, git ls-files).
dahlbyk

7

Коротке та просте пояснення

  • Існує два типи команд: "poreclain" і "сантехніка".
  • На " Порцелянові " команди не слід покладатися при програмуванні / написанні сценаріїв: тому що вони, ймовірно, змінюються і призначені для людей, а не для машин.
  • Команди " сантехніка " повинні використовуватися для сценаріїв, оскільки вони стабільніші і рідше змінюються.

А як щодо заплутаного --porcelainваріанту !?

  • Якщо ви хочете: (i) використовувати фарфорову команду AND (ii) ви хочете переконатися, що вихід може бути надійно проаналізований (пам'ятайте, що порцелянові команди призначені лише для людей, а не для їх розбору), тоді ви можете додати --porcelainпараметр, а потім використовувати вихід для сценаріїв. В основному, автори git явно обіцяють не змінити нічого там найближчим часом. Приклад: Я можу використовувати git status --porcelainта використовувати вихідний сценарій, і це було б цілком нормально.

Звідки береться термінологія порцеляна / сантехніка?


1
Як щодо заплутаного варіанту - порцеляни? Звертаюся , що в своїй відповіді: stackoverflow.com/a/6978402/6309
VonC

домовились! Я додав посилання на вашу саму відповідь вище:For more detail, checkout VonC's answer.
BKSpurgeon

Гаразд, принаймні використовуючи параметр, названий --porcelainна вже "порцелянових" командах для досягнення "псевдопровідної" функціональності, дуже гарно поєднується із загальним дизайном інтерфейсу Git ...;)
Sz.

1
Я не розумію, чому цю опцію називають "фарфор". Вся команда вже "порцелянова". Варіант слід зателефонувати --plumbing(оскільки на цей раз ви сантехнік, а не звичайний користувач "порцеляни").
seeker_of_bacon

3

Відповідь Грега Хьюгілла точно правильна. Зауважте, що для Git доступні альтернативні порцеляни, зокрема Easy Git, yap, pyrite та vng. Кожна з них покликана полегшити навчання Git для деякої частини громади. Посилання на всі ці проекти знаходяться на сторінці Easy Git: http://people.gnome.org/~newren/eg/ .



1

Існує два чітких значення порцеляни в git.

Ці два значення, хоча це можна стверджувати, не є суворо суперечливими, але можуть здаватися суперечливими.

A. Концептуальні (сантехніка проти порцеляни)

Офіційна книга Pro Git :

Але оскільки Git спочатку був інструментарієм для системи управління версіями, а не повноцінною користувальницькою системою VCS, він має ряд підкоманд, які виконують низькорівневі роботи та були розроблені для того, щоб бути пов'язаними разом у стилі UNIX або викликатись із скриптів. Ці команди, як правило, називаються "сантехнічними" командами Гіта, тоді як більш зручні команди називаються "порцеляновими" командами.

Б. --porcelain/ =porcelainваріанти

Багато команд git поставляються з --porcelainопцією , призначеною для сценаріїв.

git status' документація :

--porcelain[=<version>]

Дайте вихід у простому для розбору форматі для сценаріїв. Це схоже на короткий вихід, але залишатиметься стабільним у всіх версіях Git та незалежно від конфігурації користувача. Детальніше дивіться нижче.

git diff«S документація :

--word-diff[=<mode>]

порцеляна

      Використовуйте спеціальний лінійний формат, призначений для споживання сценарію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.