Git에서“도자기”란 무엇을 의미합니까?


433

"포세린"이라는 용어는 Git 문서에 가끔 나타납니다. 무슨 뜻이에요?

답변:


515

"도자기"는 일반적으로 화장실이 만들어지는 재료입니다 (세면기와 같은 다른 비품). 이것은 "배관"(실제 파이프 및 배수구)과는 다릅니다. 여기서 도자기는 배관에보다 사용자 친화적 인 인터페이스를 제공합니다.

Git은이 용어를 유추하여 유사하게 사용하므로 사용자가 일반적으로 직접 사용할 필요가없는 하위 수준 명령 ( "배관")을보다 사용자 친화적 인 고급 명령 ( "도자기")과 분리합니다.


45
나는 그 대답이 나에게 의미가 있다고 생각하지만, 나는 다시 Linus가 그 용어를 만든 것이라고 가정하고 있습니다. 그래서 나는 그의 세계를 파싱 할 때 뇌를 조금 더 직설적이고 비열하게 조정하는 경향이 있습니다. :)
Nick Klauer

58
Linus가 배관에 사용되는 배설물의 잠재적 흐름을 상상하고 있는지 궁금해합니다. 오픈 소스 코드를위한 배관 작업은 더러운 일이지만 누군가해야합니다.
Evan Plaice

36
그리고 우리 중 일부는 실제 자식 도자기가 배관 위의 페인트 층과 비슷하다고 생각합니다.
hemflit

14
아래의 다른 답변은 더 진실하고 유용합니다
Charney Kaye

14
다른 사람이이 코믹한 것을 발견합니까?
벤 와일드

446

더 중요한 것은 "자기"라는 용어는 다음 과 같은 고급 명령에 적용됩니다 .

  • 인간이 읽을 수 있어야 함
  • 파싱하지 않아야 함
  • 변화 / 진화에 취약

이것이 핵심입니다. 스크립트를 작성하는 경우 안정적인 출력과 함께 가능한 배관 명령을 사용해야합니다 . 도자기 명령이 아닙니다.

그러나 다음과 같이 스크립트에 옵션 이있는 도자기 명령의 출력을 사용할 수 있습니다--porcelain (아래 참조).

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

자식에는 자체 도자기 레이어가 포함되어 있지만 , 저수준 명령은 대체 도자기 개발을 지원하기에 충분합니다.
이러한 저수준 명령에 대한 인터페이스 (입력, 출력, 옵션 집합 및 의미론) 는 주로 스크립트 용도로 사용 되기 때문에 Porcelain 수준 명령보다 훨씬 안정적 입니다.
반면에 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, 6f15787는, 2009 년 9 월, 1.7.0을 이눔 커밋 ,
전에 git push --porcelain1965ff7, 2009 년 6 월이, 1.6.4을 이눔 커밋 ) :

git blame --porcelain:

-p
--porcelain

기계 소 비용으로 설계된 형식으로 표시하십시오.

커밋 b5c698d, 2006 년 10 월, 자식 1.4.4

새로운 옵션은 명령의 기본 출력 형식으로 Porcelain에서 처리하기 쉬운 출력을 생성합니다 .


2
나는 git push비슷한 변칙적 인 기계 판독 가능을 가지고 --porcelain있습니다.
william.berg

13
아마도 --porcelain여기 의 의미 는 "도자기 스크립트에 의한 소비에 적합한 출력물 생성"입니다.
John Glassmyer

@ JohnGlassmyer 실제로 설명 일 가능성이 큽니다. 내 수정 된 답변보기 (끝)
VonC

1
또한git diff-tree --word-diff=porcelain
니콜라스 정강이

1
@PatrickSanan은 어떤 의미에서든지 그렇습니다. 해당 옵션을 사용하여 출력을 안정적으로 구문 분석 할 수 있습니다.
VonC

57

git에서 "porcelain"이라는 용어의 주화와 사용은 실제로 Mike Taht에 의한 것이지만, 그렇지 않으면 Linus Torvalds와의 격렬한 논쟁을 잃었습니다.

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

사실, 내 희망 중 하나는 다른 SCM이 git 배관을 사용할 수 있다는 것입니다.
그러나 " libgit"가 아닌 "git"자체를 사용하는 것이 좋습니다 . 즉, 모든 배관을 실제 프로그램으로 사용하고 개별 루틴과 연결하려고하는 대신 스크립트를 작성 합니다.

당신이 그것을 원하지 않는다면, 나는 그것을하지 않을 것입니다.
그래도 배관과 도자기를 분리하는 것이 합리적 입니다.


7
흥미 롭군 +1. 위의대답 은 제품을 사용하는 것이지만 귀하의 링크는 해당 용어의 기원으로 보이는 것을 참조합니다.
VonC

21

Porcelain은 코어 git에 따라 프로그램 및 프로그램 스위트의 귀여운 이름으로 코어 git에 대한 높은 수준의 액세스를 제공합니다. 도자기는 "배관"보다 SCM 인터페이스를 더 많이 노출합니다.

- 도자기 , Git Wiki


7

컴퓨터 명령은 컴퓨터에서 쉽게 구문 분석 할 수있는 명령과 달리 사람이 사용할 수 있도록 도자기 명령을 설계했습니다. git status하나의 예가 될 것입니다.


8
"도자기"... "인간 소 비용"... 유리를 먹을 수 있습니다 . (혼란하기 쉬운 사람을 위해 농담 / 혼합 은유에 주목)
ajm475du

5
도자기 명령은 사람이 소비하는 --porcelain옵션 이지만 옵션 을 사용할 때는 기계 소비를위한 명령입니다.
ThomasW

git status --porcelain: 구문 분석하기 쉬운 스크립트 출력을 제공합니다. (...)이지만 사용자 구성에 관계없이 Git 버전에서 안정적으로 유지됩니다.
tymtam

downvote 주셔서 감사합니다. 🙄 예, git status --porcelain구문 분석 할 수있는 안정적인 형식이 있지만 status명령 자체는 ( 예를 들어와 는 대조적으로) 사용자가 직면하도록 설계되었습니다 git ls-files.
dahlbyk

7

짧고 간단한 설명

  • "poreclain"및 "plumbing"명령에는 두 가지 유형이 있습니다.
  • 프로그래밍 / 스크립팅시 " Porcelain "명령에 의존 해서는 안됩니다. 명령 변경 될 가능성이 높으며 기계가 아닌 사람을위한 것입니다.
  • " Plumbing "명령은보다 안정적이며 변경 가능성이 낮으므로 스크립팅에 사용해야합니다.

그러나 혼란스러운 --porcelain옵션 은 어떻 습니까!?

  • 당신이 원하는 경우 : (i)는 도자기 명령 및 (ii) 귀하가 출력이 안정적으로 (도자기 명령 만이 아니라 구문 분석 인간에 대한 의미, 기억) 구문 분석 할 수 있도록하려면, 다음 사용할 수있는 추가 --porcelain옵션 및 다음을 스크립팅에 출력을 사용하십시오. 기본적으로 git의 저자는 암시 적으로 언제든지 아무것도 변경하지 않을 것을 약속합니다. 예 : git status --porcelain스크립팅에 출력을 사용 하고 사용할 수 있으며 완벽하게 작동합니다.

도자기 / 배관 용어는 어디에서 왔습니까?

  • 영어가 모국어가 아닌 경우 Greg Hewgill 이 완벽하게 설명합니다.
  • 자세한 내용은 VonC의 답변을 확인하십시오.

1
혼란스러운 --porcelain 옵션은 어떻습니까? 나는 내 대답에서 그것을 해결 : stackoverflow.com/a/6978402/6309
VonC

동의했다! 위의 답변에 대한 링크를 추가했습니다.For more detail, checkout VonC's answer.
BKSpurgeon

적어도 --porcelain"의사-배관"기능을 달성하기 위해 이미 "porcelain"명령에 명명 된 옵션을 사용하는 것은 Git ...;)
Sz

1
왜이 옵션을 "도자기"라고 부르는지 모르겠습니다. 전체 명령은 이미 "도자기"입니다. 이 옵션은 호출해야합니다 --plumbing(이번에는 일반 "도자기"사용자가 아니라 배관공이므로).
seeker_of_bacon

3

그렉 휴길의 대답은 정확히 맞습니다. Easy Git, yap, pyrite 및 vng를 포함하여 Git에 사용할 수있는 대체 도자기가 있습니다. 각각은 커뮤니티의 일부를 위해 Git을 더 쉽게 배우고 사용하도록하기위한 것입니다. 이 모든 프로젝트에 대한 링크는 Easy Git 페이지 ( http://people.gnome.org/~newren/eg/)에 있습니다.



1

자식에서 도자기의 두 가지 의미가 있습니다.

이 두 가지 의미는 논쟁의 여지가 있지만 모순되는 것은 아니며 모순되는 것처럼 보일 수 있습니다.

A. 개념 (배관과 도자기)

공식 Git 서적 :

그러나 Git은 처음에는 사용자에게 친숙한 VCS가 아닌 버전 제어 시스템의 툴킷 이었으므로 하위 수준의 작업을 수행하고 UNIX 스타일로 연결되거나 스크립트에서 호출되도록 설계된 많은 하위 명령이 있습니다. 이러한 명령을 일반적으로 Git의 "배관"명령이라고하며,보다 사용자 친화적 인 명령을 "porcelain"명령이라고합니다.

B. --porcelain/ =porcelain옵션

많은 자식 명령은 함께 --porcelain옵션 되는 스크립트에 대한 의미.

git status' 문서 :

--porcelain[=<version>]

스크립트를 위해 구문 분석하기 쉬운 형식으로 출력하십시오. 이것은 짧은 출력과 비슷하지만 사용자 구성에 관계없이 Git 버전에서 안정적으로 유지됩니다. 자세한 내용은 아래를 참조하십시오.

git diff설명서 :

--word-diff[=<mode>]

도자기

      스크립트 사용을 위해 특수한 라인 기반 형식을 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.