O que o termo "porcelana" significa no Git?


434

O termo "porcelana" aparece ocasionalmente na documentação do Git. O que isso significa?

Respostas:


515

"Porcelana" é o material do qual os banheiros são geralmente feitos (e às vezes outros acessórios, como lavatórios). Isso é diferente do "encanamento" (os tubos e esgotos reais), onde a porcelana fornece uma interface mais amigável ao encanamento.

O Git usa essa terminologia por analogia, para separar os comandos de baixo nível que os usuários geralmente não precisam usar diretamente (o "encanamento") dos comandos de alto nível mais fáceis de usar (a "porcelana").


45
Eu acho que a resposta faz sentido para mim, mas, novamente, estou assumindo que Linus foi quem cunhou o termo, então eu tendem a ajustar meu cérebro para ser um pouco mais direto e grosseiro ao analisar seu mundo. :)
Nick Klauer

58
Faz você se perguntar se Linus estava imaginando os fluxos potenciais de excremento que seu encanamento seria usado para transportar. A busca por código-fonte aberto é um trabalho sujo, mas alguém precisa fazer isso.
Evan Plaice

36
E alguns de nós sentimos que a porcelana de verdade é mais como uma camada de tinta sobre o encanamento.
hemflit

14
outra resposta abaixo é tanto mais verdadeiro e mais útil
Charney Kaye

14
mais alguém acha isso cômico?
Ben Wilde

446

Mais importante, o termo "porcelana" se aplica a comandos de alto nível , com saída:

  • destinado a ser legível por humanos
  • não deve ser analisado
  • suscetível a mudanças / evoluções

Essa é a chave: se você script, deve usar, se possível , comandos de encanamento , com saídas estáveis. Não comandos de porcelana.

No entanto, você pode usar a saída de um comando porcelain que possui uma --porcelainopção no script (veja abaixo), como:

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

Embora o git inclua sua própria camada de porcelana , seus comandos de baixo nível são suficientes para apoiar o desenvolvimento de porcelanas alternativas.
A interface (entrada, saída, conjunto de opções e semântica) para esses comandos de baixo nível deve ser muito mais estável que os comandos de porcelana, porque esses comandos são principalmente para uso com script .
A interface para os comandos de Porcelana, por outro lado, está sujeita a alterações para melhorar a experiência do usuário final.

Consulte " Como determino programaticamente se há alterações não confirmadas? " Como um exemplo para usar comandos de encanamento em vez de de porcelana.


Nota: Um comando de porcelana pode ter uma --porcelainopção.
Por exemplo git status --porcelain:, que designa uma saída que deve ser analisada .

--porcelain

Forneça a saída em um formato fácil de analisar para scripts. Isso é semelhante à saída curta, mas permanecerá estável nas versões git e independentemente da configuração do usuário. Veja abaixo os detalhes.

O tópico mencionado acima detalha:

Isso é culpa minha, até certo ponto.
A forma "status curto" é destinada aos globos oculares humanos e foi projetada por Junio.
Algumas pessoas também queriam uma saída de status programável, então eu coloquei um " --porcelain" no mesmo formato que desativa recursos configuráveis, como nomes de caminho e cores relativos, e faz uma promessa implícita de que não faremos mais alterações no formato.
A idéia era impedir as pessoas de criar scripts --short, porque nunca se pretendia que fosse estável.
Então, sim, embora --porcelainpor si só seja estável e programável, talvez não seja o mais amigável para os analisadores. O -z --porcelainformato " " é muito mais, e eu o recomendaria a qualquer pessoa que escreva "git status"

Isso reflete a necessidade, para usuários do git, de usar comandos de porcelana em seus scripts!
Mas apenas com saída estável (com --porcelain)


Como comentado por william-berg , o mesmo vale para git push!

--porcelain

Produza saída legível por máquina.
A linha de status de saída para cada ref será separada por tabulação e enviada para em stdoutvez de stderr.
Os nomes simbólicos completos dos árbitros serão fornecidos.


Como John Glassmyer propõe nos comentários :

Talvez o significado --porcelainaqui seja "produzir saída adequada para consumo por scripts de porcelana" .

E isso poderia ser suportado pelo primeiro caso de --porcelainintrodução da " opção"
(antes git status --porcelain, commit 6f15787, setembro de 2009, git 1.7.0 ,
antes git push --porcelain, commit 1965ff7, junho de 2009, git 1.6.4 ):

git blame --porcelain:

-p
--porcelain

Mostrar em um formato projetado para o consumo da máquina.

Confirmar b5c698d, outubro de 2006, git 1.4.4

A nova opção faz com que o formato de saída nativo do comando emita uma saída mais fácil de manusear pela Porcelain .


2
Percebo que git pushtem uma leitura anômala da mesma forma --porcelain.
William.berg

13
Talvez o significado --porcelainaqui seja "produzir saída adequada para consumo por scripts de porcelana".
precisa saber é o seguinte

@JohnGlassmyer é uma explicação muito provável. Veja minha resposta editada (no final)
VonC

1
Tambémgit diff-tree --word-diff=porcelain
Nicholas Shanks

1
@PatrickSanan em certo sentido, sim. Sua saída pode ser analisada de forma confiável com essa opção.
VonC 01/04

