Что означает термин «фарфор» в Git? - PullRequest
382 голосов
/ 08 августа 2011

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

Ответы [ 7 ]

441 голосов
/ 08 августа 2011

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

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

406 голосов
/ 08 августа 2011

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

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

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

Однако, вы можете использовать вывод команды фарфора, которая имеет параметр --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, коммит 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

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

52 голосов
/ 08 декабря 2013

Чеканка и использование термина «фарфор» в git были на самом деле Майком Тахтом, в то время как в противном случае он проиграл горячую спор с Линусом Торвальдсом.

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

На самом деле, одна из моих надежд заключалась в том, что другие SCM могли просто использовать git-сантехнику.
Но тогда я бы действительно предложил вам использовать «git», а не «libgit». Т.е. вы принимаете все сантехнику как настоящие программы, и вместо того, чтобы пытаться связать отдельные процедуры, вы бы script it.

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

20 голосов
/ 08 августа 2011

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

- Фарфор , Git Wiki

7 голосов
/ 08 августа 2011

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

3 голосов
/ 20 октября 2011

Ответ Грега Хьюгилла в точности верен. Обратите внимание, что для Git доступны альтернативные фарфора, включая Easy Git, yap, pyrite и vng. Каждый из них предназначен для облегчения изучения / использования Git для некоторой части сообщества. Ссылки на все эти проекты есть на странице Easy Git: http://people.gnome.org/~newren/eg/.

1 голос
/ 08 августа 2011

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

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

...