2013-04-15 2 views
6

мерзавец список копить >> перечислит все притонымерзавец субкоманда VS мерзавца --option

мерзавец тег --list >> перечислит все теги

, но почему «список» в первом команда и "--list" во второй команде? Это сбивает меня с толку (скажем, вы делаете «список тегов git», тогда вы фактически создаете тег под названием «список»). Используется ли это только для команд «stash» (поскольку все команды тайника кажутся без)? Какова логика этого?

Edit:

после Чарльз Бейли ответа я нашел, что лучше дать постановку вопросу более общий смысл, так что она становится более полезной. Итак, существует ли какое-либо соглашение, используемое git для различения «подкоманд» (например, git stash list) и «опций» (например, git tag --list)?

благодарит за вклад

ответ

3

Я бы сказал, что причина этого заключается в том, потому что git tag принимает аргумента - в отличие от подкоманды - который должен иметь возможность называть все, что угодно. Вы обязательно должны будете назвать тег «list», если вы так решите. Поэтому git tag должен скрыть свои «подкоманды» (или опций) за флагами вместо подкоманд.

Аргументы git stash более строго определены, поэтому он может использовать true s ubcommands.

+0

Я думаю, что это лучшее объяснение до сих пор, почему git tag использует --list, но возникает вопрос о том, почему тогда git stash не использует -list для согласованности, а не для списка. – JosefAssad

+0

Моя догадка заключается в том, что это сделало бы 'git stash' несовместимым с самим собой, и тогда' -list' будет действовать как подкоманда, но предоставляется команде в качестве опции, что на самом деле не является намерением. Я полагаю. :) Edit: Кроме того, 'git stash list' имеет свои собственные опции. –

+0

[1] Это было бы удовлетворительно для меня, если бы это был только «тег», который имеет этот шаблон, но тот факт, что это не так. Посмотрите на другие оценки: git commit, например, имеет множество опций, которые следуют за шаблоном -option и не имеют каких-либо подкоманд. Кроме того, это правда, что вы должны иметь возможность вызывать свой тег что угодно, включая «список», но даже с «git-stash» вы могли бы назвать его таким образом: git stash -a «list»! – Alaa

1

Причина разницы в том, что stash имеет несколько команд подменю (создание, список, применять капли, поп и т.д.), так что первое слово (обычно) stash субкоманду и не опция. stash - это как bundle, remote и submodule в этом отношении.

tag - это просто «нормальная» команда, она только перечисляет (по умолчанию) или создает теги (легкие или полные). Поскольку «список» является действием по умолчанию, и вам обычно не нужно его подавать, это опция и, следовательно, --.

-3

Потому что git is the stupid content tracker, если вы мне не верите, читайте NAME раздел man git. Там нет никакой логики за ее команды и параметрами команды, они часто противоречивы, но никто не заботится :(

+0

Это очень плохой ответ, на мой взгляд, если он вообще есть. За этим стоит логика, и теперь есть несколько ответов. Утверждение, что «никто не заботится», очевидно, неверно, поскольку кто-то задает вопрос по этому вопросу, но, кроме того, это утверждение неоднозначно в отношении того, о ком вы говорите. Никто [в команде разработчиков git] или [кто пользователь git] или [вообще]? –

+0

Никто в команде разработчиков и разработчиков git. Что касается логики команд и параметров, есть хорошая запись в блоге http://stevelosh.com/blog/2013/04/git-koans/. – Paul

+0

Возможно, потому, что в настоящее время существует логика. –

2

Я бы сказал, что просто английское слово tag может использоваться в качестве глагола, поэтому естественно говорить git tag v1 и ожидать, что он действительно пометит текущую выписку v1.

Дело в том, что вы можете добавить псевдонимы, чтобы сделать практически любой синтаксис, который вы хотите. Когда вы устанете печатать git checkout в полном объеме, сделайте псевдоним. Попробуйте искать handy git aliases.

+0

Псевдонимы разрешили бы это, но я ищу общий ответ, объясняющий stash, tag и остальные команды git, которые имеют одну и ту же проблему. Я предполагаю, что я ищу «соглашение об именах» (если есть), которое используется git для выделения подкоманд из -options. Почему «список» был установлен в качестве подкоманды в «stash» и как «-» в теге? Например, «powershell» использует «существительные-глаголы»; есть ли какое-либо соглашение, используемое git? Пожалуйста, посмотрите мои комментарии [1] и [2] на Виктора Заманяна. Спасибо всем за вклад. – Alaa

Смежные вопросы