57

A cunhagem e o uso do termo "porcelana" no git foram na verdade por Mike Taht, enquanto perdiam uma discussão acalorada com Linus Torvalds.

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

De fato, uma das minhas esperanças era que outros SCMs pudessem usar o encanamento git.
Mas então eu realmente sugiro que você use "git" em si, não nenhum " libgit". Ou seja, você toma todo o encanamento como programas reais e, em vez de tentar vincular-se a rotinas individuais, você o rotula .

Se você não quiser, eu não farei.
Ainda faz sentido separar o encanamento da porcelana .


7
Interessante. +1. Minha própria resposta acima é do uso do produto, mas seu link faz referência ao que parece ser a origem desse termo.
VonC 8/13/13

21

Porcelana é um nome bonito para programas e suítes de programas, dependendo do core git, apresentando um acesso de alto nível ao core git. As porcelanas expõem mais uma interface SCM do que o "encanamento".

- Porcelana , Git Wiki


7

Os comandos de porcelana são projetados para consumo humano, em oposição aos comandos cuja saída é fácil para os computadores analisarem. git statusseria um exemplo.


8
"Porcelana" ... "para consumo humano" ... Eu posso comer vidro . (brincadeirinha / notando metáfora mista para qualquer um que podem ser facilmente confundidos)
ajm475du

5
Os comandos de porcelana são para consumo humano, mas quando você usa a --porcelainopção, é para consumo da máquina.
Thomasw

git status --porcelain: Forneça a saída em um formato fácil de analisar para scripts. (...) mas permanecerá estável nas versões do Git e independentemente da configuração do usuário.
tymtam

Obrigado pelo voto negativo. 🙄 Sim, git status --porcelainpossui um formato estável que pode ser analisado, mas o statuspróprio comando foi projetado para ser voltado para o usuário (em oposição a, por exemplo git ls-files).
Dahlbyk # 24/19

7

A explicação curta e simples

  • Existem dois tipos de comandos: "poreclain" e "encanamento".
  • Os comandos " Porcelain " não devem ser considerados na programação / script: porque eles provavelmente mudam e destinam-se a seres humanos e não a máquinas.
  • Os comandos " Encanamento " devem ser usados ​​para scripts, porque são mais estáveis ​​e menos propensos a alterações.

Mas e a --porcelainopção confusa !?

  • Se você deseja: (i) usar um comando de porcelana E (ii) deseja garantir que a saída possa ser analisada com segurança (lembre-se, os comandos de porcelana são voltados apenas para seres humanos e não para análise), você pode adicionar a --porcelainopção e, em seguida, use a saída para scripts. Basicamente, os autores do git prometem implicitamente não mudar nada lá, tão cedo. exemplo: posso usar git status --porcelaine usar a saída para scripts e isso seria perfeitamente aceitável.

De onde vem a terminologia de porcelana / encanamento?


1
E a confusa opção --porcelain? Eu dirijo isso na minha resposta: stackoverflow.com/a/6978402/6309
VonC 29/08/19

acordado! Eu adicionei um link para sua resposta acima:For more detail, checkout VonC's answer.
BKSpurgeon

OK, pelo menos usar uma opção denominada --porcelainem comandos "porcelain" para obter a funcionalidade "pseudo-encanamento" combina muito bem com o design geral da interface do usuário do Git ...;)
Sz.

1
Não entendo por que essa opção é chamada de "porcelana". O comando inteiro já é "porcelana". A opção deve ser chamada --plumbing(já que você é um encanador dessa vez, não um usuário comum de "porcelana").
seeker_of_bacon 22/03

3

A resposta de Greg Hewgill está exatamente correta. Observe que existem porcelanas alternativas disponíveis para o Git, incluindo Easy Git, yap, pyrite e vng. Cada um deles visa tornar o Git mais fácil de aprender / usar para alguma parte da comunidade. Os links para todos esses projetos estão na página Easy Git: http://people.gnome.org/~newren/eg/ .



1

Existem dois significados distintos de porcelana no git.

Esses dois significados, embora possam ser argumentados não são estritamente contraditórios, podem parecer contraditórios.

A. Conceitual (encanamento x porcelana)

O livro oficial do Pro Git :

Mas como o Git era inicialmente um kit de ferramentas para um sistema de controle de versão, em vez de um VCS fácil de usar, ele possui vários subcomandos que executam trabalhos de baixo nível e foram projetados para serem encadeados no estilo UNIX ou chamados de scripts. Esses comandos são geralmente referidos como comandos de "encanamento" do Git, enquanto os comandos mais amigáveis ​​são chamados de comandos de "porcelana".

B. --porcelain/ =porcelainopções

Muitos comandos do git vêm com uma --porcelainopção que é significou para scripting.

git status' documentação :

--porcelain[=<version>]

Forneça a saída em um formato fácil de analisar para scripts. Isso é semelhante à saída curta, mas permanecerá estável nas versões do Git e independentemente da configuração do usuário. Veja abaixo os detalhes.

git diff's documentação :

--word-diff[=<mode>]

porcelana

      Use um formato especial baseado em linha destinado ao consumo de script.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.