对于git
命令,有“plumbing”和“porcelain”命令之分。我该如何确定哪些命令属于“plumbing”,哪些属于“porcelain”?也就是说,怎么区分它们的界限在哪里?
我的问题不是什么是“porcelain”或“plumbing”命令,而是当给出一个命令时,我如何确定它属于哪种类型。
对于git
命令,有“plumbing”和“porcelain”命令之分。我该如何确定哪些命令属于“plumbing”,哪些属于“porcelain”?也就是说,怎么区分它们的界限在哪里?
我的问题不是什么是“porcelain”或“plumbing”命令,而是当给出一个命令时,我如何确定它属于哪种类型。
正如blue112所指出的,划分线是模糊的。然而,第一个文档页面有一个明确的列表(并且正如R.M.在下面指出的那样,一个主要标准是稳定的接口,为此一些名义上的瓷器命令有--porcelain
1来强制更稳定和/或更机器可读的输出)。你可以选择使用他们的列表,也可以决定有些命令过于高级而不适合作为低级,或者太低级而不适合作为高级。例如,你可能不同意git apply
是一个管道命令,但Git页面说它是。或者,你可能认为像git fast-import
这样的东西只能在脚本内使用。
编辑,2020年5月31日:自2016年以来,Git文档已更改以将命令重新分配到新部分;下面的数据现在已经过时。请查阅您自己的Git版本文档(例如通过
git help git
)以查看您自己的系统所说的内容。另请参见VonC's answer,其中包含对文档的2018年更改的链接。
以下列表仅从文档中提取,去除了描述和附加分类,只留下“porcelain”与“plumbing”。 (子分类保留为字母排序顺序的反转形式。我没有为每个条目构建链接,因为在StackOverflow markdown中这将会更加困难 - 这只需要一个简单的<pre>...</pre>包装器即可。)
1更合理的称呼似乎应该是--plumbing
,但是正如 VonC在回答相关问题时所指出的那样,你可以将其视为一个请求:“我正在实现瓷器,请给我提供管道风格的输出。” 这个论点的缺陷在于,你可能正在实现复杂的管道系统,并希望使用简单的管道来完成它:现在看不到任何瓷器,但是你的复杂的管道却向一些简单的管道传递了--porcelain
。
git rev-parse
非常像管道。上面的列表直接来自2016年10月的文档。此后,文档已进行了修订:现在有更多的子类别。git rev-parse
已移至“询问命令”下的“管道”部分。 - torekgit-show-ref
在哪个列表中。:( - mtraceurgit help -av
git/git/command-list.txt
。git help -a
"和"git help -av
"提供不同的信息,通常“详细”版本更适合新用户。现在默认情况下,"git help -a
"使用更详细的输出(使用"--no-verbose
"可以返回原始信息)。pclouds
)于2018年9月29日提交)。gitster
--于2018年10月19日合并)
当您键入“git help
”(或只是“git
”)时,会显示一组常用命令及其简短描述,并建议您使用“git help -a
”或“git help -g
”获取更多详细信息。"git help -av
"将更友好地显示命令列表及其描述,并适当分组。但是,"help -av
"并不会显示"help -a
"中的所有内容。help -av
”中添加外部命令部分。同时,还要添加别名部分(直到现在,别名没有UI,只有“git config
”)。git help -a
(使用Git 2.20+)将返回:vonc@VONC D:\git\git
> git help -a
Main Porcelain Commands
add Add file contents to the index
am Apply a series of patches from a mailbox
archive Create an archive of files from a named tree
bisect Use binary search to find the commit that introduced a bug
...
help
:将gitsubmodules
添加到指南列表中Signed-off-by: Philippe Blain
Reviewed-by: Jonathan Nieder
在d480345(“submodules
: overhaul documentation”,2017-06-22,Git v2.14.0-rc0 - 在batch #0中列出的合并),添加了“gitsubmodules
”指南,但是在提交1b81d8c(“help
: use command-list.txt
for the source of guides”,2018-05-20,Git v2.18.0-rc1 - 在合并),教授“git help
”从这个文件中获取指南列表时,并没有将其添加到command-list.txt中。
现在添加它,并像其他指南一样,将gitsubmodules
的描述的第一个单词大写,就像在1b81d8c(“help
: use command-list.txt
for the source of guides”,2018-05-20,Git v2.18.0-rc1 - 在合并)中所做的那样。
git help -a --no-external-commands
不会列出在 PATH
中找到的 git-xxx
可执行文件。git help -a --no-aliases
不会列出任何定义为别名的 git xxx
。我认为命令之间并没有直接的联系。
从日常使用的命令,比如status
, diff
, commit
等都是瓷器级别的命令。较少使用且输出格式不太友好的命令则属于管道级别,例如diff-index
, hash-object
或send-pack
。
你可以使用git help -a
来获取完整的git命令列表。在这里很容易区分哪些命令属于瓷器级别,哪些属于管道级别。
通过查看git send-pack
的手册,你会看到以下内容:
通常情况下,你应该使用更高级别的
git push
命令而不是直接使用本命令。
这就是告诉你它是一个管道级别的命令。
git status
是否为瓷砖命令。 - zer0uno