Можно ли сократить параметры переключения git?

#git

#git

Вопрос:

Можно git commit -a -m "commit msg" сократить до git commit -am "commit msg" и работать, как ожидалось?

В принципе, могут ли параметры быть заданы как «короткие» переключатели и позволить последнему переключателю принимать аргумент?

Ответ №1:

ДА.

Хорошо написанные команды Unix позволяют объединить несколько однобуквенных параметров за одним дефисом, при условии, что ни один из параметров, кроме последнего в группе, не может принимать аргумент. Git — одна из таких хорошо написанных команд.

Многие люди, которые не проводили много времени в оболочке Unix, не осознают этого, и, к сожалению, иногда эти люди заканчивают тем, что пишут утилиты командной строки, которые не используют стандарт getopt(3) для анализа своих параметров, и в конечном итоге пишут свой собственный анализатор, который не позволяет вам объединять параметры стандартным способом, подобным этому. Итак, есть некоторые плохо написанные команды, которые этого не позволяют. К счастью, git не относится к числу плохо написанных команд.

Ответ №2:

Почему бы вам просто не попробовать?

 $ echo a > a; echo b > b
$ git init
Initialized empty Git repository in /home/me/tmp/a/.git/
$ git add a b
$ git commit -m "hello"
[master (root-commit) 184d670] hello
 2 files changed, 2 insertions( ), 0 deletions(-)
 create mode 100644 a
 create mode 100644 b b > a; echo a > b
$ git commit -am "other commit"
[master 4ec9bb9] other commit
 2 files changed, 2 insertions( ), 2 deletions(-)
  

Журнал:

 commit 4ec9bb943eb230923b4669ef6021124721cb9808
Author: me
Date:   Tue May 17 21:02:41 2011  0200

    other commit

 a |    2  -
 b |    2  -
 2 files changed, 2 insertions( ), 2 deletions(-)

commit 184d670b7862357cd8a898bfcaa79de271c09bd7
Author: me
Date:   Tue May 17 21:02:23 2011  0200

    hello

 a |    1  
 b |    1  
 2 files changed, 2 insertions( ), 0 deletions(-)
  

Итак, все хорошо.

Но: если вы хотите, чтобы это было официально добавлено для git, ознакомьтесь с gitcli справочной страницей. В нем говорится:

разделение коротких параметров на отдельные слова (предпочитайте git foo -a -b git foo -ab, последний может даже не работать)

Таким образом, ваш пробег может отличаться, и команда git предпочитает отдельную форму.

Комментарии:

1. 1 за хорошую работу, но это может зависеть от конкретной реализации или, возможно, не поддерживается более ранними версиями, поэтому ссылка тоже была бы хороша

2. отличный комментарий, тем более что людям, использующим git, не нравятся комбинированные параметры 🙂 Обновил свой пост, чтобы отразить это.

Ответ №3:

Я предполагаю, что пользователь задает вопрос, потому что у него нет доступа к Git, учитывая, что, очевидно, было бы проще попробовать это, чем опубликовать вопрос. К его чести, я действительно попытался найти канонический ответ в документации Git (заметьте, без помощи Google) и потерпел неудачу.

 $ git commit -am "yay"
# On branch master
nothing to commit (working directory clean)
  

Помните, Git написан Линусом Торвальдсом, создателем Linux. Если кто-то и собирается строго придерживаться рекомендаций POSIX, то это он… Вы заметите, что двойное тире ( -- ) для обозначения конечных параметров и начала аргументов также является частью синтаксиса Git:

 git log -n 10 -- some/file.txt
  

Со страницы руководства git log:

 [--] <path>…
    Show only commits that affect any of the specified paths. To prevent 
    confusion with options and branch names, paths may need to be prefixed
    with "-- " to separate them from options or refnames.