Есть ли причина, по которой сокращенные параметры не могут быть объединены для команды Git sta sh? - PullRequest
2 голосов
/ 05 августа 2020

В мире Unix CLI существует шаблон, в котором часто используемые параметры обозначаются однобуквенным сокращением, и их обычно можно комбинировать вместе или складывать . Очень распространенный пример этого можно найти с помощью команды rm, которая может рекурсивно удалять каталоги. Эти три команды эквивалентны:

rm --recursive --force .
rm -r -f .
rm -rf .

Git имеет много подкоманд, каждая из которых имеет множество параметров. Я привык к Git, позволяя складывать его сокращенные варианты для простоты использования, как и многие другие хорошо написанные инструменты CLI. Например:

git commit -am 'Create new commit message'

Я обнаружил, что git stash - по крайней мере одно исключение, где сокращения для полезных опций --keep-index и --include-untracked не могут складываться в -ku:

git stash -k -u  # This works
git stash -ku    # This doesn't

Есть ли особая c причина для этого, кроме того, что это не было реализовано? Существуют ли другие примеры, когда Git параметры не могут быть объединены, и есть ли в этих примерах конкретные c причины?

1 Ответ

3 голосов
/ 05 августа 2020

Во всех версиях Git, кроме самых последних, git stash был сценарием оболочки, который (по какой-то причине) не использовал синтаксический анализатор параметров Git. Начиная с Git 2.22, был проект по его переписыванию в C. Перезапись C имеет правильный синтаксический анализатор параметров. Однако переделка была не совсем сделана до недавнего времени, и старая версия сценария оболочки все еще существовала.

Как вы сообщили в комментарии , git stash -ku работает в Git 2.27, но не в Git 2.25. Git 2.27 - первая версия, в которой действительно исчезла старая версия сценария оболочки; вероятно, именно тогда, наконец, переключили парсинг опций.

...