术语“瓷器”偶尔出现在Git文档中。这是什么意思?


当前回答

简单的解释

在编写脚本时不应该依赖“瓷器”命令,因为:它们可能会改变;这是给人类的,不是给机器的。 “管道”命令应该用于脚本,因为:它们更稳定/不太可能改变)。

是啊,但那令人困惑的瓷器选择呢?

如果你想:

使用瓷器命令(用于人类,而不是解析)和 可靠地解析它

....然后您可以添加——porcelain选项并将输出用于脚本编写。

示例:我可以使用git status——porcelain并使用输出脚本,没有问题。

(我说这些话是出于对git创造者最大的尊重。很容易批评,特别是在没有指定替代方案的情况下。但对我来说,这些旗帜似乎令人困惑。)

瓷器/管道术语从何而来?

如果英语不是你的第一语言,那么Greg Hewgill可以完美地解释这一点。 更多细节:签出VonC的答案。

其他回答

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

意味着人类可以读懂 不是用来解析的 易受变化/演变的影响

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

然而,你可以使用一个瓷器命令的输出,它在脚本中有一个——瓷器选项(见下文),比如:

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

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

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


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

--porcelain

为脚本提供易于解析的输出格式。这类似于短的输出,但是无论用户配置如何,在git版本之间都保持稳定。详情见下文。

以上提到的线程细节:

This is my fault, to some degree. The "short-status" form is meant for human eyeballs, and was designed by Junio. Some people wanted a scriptable status output, too, so I slapped a "--porcelain" on the same format that turns off configurable features like relative pathnames and colorizing, and makes an implicit promise that we won't make further changes to the format. The idea was to prevent people from scripting around --short, because it was never intended to be stable. So yeah, while --porcelain by itself is stable and scriptable, it is perhaps not the most friendly to parsers. The "-z --porcelain" format is much more so, and I would recommend it to anyone scripting around "git status"

这反映了git用户在脚本中使用瓷器命令的需求! 但只有稳定的输出(瓷器)


正如william-berg所评论的,git push也一样!

--porcelain

产生机器可读的输出。 每个ref的输出状态行将以制表符分隔,并发送到stdout而不是stderr。 裁判的完整的象征性名字将被给出。


正如John Glassmyer在评论中提出的:

也许——porcelain在这里的意思是“生产适合瓷脚本消费的产品”。

这可以从第一个“——瓷器选项”的引入案例中得到支持 (在git状态——瓷器之前,提交6f15787, 2009年9月,git 1.7.0, 在git推送之前——瓷器,提交1965ff7, 2009年6月,git 1.6.4):

怪——瓷器:

-p
--porcelain

以适合机器使用的格式显示。

提交b5c698d, 2006年10月,git 1.4.4

新选项使命令的本机输出格式发出更容易由Porcelain处理的输出。

瓷是程序和程序套件的可爱名字,依赖于核心git,提供了对核心git的高级访问。瓷器比“管道”暴露出更多的SCM界面。

——瓷器,Git Wiki

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

这两种意义,虽然可以说不是严格意义上的矛盾,但也可能是矛盾的。

A.概念性(管道vs瓷器)

官方Pro Git书:

但是因为Git最初是一个版本控制系统的工具包,而不是一个完全用户友好的VCS,所以它有许多执行低级工作的子命令,并且被设计成以unix风格链接在一起或从脚本调用。这些命令通常被称为Git的“管道”命令,而更友好的命令被称为“瓷器”命令。

B.瓷器/ =瓷器选项

许多git命令都带有用于脚本编写的——porcelain选项。

Git状态文档:

——瓷(= <版本>) 为脚本提供易于解析的输出格式。这类似于短的输出,但是无论用户配置如何,在Git版本之间都保持稳定。详情见下文。

Git diff的文档:

——word-diff(= > <模式) 瓷 使用用于脚本使用的特殊的基于行的格式。

瓷是程序和程序套件的可爱名字,依赖于核心git,提供了对核心git的高级访问。

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

瓷器命令是为人类使用而设计的,而不是那些输出容易被计算机解析的命令。Git状态就是一个例子。