shorthand 选项不能为 Git 的 stash 命令堆叠是有原因的吗?
Is there a reason that shorthand options can't be stacked for Git's stash command?
在 Unix CLI 世界中有一种模式,其中常用选项被赋予一个字母 shorthand,这些通常可以组合在一起,或者 stacked. rm
命令可以找到一个非常常见的例子,它可以递归地删除目录。这三个命令是等价的:
rm --recursive --force .
rm -r -f .
rm -rf .
Git 有很多子命令,每个都有很多选项。我已经习惯了 Git 允许堆叠其 shorthand 选项以便于使用,就像许多其他编写良好的 CLI 工具一样。例如:
git commit -am 'Create new commit message'
我发现 git stash
至少是一个例外,其中有用选项 --keep-index
和 --include-untracked
的 shorthand 不能堆叠到 -ku
:
git stash -k -u # This works
git stash -ku # This doesn't
除了没有实施之外,还有其他具体原因吗?还有其他无法堆叠 Git 选项的例子吗?这些例子有具体原因吗?
在 Git 的最新版本中,git stash
是一个 shell 脚本(无论出于何种原因)没有使用 Git 的选项解析器。从 Git 2.22 开始,有一个项目用 C 重写它。C 重写有一个合适的选项解析器。然而,重写直到最近才完成,旧的 shell 脚本版本仍然存在。
、git stash -ku
在 Git 2.27 中有效,但在 Git 2.25 中无效。 Git 2.27 是旧 shell 脚本版本真正消失的第一个版本;可能这也是最终切换选项解析的时候。
在 Unix CLI 世界中有一种模式,其中常用选项被赋予一个字母 shorthand,这些通常可以组合在一起,或者 stacked. rm
命令可以找到一个非常常见的例子,它可以递归地删除目录。这三个命令是等价的:
rm --recursive --force .
rm -r -f .
rm -rf .
Git 有很多子命令,每个都有很多选项。我已经习惯了 Git 允许堆叠其 shorthand 选项以便于使用,就像许多其他编写良好的 CLI 工具一样。例如:
git commit -am 'Create new commit message'
我发现 git stash
至少是一个例外,其中有用选项 --keep-index
和 --include-untracked
的 shorthand 不能堆叠到 -ku
:
git stash -k -u # This works
git stash -ku # This doesn't
除了没有实施之外,还有其他具体原因吗?还有其他无法堆叠 Git 选项的例子吗?这些例子有具体原因吗?
在 Git 的最新版本中,git stash
是一个 shell 脚本(无论出于何种原因)没有使用 Git 的选项解析器。从 Git 2.22 开始,有一个项目用 C 重写它。C 重写有一个合适的选项解析器。然而,重写直到最近才完成,旧的 shell 脚本版本仍然存在。
git stash -ku
在 Git 2.27 中有效,但在 Git 2.25 中无效。 Git 2.27 是旧 shell 脚本版本真正消失的第一个版本;可能这也是最终切换选项解析的时候。