【发布时间】:2011-10-22 00:47:00
【问题描述】:
“瓷器”一词偶尔出现在 Git 文档中。什么意思?
【问题讨论】:
标签: git terminology
“瓷器”一词偶尔出现在 Git 文档中。什么意思?
【问题讨论】:
标签: git terminology
“瓷器”通常是制造马桶的材料(有时还有其他固定装置,例如洗脸盆)。这与“管道”(实际的管道和排水管)不同,瓷器为管道提供了更加用户友好的界面。
Git 使用此术语进行类比,将用户通常不需要直接使用的低级命令(“管道”)与更用户友好的高级命令(“瓷器”)分开。
【讨论】:
更重要的是,术语“瓷器”适用于high-level commands,输出:
这是关键:如果您编写脚本,则应尽可能使用plumbing commands,并具有稳定的输出。不是瓷器命令。
但是,您可以使用在脚本中具有--porcelain 选项的瓷器命令的输出(见下文),例如:
git status --porcelain
git push --porcelain
git blame --porcelain
虽然 git 包含自己的瓷层,但它的低级命令足以支持替代瓷器的开发。
这些低级命令的接口(输入、输出、选项集和语义)比 Porcelain 级命令更稳定,因为这些命令主要用于脚本使用。
另一方面,Porcelain 命令的界面可能会发生变化,以改善最终用户体验。
请参阅“How do I programmatically determine if there are uncommitted changes?”作为使用管道命令而不是瓷器命令的示例。
注意:瓷器命令可以有--porcelain 选项。
例如:git status --porcelain,它指定一个要解析的输出。
--porcelain
以易于解析的格式为脚本提供输出。这类似于 short 输出,但无论用户配置如何,都会在 git 版本之间保持稳定。详情见下文。
上面提到的线程详情:
在某种程度上,这是我的错。
“短状态”表格 用于人类眼球,由 Junio 设计。
有些人也想要一个可脚本化的状态输出,所以我在相同的格式上打了一个“--porcelain”,关闭了相对路径名和着色等可配置功能,并隐含承诺我们不会对格式进行进一步更改.
这个想法是为了防止人们在--short周围编写脚本,因为它从来都不是稳定的。
所以是的,虽然--porcelain本身是稳定且可编写脚本的,但它可能对解析器不是最友好的。 “-z --porcelain”格式更是如此,我会向任何围绕“git status”编写脚本的人推荐它
这反映了 git 用户在他们的脚本中使用瓷器命令的需要!
但只有稳定输出(--porcelain)
作为commented 的william-berg,同样适用于git push!
--porcelain
生成机器可读的输出。
每个 ref 的输出状态行将以制表符分隔并发送到stdout而不是stderr。
将给出参考的完整符号名称。
正如John Glassmyer提议in the comments:
也许
--porcelain在这里的意思是“产生适合瓷器脚本消费的输出”。
“--porcelain 选项”介绍的第一个案例可以支持这一点
(之前git status --porcelain, commit 6f15787, September 2009, git 1.7.0,
之前git push --porcelain, commit 1965ff7, June 2009, git 1.6.4):
-p
--porcelain
以专为机器使用而设计的格式显示。
Commit b5c698d, October 2006, git 1.4.4
新选项使命令的本机输出格式发出更容易被 Porcelain 处理的输出。
【讨论】:
git push 有一个类似异常的机器可读--porcelain。
--porcelain这里的意思是“产生适合瓷脚本消费的输出”。
git diff-tree --word-diff=porcelain
--porcelain 是一个使输出不是瓷器的选项?
“瓷器”一词在 git 中的创造和使用实际上是由 Mike Taht 提出的,否则与 Linus Torvalds 发生激烈争论。
http://www.gelato.unsw.edu.au/archives/git/0504/0881.html
事实上,我的一个希望是其他 SCM 可以只使用 git 管道。
但是我真的建议你使用“git”本身,而不是任何“libgit”。即,您将所有管道视为真正的程序,而不是尝试链接单个例程,而是编写脚本它。如果你不想要,我不会这样做。
将管道与瓷器分开仍然有意义。
【讨论】:
Porcelain 是依赖于核心 git 的程序和程序套件的可爱名称,提供对核心 git 的高级访问。与“管道”相比,瓷器暴露了更多的 SCM 接口。
【讨论】:
--porcelain 选项呢!?如果你想:
....然后您可以添加--porcelain 选项,将输出用于脚本。
示例:我可以使用git status --porcelain 并将输出用于脚本,没问题。
(我这样说是对 git 的创造者的最大尊重。很容易受到批评,尤其是在没有指定替代方案的情况下。但对我来说,这些标志似乎令人困惑。)
【讨论】:
For more detail, checkout VonC's answer.
--porcelain 的选项来实现“伪管道”功能与 Git 的一般 UI 设计很好地融合... ;)跨度>
--plumbing(因为这次您是水管工,而不是普通的“瓷器”用户)。
--porcelain 选项令人困惑,以便正确理解。
Porcelain 命令是为人类消费而设计的,而不是那些输出易于计算机解析的命令。 git status 就是一个例子。
【讨论】:
--porcelain 选项时,它是供机器使用的。
git status --porcelain:以易于解析的格式为脚本提供输出。 (...) 但无论用户配置如何,都会在 Git 版本之间保持稳定。
git status --porcelain 具有可以解析的稳定格式,但 status 命令本身设计为面向用户(而不是,例如,git ls-files)。
git 中瓷器有两种不同的含义。
这两个含义虽然可以说不是严格矛盾的,但可能看起来是矛盾的。
官方Pro Git book:
但是因为 Git 最初是一个用于版本控制系统的工具包,而不是一个完全用户友好的 VCS,所以它有许多子命令来完成低级工作,并且被设计成以 UNIX 风格链接在一起或从脚本中调用.这些命令通常被称为 Git 的“管道”命令,而对用户更友好的命令被称为“瓷器”命令。
--porcelain / =porcelain 选项许多 git 命令都带有 --porcelain 选项, 用于编写脚本。
git status'documentation:
--porcelain[=<version>]以易于解析的格式为脚本提供输出。这与短输出类似,但在 Git 版本之间以及无论用户配置如何都将保持稳定。详情见下文。
git diff的documentation:
--word-diff[=<mode>]瓷器
使用用于脚本使用的特殊的基于行的格式。
【讨论】:
Greg Hewgill 的回答完全正确。请注意,有可供 Git 使用的替代瓷器,包括 Easy Git、yap、pyrite 和 vng。每个都旨在使 Git 更容易被社区的某些部分学习/使用。所有这些项目的链接都在 Easy Git 页面上:http://people.gnome.org/~newren/eg/。
【讨论】:
Porcelain 是依赖于核心 git 的程序和程序套件的可爱名称,提供对核心 git 的高级访问。
【讨论】: