Подтвердить что ты не робот

Bash git Ошибка завершения табуляции алиаса

Я знаю, что алиасы Git могут быть использованы с аргументами Git Раздел "FAQ" Git Псевдонимы с аргументом.

Но сегодня я столкнулся с ошибкой.

Возьмите простой пример, который не подходит для реального использования. Если я сделаю псевдоним следующим образом:

[alias]
    lo = "!sh -c 'git log $1' -"

то я могу использовать

git lo file_a

чтобы просмотреть журнал file_a.

Но когда я использовал "вкладку" для автоматического завершения пути, возникает следующая ошибка.

git lo [tab]

error msg:

sh: declare: `_git_{': not a valid identifier

Кажется, ошибка в git -completion.bash. Но я не могу найти, где `_git_ {'is!

Также я обнаружил, что в сообщении об ошибке msg метка цитаты вокруг _git_ {кажется странной.

BTW, моя версия msysgit - 1.7.6-preview20110708

ADD:

Другая странная вещь: я искал все файлы под dir Git, не нашел файл, содержащий строку _git _ {.

4b9b3361

Ответ 1

Я предполагаю, что для git установлена ​​настраиваемая функция завершения, и ошибка в этой настройке. Попробуйте сначала удалить пользовательское завершение и посмотреть, исчезла ли ошибка:

complete -r git

Боковое примечание: для команд оболочки с повторными аргументами в псевдониме git, современная идиома - это определение функции оболочки, которая позволяет использовать стандартную обработку аргументов оболочки и имеет меньшее количество аргументов аргументов, с которыми приходится иметь дело при сравнении to 'sh -c':

[alias]
  plush = "!f() { git pull \"[email protected]\" && git push \"[email protected]\" }; f"

Ответ 2

У меня была такая же проблема. Например, у меня был псевдоним для удаления локальной ветки и ее удаленной копии за один раз:

[alias]
db = "!f() { git branch -d $1 && git push origin :$1; }; f"

Чтобы устранить проблему, я удалил псевдоним и добавил файл с именем git -db в каталог Git сценариев. Это может быть любой каталог в PATH. Здесь содержимое файла.

#!/bin/sh

git branch -d $1 && git push origin :$1

Обратите внимание, что файл не должен иметь расширение. Его можно использовать так же, как псевдоним:

git db mybranch

Ответ 3

Эта ошибка связана с недостатком завершения bash script, который поставляется со старыми версиями Git. Он не был предназначен для обработки псевдонимов оболочки, которые вызвали эту ошибку. Это было зафиксировано в commit 56f24e80f0, но это изменение не было включено до Git 2.1.0. Тем не менее, msysGit относится к этой записи еще на Git 1.9.5 и поэтому не включает исправление.

Предпочтительным решением является переход на Git для Windows, преемник msysGit, который отслеживает текущие релизы Git.

Однако, если вы застряли со старой версией Git, вы все равно можете решить проблему, заменив псевдоним пользовательским script, как описано в ответ от @Reinhard Nägele.