Ошибка завершения вкладки Bash git alias - PullRequest
13 голосов
/ 02 сентября 2011

Я знаю, что псевдонимы Git могут использоваться с аргументами Раздел Git Faq "Git Aliases with аргумент" .

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

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

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

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

git lo file_a

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

Но когда я использовал «tab»для автоматического завершения пути возникает следующая ошибка:

git lo [tab]

сообщение об ошибке:

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

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

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

Кстати, моя версия msysgit равна 1.7.6-preview20110708

ADD:

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

Ответы [ 3 ]

2 голосов
/ 18 апреля 2013

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

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

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

#!/bin/sh

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

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

git db mybranch
2 голосов
/ 10 июня 2015

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

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

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

2 голосов
/ 21 сентября 2011

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

complete -r git

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

[alias]
  plush = "!f() { git pull \"$@\" && git push \"$@\" }; f"
...