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

时间:2011-08-07 23:21:05

标签: git terminology

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

9 个答案:

答案 0 :(得分:429)

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

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

答案 1 :(得分:399)

更重要的是,术语“瓷器”适用于high-level commands,输出:

  • 意味着可供人类阅读
  • 无意解析
  • 容易受到变化/演变的影响

这是关键:如果你编写脚本,你应尽可能plumbing commands使用稳定的输出。不是瓷器命令。

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

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

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

请参阅“How do I programmatically determine if there are uncommitted changes?”作为使用管道命令而不是瓷器命令的示例。


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

--porcelain
  

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

上面提到的主题细节:

  

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

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


commented william-berggit push同样如此!

--porcelain
  

生成机器可读输出   每个参考的输出状态行将以制表符分隔,并发送至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处理的输出

答案 2 :(得分:49)

git中的“瓷器”一词的使用和使用实际上是由迈克·塔特(Mike Taht)提出的,否则会与Linus Torvalds失去激烈的争论。

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

  
    

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

  
     

如果你不想要它,我就不会这样做   尽管如此,将管道与瓷器分开仍然是有道理的。

答案 3 :(得分:19)

  

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

- Porcelain, Git Wiki

答案 4 :(得分:6)

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

答案 5 :(得分:3)

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

答案 6 :(得分:3)

简短说明

  • 有两种类型的命令:“ poreclain”和“ plumbing”。
  • 在编程/编写脚本时,不应使用
  • Porcelain”命令 :因为它们可能会发生变化,并且是针对人类而非机器的。
  • Plumbing”命令应用于脚本编写,因为它们更稳定且更改的可能性较小。

但是令人困惑的git status --porcelain选项呢??

  • 如果要:(i)使用瓷器命令并且(ii)要确保可以可靠地解析输出(请记住,瓷器命令仅用于人类而不是解析),那么您 可以 添加loading = false选项,然后 然后 使用输出进行脚本编写。基本上,git的作者暗含承诺不会在任何时间更改其中的任何内容。示例:我可以使用export class APIService { constructor(private http: HttpClient) { } getRepos(): Observable<any[]> return this.http.get<any[]>('https://api.github.com/users/githubtraining/repos') .pipe(catchError(this.handleError)); } getCommits(url: string): Observable<any> { return this.http.get<any>(url) .pipe(catchError(this.handleError)); } handleError(error: any) { return throwError(error); } } 并将输出用于脚本编写,这完全可以。

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

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

答案 7 :(得分:2)

  

瓷器是程序和程序套件的可爱名称,取决于核心git,提供对核心git的高级访问。

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

答案 8 :(得分:1)

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

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

A。概念性的(管道与瓷器)

Pro Git book官方人员:

  

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

B。 --porcelain / =porcelain选项

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

git status'documentation

  

--porcelain[=<version>]

     

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

git diff的{​​{3}}:

  

--word-diff[=<mode>]

     

瓷器

     

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