Git中的"瓷器"一词是什么意思?

Jan*_*ich 399 git terminology

Git文档中偶尔出现"瓷器"一词.这是什么意思?

Gre*_*ill 460

"瓷器"是通常制作厕所的材料(有时还有其他固定装置,如洗脸盆).这与"管道"(实际的管道和排水管)不同,瓷器为管道提供了更加用户友好的界面.

Git以类比的方式使用这个术语,将用户通常不需要直接使用的低级命令("管道")与更加用户友好的高级命令("瓷器")分开.

  • 让你想知道Linus是否想象他的管道将用于运输的潜在排泄物流.开源代码的管道工作是一项肮脏的工作,但有人必须这样做. (50认同)
  • 我认为这个答案对我来说是有意义的,但是再一次,我假设Linus是创造这个术语的人,所以我倾向于调整我的大脑,在解析他的世界时更加直接和粗鲁.:) (41认同)
  • 我们中的一些人觉得实际的git瓷器更像是管道上的一层油漆. (34认同)
  • 下面的其他答案更真实,更有用 (14认同)
  • 有没有人觉得这个滑稽? (13认同)
  • 我是否错过了一些东西,或者相对于实现来说,这个类比完全是错误的?如果“管道”被认为是低级/机器性的,而“瓷器”被认为是高级/人性化的(这就是浴室设备中的情况),那么为什么**添加** `--porcelain` 选项(比如说,`git status`) **删除**人类可读的冗长内容并使结果**更**机器可读? (11认同)
  • 我觉得这个比喻更有说服力而不是有用 (6认同)
  • 这个答案对于哪些命令是管道和瓷器的例子会更有用. (3认同)
  • "用户友好"的厕所界面确实!`mark#git flush``你的意思是?push` (3认同)
  • @jez:因为 Git 的命令行界面令人困惑且不一致。请参阅[哪些是管道和瓷器命令?](/sf/ask/2789344701/)以进一步讨论“--porcelain”的含义。 (3认同)
  • 我不知道莱纳斯实际上在想些什么,但是在法语中,“瓷器”是指精致而珍贵的东西,例如高品质的薄餐盘(中国瓷器)。尽管也有许多时尚的“faïence”零件,但马桶制成的东西被称为“faïence”。https://www.wikiwand.com/cn/Limoges_porcelain。无论如何,如今在法国流行最好的专门技术和艺术似乎是一种时尚。 (2认同)
  • @RockyRoad 在瑞典语 *(Linus 的母语)* # 中,瓷器的用法与法语相同。区别在于它可以指代厕所,但更多的是指它们是*由*构成的。它通常不用于指代厕所。(这将是有效的,但很古怪。)一个有效但更正常的用法可能是在指导某人如何清洁浴室时“用这种特殊的清洁剂非常小心地清洁瓷器”。# *- 需要注意的是,Linus 的瑞典语方言来自芬兰,我可能会错过一些细微差别。* (2认同)

Von*_*onC 419

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

  • 意味着人类可读
  • 不打算解析
  • 易受变化/演变的影响

这是关键:如果你编写脚本,你应该使用可能的管道命令,输出稳定.不是瓷器命令.

但是,您可以使用具有--porcelain脚本选项的瓷器命令的输出(见下文),如:

git status --porcelain
git push --porcelain
git blame --porcelain
Run Code Online (Sandbox Code Playgroud)

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

有关使用管道命令而不是瓷器命令的示例,请参阅" 如何以编程方式确定是否存在未提交的更改? ".


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

--porcelain
Run Code Online (Sandbox Code Playgroud)

以易于解析的格式为脚本提供输出.这与短输出类似,但在git版本中保持稳定,无论用户配置如何.请参阅下文了解详情.

上面提到的主题细节:

这在某种程度上是我的错.
"短状态"的形式指对人的眼球,被JUNIO设计.
有些人也想要一个可编写脚本的状态输出,所以我--porcelain在相同的格式上打了一个" ",关闭了可配置的功能,如相对路径名和着色,并暗示我们不会对格式进行进一步的更改.
这个想法是为了防止人们编写脚本--short,因为它从来没有打算保持稳定.
所以,是的,虽然--porcelain它本身稳定的和可编写脚本的,但它可能不是最友好的解析器." -z --porcelain"格式更是如此,我会推荐给任何围绕"git status"编写脚本的人

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


正如威廉伯格评论的那样,同样如此!git push

--porcelain
Run Code Online (Sandbox Code Playgroud)

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


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

也许这里的意思--porcelain是"产生适合瓷器消费的产品".

这可以得到第一个" --porcelain选项"引入案例的支持
(之前git status --porcelain,提交6f15787,2009年9月,git 1.7.0,
之前git push --porcelain,提交1965ff7,2009年6月,git 1.6.4):

git blame --porcelain:

-p
--porcelain
Run Code Online (Sandbox Code Playgroud)

