2014-10-07 6 views
3

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

Самый простой способ продемонстрировать это, чтобы иметь GIT псевдоним следующим образом:

[alias] 
    pwd = !pwd 

Так git pwd просто запустив команду Баш pwd. Можно было бы подумать, что выходы двух команд будут одинаковыми. Теперь, давайте попробовать это несколько раз:

$ cd ~ 
$ pwd && git pwd 
/home/limpchimp 
/home/limpchimp # great! 
$ mkdir foo && cd foo && git init 
Initialized empty Git repository in /home/limpchimp/foo/.git/ 
$ pwd && git pwd 
/home/limpchimp/foo 
/home/limpchimp/foo # great! 
$ mkdir bar && cd bar 
$ pwd && git pwd 
/home/limpchimp/foo/bar 
/home/limpchimp/foo # uuhhhhhhhh...? 

Кажется, что мерзавец изменяет текущий рабочий каталог будет первый родительский каталог, который имеет папку .git (если таковая существует). Это очень проблематично; он закручивает определенные сценарии, которые я написал, которые предназначены для работы в определенном каталоге и не позволяют мне использовать определенные вещи в качестве псевдонимов git. Есть ли способ обойти это? Как я могу это исправить?

+1

Возможный дубликат [Почему работает команда, как мерзавец псевдоним дает разные результаты?] (HTTP: // StackOverflow .com/вопросы/8832799/почему-это-обкатка команды-как-ГИТ-псевдоним дает-разные-результаты) –

ответ

6

Это четко указано в документации, в соответствии с проектом, а также обходной путь, если это необходимо.

Git Config Alias

Обратите внимание, что команды оболочки будет выполняться из каталога верхнего уровня из хранилища, который не обязательно может быть текущий каталог. GIT_PREFIX устанавливается возвращаемый запустив GIT РЭВ-синтаксического анализа --show-префикс из исходного текущего каталога

2

Это (ошибочно?) Функция, но вы можете работать вокруг него с $GIT_PREFIX как отмечено в this other stackoverflow question and answer:

#! /bin/sh 
# script to do stuff in a git dir 
# since we're sometimes run from a git alias we need 
# to cd back into $GIT_PREFIX if it's set 
[ "$GIT_PREFIX" != "" ] && cd "$GIT_PREFIX" 
... rest of script ... 
Смежные вопросы