Git Синтаксис флага: почему у некоторых флагов есть -не тире, а у некоторых есть - два? - программирование

Git Синтаксис флага: почему у некоторых флагов есть -не тире, а у некоторых есть - два?

Я изучаю Git и был неспособен to найти любой объяснение flag syntax.

Я не имею в виду "голые двойные тире"

--

который, как известно, указывает, что следующее не является вариантом. Я имею в виду различные фактические флаги, которые иногда имеют один тире, а иногда и два.

git log -2 -p -U1 --graph

В чем разница между флагом с одним тире и двумя тире? Что указывает двойная тире?

Например, следующие два флага идентичны (в соответствии с этим):

-q
--quiet

Почему различное количество тире? Что, если я поставлю неверный номер?

4b9b3361

Ответ 1

Я понимаю, что git следует за стандартным соглашением Linux для флагов. То есть:

  • одна черта для "коротких" флагов: обычно один символ, но иногда флаги с одним символом, а затем другие символы, которые представляют собой параметр для флага (например, git log -SFoo, в котором Foo является параметром для -S). Эти флаги могут быть или не быть сокращенными формами других более длинных флагов.
  • Две тире для "длинных" флагов: многосимвольные флаги, которые обычно являются английским словом. Если эти флаги получают параметры, они отделяются от флага знаком = (например, git log --author=Peter).

Это "почему": это соглашение, встроенное в мир Linux. git происходит из этого мира, поэтому он следует за конвенцией. Правило "два тире для правила с длинным флагом, одно для короткого флага" должно указывать на то, сколько тире используется для флага.

Что касается того, почему существуют двойные короткие и длинные флаги, такие как --quiet и -q, он просто предоставляет возможность либо мнемонического удобства, либо краткости. --quiet легче запомнить, но -q быстрее набирает и мысленно анализирует, если вы привыкли к нему. Например, я набираю git commit -m "...blah" так часто, что это будет нервничать, если мне нужно удвоить длину моей команды каждый раз, введя git commit --message='...blah'.

Я не встречал никаких флагов git, которые ведут себя по-разному, учитывая две тире и одну тире, так что обычно, если вы введете две тире для флага с одним тире или наоборот, ничего непоправимого плохого не произойдет, git будет просто жаловаться на ваши флаги и ничего не делать.

Конечно, git имеет огромное количество команд, каждый из которых имеет огромное количество флагов, поэтому есть исключения из всех этих правил. Они обычно должны держать.