以专为机器消耗而设计的格式显示.

承诺b5c698d,2006年10月,git 1.4.4

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

  • 也许这里" - 瓷"的意思是"产生适合瓷器消费的产品". (11认同)
  • 所以当你添加 --porcelain 时,你就让它表现得像管道一样。谢谢,吉特! (10认同)
  • 那么,“--porcelain”是一个使输出不是瓷器的选项? (6认同)
  • @PatrickSanan 从某种意义上说,是的。使用该选项可以可靠地解析它们的输出。 (3认同)
  • 我注意到`git push`有一个类似异常的机器可读`--porcelain`. (2认同)
  • 还有 `git diff-tree --word-diff=porcelain` (2认同)

小智 55

git中的"瓷器"一词的使用和使用实际上是由迈克·塔特(Mike Taht)进行的,而其他方面则与Linus Torvalds失去了激烈的争论.

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

事实上,我的一个希望是其他SCM可以使用git管道.
但是我真的建议你自己使用"git",而不是任何" libgit".即你把所有的管道作为真正的程序,而不是试图链接个别例程,你编写脚本.

如果你不想要它,我就不会这样做.
但是,将管道与瓷器分开仍然是有意义的.

  • 有趣.+1.我[上面的答案](http://stackoverflow.com/a/6978402/6309)来自使用该产品,但您的链接引用了该术语的起源. (6认同)

Joh*_*web 20

瓷器是程序和程序套件的可爱名称,取决于核心git,提供对核心git的高级访问.Porcelains暴露出比"管道"更多的SCM接口.

- 瓷器,Git Wiki


BKS*_*eon 18

简明扼要的解释

  • 有两种类型的 git 命令:“瓷器”和“管道”。
  • 编程/脚本编写时不应依赖瓷器”命令:(因为它们可能会改变;它们是为人类而非机器设计的)。
  • 管道”命令应该用于脚本编写,(因为它们更稳定,并且不太可能改变)。

是的,但是这个令人困惑的--porcelain选项呢!?

如果你想:

  1. 使用瓷器命令(请记住,瓷器命令是供人类使用而不是解析的)和
  2. 可靠地解析它

....然后您可以添加--porcelain选项使用输出进行脚本编写。

例子:

我可以git status --porcelain将输出用于脚本编写。

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

  • 如果英语不是您的第一语言,那么Greg Hewgill会完美地解释它。
  • 有关更多详细信息:请查看VonC 的答案。

  • 我不明白为什么这个选项被称为“瓷器”。整个命令已经是“瓷器”了。该选项应该称为“--plumbing”(因为这次您是一名水管工,而不是常规的“瓷器”用户)。 (4认同)
  • 好吧,至少在已经是“瓷器”的命令上使用名为“--porcelain”的选项来实现“伪管道”功能,与 Git 的一般 UI 设计很好地融合在一起......;) (3认同)
  • 令人困惑的 --porcelain 选项怎么样?我在回答中解决了这个问题:/sf/answers/488488171/ (2认同)
  • 感谢您的回答,@BKSpurgeon。VonC 的答案可能更详细,但我需要您承认“--porcelain”选项令人困惑,以便正确理解。 (2认同)

tym*_*tam 7

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

\n\n

这两种含义虽然可以说并不严格矛盾,但可能看起来是矛盾的。

\n\n

A. 概念(管道与瓷器)

\n\n

Pro Git官方书籍:

\n\n
\n

但由于 Git 最初是版本控制系统的工具包,而不是完全用户友好的 VCS,因此它有许多执行低级工作的子命令,并且被设计为以 UNIX 风格链接在一起或从脚本调用。这些命令一般称为 Git\xe2\x80\x99s \xe2\x80\x9cplumbing\xe2\x80\x9d 命令,而更方便用户使用的命令称为 \xe2\x80\x9cporcelain\xe2\x80\x9d 命令。

\n
\n\n

B. --porcelain/=porcelain选项

\n\n

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

\n\n

git status\'文档

\n\n
\n

--porcelain[=<version>]

\n\n

以易于解析的脚本格式提供输出。这与短输出类似,但无论用户配置如何,跨 Git 版本都将保持稳定。详情请参阅下文。

\n
\n\n

git diff\ 的文档

\n\n
\n

--word-diff[=<mode>]

\n\n

\n\n

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

\n
\n


dah*_*byk 6

瓷器命令是为人类消费而设计的,而不是命令,其输出很容易被计算机解析.git status就是一个例子.

  • "瓷器"......"供人食用"...... [我可以吃玻璃](http://en.wikipedia.org/wiki/I_Can_Eat_Glass).(对于任何可能容易混淆的人开玩笑/注意混合比喻) (7认同)
  • 瓷器命令供人类使用,但是当你使用`--porcelain'选项时,它是用于机器消耗的. (4认同)