Что означает термин «фарфор» в Git?

435

Термин «фарфор» иногда появляется в документации Git. Что это значит?

Ян Хеттих
источник

Ответы:

516

«Фарфор» - это материал, из которого обычно делаются туалеты (а иногда и другие приспособления, такие как раковины). Это отличается от «сантехники» (настоящие трубы и стоки), где фарфор обеспечивает более удобный интерфейс для сантехники.

Git использует эту терминологию по аналогии, чтобы отделить низкоуровневые команды, которые обычно не нужны пользователям («сантехника»), от более удобных для пользователя высокоуровневых команд («фарфор»).

Грег Хьюгилл
источник
45
Я думаю, что ответ имеет смысл для меня, но опять же, я предполагаю, что именно Линус придумал этот термин, поэтому я склонен настраивать свой мозг, чтобы быть немного более прямым и грубым при анализе своего мира. :)
Ник Клауэр
58
Заставляет задуматься, представлял ли Линус потенциальные потоки экскрементов, которые он использовал для транспортировки. Сантехника для открытого исходного кода - грязная работа, но кто-то должен это делать.
Эван Плейс
36
И некоторые из нас считают, что настоящий мерзавец больше похож на слой краски над сантехникой.
Хемфлит
14
другой ответ ниже более правдив и более полезен
Чарни Кей
14
кто-нибудь еще находит это смешным?
Бен Уайльд
447

Что еще более важно, термин «фарфор» применяется к командам высокого уровня , с выводом:

  • предназначен для чтения человеком
  • не предназначен для анализа
  • подвержен изменениям / эволюции

Это ключевой момент: если вы пишете сценарий, вы должны использовать, если возможно, сантехнические команды со стабильными выходными данными. Не фарфоровые команды.

Однако вы можете использовать вывод команды фарфора, которая имеет --porcelainпараметр в скрипте (см. Ниже), например:

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

Хотя git включает в себя собственный слой фарфора , его команд низкого уровня достаточно для поддержки разработки альтернативных фарфоров.
Интерфейс (ввод, вывод, набор параметров и семантика) этих команд низкого уровня должен быть намного более стабильным, чем команды уровня фарфора, потому что эти команды в основном предназначены для использования по сценарию .
С другой стороны, интерфейс к командам Porcelain может быть изменен, чтобы улучшить взаимодействие с конечным пользователем.

См. « Как программно определить, есть ли незафиксированные изменения? », Как пример использования сантехнических команд вместо фарфоровых.


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

--porcelain

Дайте вывод в простом для анализа формате для сценариев. Это похоже на короткий вывод, но останется стабильным во всех версиях git и независимо от конфигурации пользователя. Смотрите ниже для деталей.

В теме упомянутых выше деталей:

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

Это отражает необходимость для пользователей git использовать фарфоровые команды в своих скриптах!
Но только со стабильным выходом (с --porcelain)


Как отметил по УИЛЬЯМ-айсберг , то же самое можно сказать git push!

--porcelain

Произведите машиночитаемый вывод.
Выходная строка состояния для каждой ссылки будет разделена табуляцией и отправлена stdoutвместо stderr.
Будут приведены полные символические имена рефери.


Как предлагает Джон Глассмайер в комментариях :

Возможно, значение --porcelainздесь - «производить продукцию, пригодную для потребления фарфоровыми сценариями» .

И это может быть поддержано самым первым случаем --porcelainвведения « option»
(до git status --porcelain, commit 6f15787, сентябрь 2009 г., git 1.7.0 ,
до git push --porcelain, коммит 1965ff7, июнь 2009 г., git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Показывать в формате, предназначенном для машинного потребления.

Commit b5c698d, октябрь 2006 г., git 1.4.4

Новая опция позволяет исходному формату команды генерировать выходные данные, которые легче обрабатывать с помощью фарфора .

VonC
источник
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-сантехнику.
Но тогда я бы действительно предложил вам использовать "git", а не " libgit". Т.е. вы воспринимаете всю сантехнику как настоящие программы, и вместо того, чтобы пытаться связать отдельные подпрограммы, вы пишете сценарий .

Если ты этого не хочешь, я этого не сделаю.
Тем не менее имеет смысл отделить сантехнику от фарфора , хотя.

Дейв Тат
источник
7
Интересно. +1. Мой собственный ответ выше от использования продукта, но ваша ссылка ссылается на то, что кажется источником этого термина.
VonC
21

Porcelain - это симпатичное название для программ и наборов программ в зависимости от ядра git, обеспечивающее высокий уровень доступа к ядру git. Porcelains раскрывают больше интерфейса SCM, чем «водопровод».

- Фарфор , Git Wiki

Johnsyweb
источник
7

Фарфоровые команды предназначены для потребления человеком, в отличие от команд, вывод которых легко анализировать на компьютерах. git statusбыл бы один пример.

dahlbyk
источник
8
"Фарфор" ... "для потребления человеком" ... я могу есть стекло . (
шутка / замечание
5
Фарфоровые команды предназначены для потребления человеком, но когда вы используете --porcelainопцию, они предназначены для потребления машиной.
ThomasW
git status --porcelain: Предоставить вывод в простом для анализа формате для сценариев. (...) но останется стабильным во всех версиях Git и независимо от конфигурации пользователя.
тымтам
Спасибо за отрицание. 🙄 Да, git status --porcelainимеет стабильный формат, который можно анализировать, но сама statusкоманда предназначена для работы с пользователем (в отличие, например, от git ls-files).
dahlbyk
7

Краткое и простое объяснение

  • Существует два типа команд: «Пореч» и «Сантехника».
  • « Фарфоровые » команды не должны следует полагаться при программировании / написании сценариев: поскольку они могут измениться и предназначены для людей, а не для машин.
  • Команды « слесарного дела » должны использоваться для сценариев, потому что они более стабильны и менее подвержены изменению.

Но как насчет запутанного --porcelainварианта !?

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

Откуда происходит терминология фарфора / сантехники?

BKSpurgeon
источник
1
Как насчет запутанной опции --porcelain? Я обращаюсь к этому в своем ответе: 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/ .

Пабло Халперн
источник
2

Porcelain - это симпатичное название для программ и наборов программ в зависимости от ядра git, обеспечивающее высокий уровень доступа к ядру git.

https://git.wiki.kernel.org/index.php/Porcelain

Андре Пуэль
источник
1

В git есть два разных значения фарфора.

Эти два значения, хотя можно утверждать, что они не являются строго противоречивыми, могут показаться противоречивыми.

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

Официальная книга про Git :

Но поскольку Git изначально был набором инструментов для системы управления версиями, а не полностью удобной для пользователя VCS, он имеет ряд подкоманд, выполняющих низкоуровневую работу и предназначенных для объединения в единый стиль UNIX или вызова из сценариев. Эти команды обычно называются командами Git «слесарное дело», в то время как более удобные команды называются «фарфоровые» команды.

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

Многие команды Git поставляются с --porcelainопцией , которая является предназначенной для написания сценариев.

git status" Документация :

--porcelain[=<version>]

Дайте вывод в простом для анализа формате для сценариев. Это похоже на короткий вывод, но останется стабильным во всех версиях Git и независимо от конфигурации пользователя. Смотрите ниже для деталей.

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

--word-diff[=<mode>]

фарфор

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

tymtam
источник