Что означает термин "фарфор" в Git?
Термин "фарфор" иногда встречается в документации Git. Что это значит?
7 ответов
"Фарфор" - это материал, из которого обычно изготавливаются туалеты (а иногда и другие приспособления, такие как раковины). Это отличается от "водопровода" (реальных труб и стоков), где фарфор обеспечивает более удобный интерфейс для водопровода.
Git использует эту терминологию по аналогии, чтобы отделить низкоуровневые команды, которые обычно не нужны пользователям ("сантехника"), от более удобных для пользователя высокоуровневых команд ("фарфор").
Что еще более важно, термин "фарфор" применяется к командам высокого уровня, с выводом:
- предназначен для чтения человеком
- не предназначен для анализа
- подвержен изменениям / эволюции
Это ключевой момент: если вы пишете сценарий, вы должны использовать, если возможно, сантехнические команды со стабильными результатами. Не фарфоровые команды.
Тем не менее, вы можете использовать вывод команды фарфора, который имеет --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
)
Как прокомментировал william.berg, то же самое касается git push
!
--porcelain
Производить машиночитаемый вывод.
Выходная строка состояния для каждой ссылки будет разделена табуляцией и отправленаstdout
вместоstderr
,
Будут даны полные символические названия ссылок.
Как предлагает John Glassmyer в комментариях:
Возможно, смысл
--porcelain
здесь "производить продукцию, пригодную для потребления фарфоровыми сценариями".
И это может быть подтверждено самым первым случаем --porcelain
вариант "введение
(до git status --porcelain
, commit 6f15787, сентябрь 2009 г., git 1.7.0,
до git push --porcelain
, коммит 1965ff7, июнь 2009, гит 1.6.4):
git blame --porcelain
:
-p
--porcelain
Показывать в формате, предназначенном для машинного потребления.
Commit b5c698d, октябрь 2006 г., git 1.4.4
Новая опция заставляет исходный формат команды выводить выходные данные, которые легче обрабатывать с помощью фарфора.
Чеканка и использование термина "фарфор" в git были на самом деле Майком Тахтом, в то время как в противном случае он проиграл горячую ссору с Линусом Торвальдсом.
http://www.gelato.unsw.edu.au/archives/git/0504/0881.html
Фактически, одна из моих надежд заключалась в том, что другие SCM могли просто использовать git-сантехнику.
Но тогда я бы действительно посоветовал вам использовать "git" сам, а не любой "libgit
"Т.е. вы воспринимаете всю сантехнику как настоящие программы, и вместо того, чтобы пытаться связать отдельные процедуры, вы пишете это.Если ты этого не хочешь, я этого не сделаю.
Тем не менее имеет смысл отделить сантехнику от фарфора, хотя.
Краткое и простое объяснение
- Есть два типа команд: "poreclain" и "сантехника".
- Не следует полагаться на " фарфоровые " команды при программировании / написании сценариев: они могут измениться и предназначены для людей, а не для машин.
- Команды " Сантехника " следует использовать для написания сценариев, поскольку они более стабильны и с меньшей вероятностью изменятся.
Но как насчет запутанного --porcelain
вариант!?
- Если вы хотите: (i) использовать команду porcelain И (ii) вы хотите гарантировать, что вывод может быть надежно проанализирован (помните, что команды porcelain предназначены только для людей, а не для синтаксического анализа), вы можете добавить
--porcelain
вариант, а затем используйте вывод для написания сценариев. По сути, авторы git неявно обещают ничего не менять в ближайшее время. пример: я могу использоватьgit status --porcelain
и использовать вывод для написания сценариев, и это будет нормально.
Откуда взялась терминология по фарфору и сантехнике?
- Если английский - не ваш родной язык, Грег Хьюгилл прекрасно это объяснит.
- Для получения дополнительной информации ознакомьтесь с ответом VonC.
Porcelain - это симпатичное название для программ и наборов программ в зависимости от ядра git, обеспечивающее высокий уровень доступа к ядру git. Porcelains раскрывают больше интерфейса SCM, чем "водопровод".
Фарфор в git имеет два различных значения.
Эти два значения, хотя можно утверждать, что они не противоречат друг другу, могут показаться противоречащими друг другу.
А. Концептуальные (сантехника против фарфора)
Официальная книга Pro Git:
Но поскольку Git изначально был набором инструментов для системы контроля версий, а не полностью дружественной к пользователю VCS, он имеет ряд подкоманд, которые выполняют низкоуровневую работу и были разработаны для объединения в цепочку в стиле UNIX или вызова из сценариев. Эти команды обычно называют "сантехническими" командами Git, тогда как более удобные для пользователя команды называются "фарфоровыми" командами.
Б. --porcelain
/ =porcelain
параметры
Многие команды git идут с --porcelain
вариант, который будет предназначен для сценариев.
git status
" Документация:
--porcelain[=<version>]
Предоставьте вывод в удобном для анализа формате для скриптов. Это похоже на краткий вывод, но будет оставаться стабильным во всех версиях Git и независимо от конфигурации пользователя. Подробнее см. Ниже.
git diff
"S документация:
--word-diff[=<mode>]
фарфор
Используйте специальный построчный формат, предназначенный для использования скриптом.
Команды из фарфора предназначены для потребления человеком, в отличие от команд, вывод которых легко анализировать на компьютерах. git status
был бы один пример.
Ответ Грега Хьюгилла совершенно правильный. Обратите внимание, что для Git доступны альтернативные фарфора, включая Easy Git, yap, pyrite и vng. Каждый из них предназначен для облегчения изучения / использования Git для некоторой части сообщества. Ссылки на все эти проекты находятся на странице Easy Git: http://people.gnome.org/~newren/eg/.
Porcelain - это симпатичное название для программ и наборов программ в зависимости от ядра git, обеспечивающее высокий уровень доступа к ядру git.