使用Git时,我何时会在两个连字符( - )上使用一个连字符( - )?

时间:2017-07-22 07:11:17

标签: linux git unix terminal

Git 中,当我执行提交添加时,我可以使用

git commit -am "My commit"

当我看到git log的示例或在大多数其他情况下,我们使用

git log --online

但我不明白何时使用一个连字符-)或两个连字符--)。有人可以解释一下吗?

4 个答案:

答案 0 :(得分:4)

---之间没有太大区别。使用只是一个约定:

    当选项一个字母时,
  • -。在这种情况下,您可以合并:-am相当于-a -m
  • 当选项单词时,
  • --
  • 没有单词的
  • --用于将参数与参数分开,这样就可以使用以连字符开头的参数而不将它们解释为选项

有些选项有两种形式(一个字母或一个单词),有些只有两种形式中的一种。检查每个命令的帮助以找到它。

git commit -am "My commit"
# is equivalent to
git commit --all --message "My commit"

另据this question on Super User的建议,您可以阅读melpomene以了解详情。

答案 1 :(得分:0)

我已经“观察”单个连字符用于单个字符选项,双连字符用于git中的多个字符选项(和其他几个工具)。

这表明程序无论在之后看到什么 - 都应该被视为一个选项。例如, - online指定“在线”是一个选项。但是如果我们使用-online,我们指定o,n,I,i,n,e是选项。

但是,这也取决于我们使用的工具。大多数工具都遵循这种模式,我认为这使得解析更容易。但是我看到很少有程序可以使用单个连字符来接受多个字符选项。例如,“java -version”工作正常。

答案 2 :(得分:0)

这在很大程度上取决于您正在执行的命令。我们以git-add为例。

可能的参数如下:

git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
      [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
      [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing]
      [--chmod=(+|-)x] [--] [<pathspec>…​]

我在特别中选择了这个,因为有一个很好的混合的短形和长形的标志,以及在一个特殊的地方的双连字符,我会在一瞬间得到

首先,单个连字符和双连字符标志之间的主要区别很大程度上取决于命令支持的内容。你会注意到git-add中有一些标志使用双连字符作为长格式命令,单连字符标志作为表达相同命令的较短方式。在这种情况下,--verbose-v使用不同的语法完成相同的事情。

那是established by convention,是为了方便起见。

现在,到了双连字符的地步。在基于Unix的系统中,标记represents the end of the command后面有一个双连字符,它允许您指定与任何现有或以上标志冲突的路径。例如,如果您(无论出于何种原因)有一个名为-n的文件,您可以通过以下方式将其添加到Git:

git add -- -n

所以,总结一下:

  • 如果支持速记标记,请使用单个连字符。
  • 如果您记住命令名称,或者如果没有其他选择(例如--ignore-missing),请使用双连字符作为长手柄。
  • 使用双连字符表示命令的结束。

答案 3 :(得分:0)

使用一个连字符-是为最常用的参数使用快捷参数(每个参数一个字母)。

这是一个Unix惯例。

它们仅供用户在命令行中使用,因为它们很方便。

在其他任何地方(特别是在脚本中),更喜欢使用2个连字符--的等价物,这是一个很好的做法,使它对将来必须阅读它的未来(也许你)更有意义。

您可以在每个Unix命令上使用参数--help查看具有单字母快捷方式的参数。