【问题标题】:What does the term "porcelain" mean in Git?Git中的“瓷器”一词是什么意思?
【发布时间】:2011-10-22 00:47:00
【问题描述】:

“瓷器”一词偶尔出现在 Git 文档中。什么意思?

【问题讨论】:

    标签: git terminology


    【解决方案1】:

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

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

    【讨论】:

    • 我认为答案对我来说很有意义,但话又说回来,我假设 Linus 是创造这个词的人,所以我倾向于调整我的大脑,使其更直接和更粗鲁一点解析他的世界。 :)
    • 让你怀疑 Linus 是否在想象他的管道将用于运输的潜在排泄物流。为开源代码做管道是一项肮脏的工作,但总得有人去做。
    • 我们中的一些人觉得实际的 git 瓷器更像是管道上的一层油漆。
    • 下面的其他答案更真实,更有用
    • 有没有人觉得这很滑稽?
    【解决方案2】:

    更重要的是,术语“瓷器”适用于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


    作为commentedwilliam-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):

    git blame --porcelain:

    -p
    --porcelain
    

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

    Commit b5c698d, October 2006, git 1.4.4

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

    【讨论】:

    • 我注意到git push 有一个类似异常的机器可读--porcelain
    • 或许--porcelain这里的意思是“产生适合瓷脚本消费的输出”。
    • 还有git diff-tree --word-diff=porcelain
    • 那么,--porcelain 是一个使输出不是瓷器的选项?
    • @PatrickSanan 在某种意义上,是的。使用该选项可以可靠地解析它们的输出。
    【解决方案3】:

    “瓷器”一词在 git 中的创造和使用实际上是由 Mike Taht 提出的,否则与 Linus Torvalds 发生激烈争论。

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

    事实上,我的一个希望是其他 SCM 可以只使用 git 管道。
    但是我真的建议你使用“git”本身,而不是任何“libgit”。即,您将所有管道视为真正的程序,而不是尝试链接单个例程,而是编写脚本它。

    如果你不想要,我不会这样做。
    将管道与瓷器分开仍然有意义

    【讨论】:

    • 有趣。 +1。我的 own answer above 来自使用该产品,但您的链接引用了该术语的来源。
    【解决方案4】:

    Porcelain 是依赖于核心 git 的程序和程序套件的可爱名称,提供对核心 git 的高级访问。与“管道”相比,瓷器暴露了更多的 SCM 接口。

    --Porcelain, Git Wiki

    【讨论】:

      【解决方案5】:

      简单说明

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

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

      如果你想:

      1. 使用瓷器命令(用于人类,而不是解析)并且
      2. 可靠地解析它

      ....然后您可以添加--porcelain 选项,将输出用于脚本。

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

      (我这样说是对 git 的创造者的最大尊重。很容易受到批评,尤其是在没有指定替代方案的情况下。但对我来说,这些标志似乎令人困惑。)

      瓷器/水暖术语从何而来?

      • 如果英语不是您的第一语言,那么Greg Hewgill 可以完美地解释它。
      • 更多详情:结帐VonC's 回答。

      【讨论】:

      • 令人困惑的 --porcelain 选项怎么样?我在回答中解决了这个问题:stackoverflow.com/a/6978402/6309
      • 同意!我在上面的答案中添加了一个链接:For more detail, checkout VonC's answer.
      • 好的,至少在已经“瓷器”命令上使用名为--porcelain 的选项来实现“伪管道”功能与 Git 的一般 UI 设计很好地融合... ;)跨度>
      • 我不明白为什么这个选项被称为“瓷器”。整个命令已经是“瓷器”了。该选项应称为--plumbing(因为这次您是水管工,而不是普通的“瓷器”用户)。
      • 感谢您的回答,@BKSpureon。 VonC 的回答可能更详细,但我需要您确认 --porcelain 选项令人困惑,以便正确理解。
      【解决方案6】:

      Porcelain 命令是为人类消费而设计的,而不是那些输出易于计算机解析的命令。 git status 就是一个例子。

      【讨论】:

      • “瓷器”...“供人类食用”...I can eat glass。 (对于可能容易混淆的人,开个玩笑/注意混合比喻)
      • Porcelain 命令是供人使用的,但是当您使用--porcelain 选项时,它是供机器使用的。
      • git status --porcelain:以易于解析的格式为脚本提供输出。 (...) 但无论用户配置如何,都会在 Git 版本之间保持稳定。
      • 感谢您的反对。 ? 是的,git status --porcelain 具有可以解析的稳定格式,但 status 命令本身设计为面向用户(而不是,例如,git ls-files)。
      【解决方案7】:

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

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

      A.概念(管道与瓷器)

      官方Pro Git book

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

      B. --porcelain / =porcelain 选项

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

      git status'documentation:

      --porcelain[=<version>]

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

      git diffdocumentation

      --word-diff[=<mode>]

      瓷器

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

      【讨论】:

        【解决方案8】:

        Greg Hewgill 的回答完全正确。请注意,有可供 Git 使用的替代瓷器,包括 Easy Git、yap、pyrite 和 vng。每个都旨在使 Git 更容易被社区的某些部分学习/使用。所有这些项目的链接都在 Easy Git 页面上:http://people.gnome.org/~newren/eg/

        【讨论】:

          【解决方案9】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-14
            • 2011-04-12
            • 2018-10-29
            • 2012-03-03
            • 1970-01-01
            相关资源
            最近更新 更多