Git中的“瓷器”是什么意思?


Answers:


515

“瓷器”是通常用来制造抽水马桶的材料(有时还用于制作其他装置,例如洗脸盆)。这与“管道”(实际的管道和排水管)不同,在“管道”中,瓷器为管道提供了更加用户友好的界面。

Git类似地使用此术语,将用户通常不需要直接使用的低级命令(“管道”)与用户更友好的高级命令(“瓷器”)分开。


45
我认为答案对我来说很有意义,但是再一次,我假设莱纳斯是创造该术语的人,因此在解析他的世界时,我倾向于将自己的大脑调整为更加直接和恼怒。:)
尼克·克劳尔

58
让您想知道Linus是否在想像他的管道将用于运输的潜在排泄物。探索开放源代码是一项肮脏的工作,但必须有人去做。
Evan Plaice

36
我们中的一些人认为实际的git瓷器更像是管道上的油漆层。
hemflit 2014年

14
以下其他答案更真实,更有用
Charney Kaye 2015年

14
还有其他人觉得这可笑吗?
本·王尔德

446

更重要的是,术语“瓷器”适用于高级命令,其输出为:

  • 可以被人类阅读
  • 不打算被解析
  • 易受变化/发展的影响

这很关键:如果编写脚本,则应尽可能使用具有稳定输出的管道命令。不是瓷器命令。

但是,您可以使用瓷器命令的输出,该命令--porcelain在脚本中具有一个选项(如下所示),例如:

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

尽管git包括自己的瓷器层,但其低级命令足以支持替代瓷器的开发。
这些低级命令的接口(输入,输出,选项集和语义)比瓷器级命令要稳定得多,因为这些命令主要用于脚本使用
另一方面,瓷器命令的界面可能会有所更改,以改善最终用户的体验。

请参阅“ 如何以编程方式确定是否存在未提交的更改? ”作为使用管道命令而不是瓷器命令的示例。


注意:瓷器命令可以有一个--porcelain选项。
例如:git status --porcelain,它指定要解析输出

--porcelain

以易于解析的格式为脚本提供输出。这类似于简短的输出,但是在git版本和所有用户配置下都将保持稳定。有关详情,请参见下文。

上面提到的线程详细说明:

在某种程度上,这是我的错。
“短状态”表单由Junio设计的,用于人类的眼球。
某些人也想要可脚本化的状态输出,因此我--porcelain在相同的格式上打了一个“ ”,以关闭可配置功能,例如相对路径名和着色,并隐含地承诺我们不会对该格式进行进一步更改。
这个想法是为了防止人们编写脚本--short,因为它从来没有打算保持稳定。
是的,虽然--porcelain它本身稳定且可编写脚本的,但对于解析器而言可能并不是最友好的。“ -z --porcelain”格式更是如此,我会推荐给任何围绕“ git status”编写脚本的人

对于git用户而言,这反映了在脚本中使用瓷器命令的需要!
但仅具有稳定的输出(带有--porcelain


正如评论威廉·伯格,也是如此git push

--porcelain

产生机器可读的输出。
每个参考的输出状态行将以制表符分隔并发送到stdout而不是stderr
将给出参考的完整符号名称。


正如John Glassmyer 在评论中所建议

也许这里的意思--porcelain是“生产适合瓷器脚本消费的输出”

这可以通过“ --porcelain选项”介绍的第一个案例来支持
(之前git status --porcelain,commit 6f15787,2009年9月,git 1.7.0
之前git push --porcelain,commit 1965ff7,2009年6月,git 1.6.4):

git blame --porcelain

-p
--porcelain

以专为机器使用而设计的格式显示。

提交b5c698d,2006年10月,git 1.4.4

新选项使命令的本机输出格式发出的输出易于使用Porcelain处理


2
我注意到git push类似的异常机器可读--porcelain
william.berg

13
也许--porcelain这里的意思是“生产适合瓷器脚本消费的输出”。
John Glassmyer 2013年

@JohnGlassmyer这确实是一个很可能的解释。请参阅我编辑的答案(最后)
VonC 2013年

1
同样git diff-tree --word-diff=porcelain
Nicholas Shanks 2014年

1
@PatrickSanan在某种意义上是的。使用该选项可以可靠地解析其输出。
VonC

57

git中“瓷器”一词的造币和用法实际上是Mike Taht提出的,而与此同时,Linus Torvalds则失去了激烈的争论。

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

实际上,我的希望之一是其他SCM可以只使用git plumbing。
但是,我真的建议您使用“ git”本身,而不要使用任何“ libgit”。即,您将所有管道作为真实程序,而不是尝试链接到各个例程,而是对其进行脚本编写

如果你不想要,我不会。
不过,将水管与瓷器分开仍然有意义


7
有趣。+1。我上面的回答是从使用产品开始的,但是您的链接引用了该术语的由来。
VonC

21

瓷器是依赖于核心git的程序和程序套件的可爱名称,代表了对核心git的高级访问。瓷器比“管道”具有更多的SCM接口。

- 瓷器,Git Wiki


7

瓷器命令是为供人类使用而设计的,而不是其输出易于计算机解析的命令。git status就是一个例子。


8
“瓷器”……“供人类食用”…… 我可以吃玻璃。(只是在开玩笑/为可能容易混淆的人指出混合隐喻)
ajm475du 2014年

5
瓷器命令是供人食用的,但是使用此--porcelain选项时,它是供机器使用的。
ThomasW

git status --porcelain:以易于解析的格式为脚本提供输出。(...),但无论用户配置如何,在所有Git版本中都将保持稳定。
tymtam '19

谢谢你的反对。🙄是的,git status --porcelain具有可以解析的稳定格式,但是status命令本身被设计为面向用户(例如,与相对git ls-files)。
dahlbyk

7

简短说明

  • 有两种类型的命令:“ poreclain”和“ plumbing”。
  • 在编程/编写脚本时,不应依赖“ 瓷器 ”命令:因为它们可能会更改,并且是针对人类而非机器的。
  • 应该使用“ 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

OK,在使用一个选项叫至少--porcelain在已经“瓷”命令来实现“伪管道”功能混合非常漂亮,使用Git的一般UI设计...;)
SZ。

1
我不明白为什么将此选项称为“瓷器”。整个命令已经是“瓷器”了。应该调用该选项--plumbing(因为您这次是水管工,而不是普通的“瓷器”用户)。
seeker_of_bacon



1

git中的瓷器有两种不同的含义。

这两个含义虽然可以说不是严格矛盾的,但可能会出现矛盾。

A.概念性(水暖与瓷器)

Pro Git官方

但是由于Git最初只是一个版本控制系统的工具包,而不是一个完全用户友好的VCS,因此它具有许多子级命令,这些子命令执行低级工作,并设计为以UNIX样式链接在一起或从脚本中调用。这些命令通常称为Git的“管道”命令,而更人性化的命令称为“瓷器”命令。

B. --porcelain/ =porcelain选项

许多Git命令都配有--porcelain该选项指用于脚本。

git status' 文档

--porcelain[=<version>]

以易于解析的格式为脚本提供输出。这类似于简短的输出,但是无论用户配置如何,在所有Git版本中都将保持稳定。有关详情,请参见下文。

git diff文档

--word-diff[=<mode>]

      使用专用于脚本的基于行的特殊格式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.