Git авто завершение ведёт себя странно - PullRequest
1 голос
/ 07 ноября 2019

Я вижу что-то очень странное с git alias эс. При использовании клавиши табуляции для автоматического выполнения git команд я получаю bash ошибки. Например, если я набираю git pu, чтобы увидеть все варианты, это происходит:

$ git pu-bash: remote: command not found
-bash: -v: command not found
-bash: command substitution: line -327: syntax error near unexpected token `|'
-bash: command substitution: line -327: `| '
-bash: usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]: command not found
-bash: rev-parse: command not found
-bash: usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]: command not found
-bash: usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]: command not found
-bash: brname: command not found
-bash: brname: command not found
-bash: brname-trimmed: command not found
-bash: brname-trimmed: command not found
-bash: ls-files: command not found
-bash: @{u}: command not found

Терминал застревает на нескольких строках в вышеприведенном выводе, и после ^C пару раз все строки с ошибкаминапечатано.

Я не уверен, к какому файлу относятся номера строк, к которым относятся ошибки: мои alias s в ~/.gitconfig заканчиваются на строке 174. Я закомментировал любой псевдоним, имя которого было указано всписок ошибок (например, brname), или использовали команду git, которая была указана (например, встроенная rev-parse находится в ошибке). Это было сделано до тех пор, пока сообщения об ошибках не исчезли, и автозаполнение снова не заработало.

Итак, теперь в хорошем состоянии, если я наберу git pu и нажму вкладку, я вижу следующее:

$ git pu
pull   pull   push   push  

Обратите внимание, что здесь ответы удваиваются, и для любого другого ввода я нажимаю клавишу Tab.

Один из псевдонимов, которые я закомментировал, чтобы получить хорошее состояние, это:

brname-trimmed = !git rev-parse --abbrev-ref HEAD | tr -d '\n'

Допустим, я на вкладке T1

  1. Если я открою новую вкладку T2, раскомментирую псевдоним на T1 и сохраню файл, я могу без проблем использовать git с автоматическим завершением на T2.
  2. Если я раскомментирую псевдоним, сохраню файл, а затем открою новую вкладку T2 и наберу git pu на T2. Я вижу:
$ git pu-bash: : command not found
-bash: command substitution: line -166: syntax error near unexpected token `&&'
-bash: command substitution: line -166: `&& '

строка 166 моего ~/.gitconfig не имеет : и &&, оно даже закомментировано.

Если я раскомментирую псевдоним и изменим его на xbrname-trimmed (просто добавив x в начало, чтобы это было другое слово), автозаполнение будет работать отлично, независимо от того, когда открыт T2.

Я работаю на машине, которую не занимался разработкой несколько месяцев, поэтому не уверен, когда возникла проблема. Git-версия 2.22.0

1 Ответ

1 голос
/ 07 ноября 2019

Сначала проверьте, сохраняется ли проблема с Git 2.24, учитывая, что 2.23 и 2.24 работали над сценарием завершения.

Проверьте также, правильно ли установлено ваше завершение Git bash .

Я добавил в комментариях :

Есть вероятность, что у вашего .bashrc/.profile будет какая-то ошибка, которая может проявиться при запуске этого сценария завершения bash.
Вам необходимопротестируйте его с минимальным (почти пустым) содержимым для вашего .bashrc/.profile («пусто», помимо определения по крайней мере $PATH)

OP alamoot подтверждает:

Отличный звонок!
В моем ~/.bash_profile я вызывал скрипт, который устанавливал пользовательские $BASH_COMPLETION и $BASH_COMPLETION_DIR.
Этот пользовательский скрипт был частью старой "настройки системы", которую ямне больше не нужно.
Итак, вытащив его, я снова завершил работу с git.

...