Почему запуск команды под псевдонимом git дает разные результаты? - PullRequest
13 голосов
/ 12 января 2012

У меня есть следующий 1-строчный текст, который я использую, чтобы увидеть, кто может быть хорошим кандидатом на помощь с кусочком кода:

git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr

, который перечисляет авторов в порядке коммитов, он сырой, но работает нормально.

Однако, когда я добавляю его в свой git config, вот так:

[alias]
    guru=!git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr

работает

git guru

Дает различные результаты при запуске из командной строки.

stuart@beavis(rp):~/git/apps$ git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr
710 Author: dave <dave@b2368a2b-315f-46b9-a0b0-05934f827f41>
415 Author: pete <pete@b2368a2b-315f-46b9-a0b0-05934f827f41>
402 Author: craig <craig@b2368a2b-315f-46b9-a0b0-05934f827f41>

По сравнению с:

stuart@beavis(rp):~/git/apps$ git guru
859 Author: craig <craig@b2368a2b-315f-46b9-a0b0-05934f827f41>
813 Author: paul <paul@b2368a2b-315f-46b9-a0b0-05934f827f41>
798 Author: dave <dave@b2368a2b-315f-46b9-a0b0-05934f827f41>

Как отмечает Стефан Неве ниже, псевдонимы запускаются в корне вашего хранилища, есть ли способ запустить команду в каталоге, в котором я нахожусь, или указать?

Ответы [ 3 ]

23 голосов
/ 21 февраля 2014

есть ли способ запустить команду в каталоге, в котором я нахожусь, или указать?

Да, есть.Когда вы запускаете команду git, ваша среда получает переменную GIT_PREFIX со значением относительного пути (от верхнего уровня до пути перед выполнением git), поэтому вам нужен префикс ваших псевдонимов git (которые запускают команды оболочки и нуждаются в правильномpwd) с cd ${GIT_PREFIX:-.} &&.

Простым тестом, добавьте это к своему ~/.gitconfig

[alias] p = !pwd && cd ${GIT_PREFIX:-.} && pwd

13 голосов
/ 12 января 2012

псевдонимы git с помощью команды оболочки (то есть с префиксом !) запускаются на верхнем уровне рабочего каталога (где живет .git). Простые псевдонимы (без !) запускаются в текущем каталоге.

4 голосов
/ 13 января 2012

Глядя на то, что вы делаете, вы, вероятно, захотите использовать git shortlog -sn вместо этого, поскольку это уже делает задачу, о которой идет речь.

псевдонимы git не все работают на верхнем уровне.Как описано в руководстве git config «Обратите внимание, что команды оболочки будут выполняться из каталога верхнего уровня репозитория, который необязательно может быть текущим каталогом».Так что только команды оболочки запускаются на верхнем уровне.Если вы просто используете псевдоним подкоманды git, она будет выполняться в текущем местоположении.Следующий журнал сеанса демонстрирует это:

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git rev-parse  --show-cdup
../../

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git config alias.cdup 'rev-parse --show-cdup'

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git cdup
../../

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git config alias.cdup2 '!git rev-parse --show-cdup'

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$ git cdup2

pat@FROG /c/src/WiRE.git/wdf/src (pt/wdf)
$

В вашем примере используется команда псевдонима, которая начинается с 'git'.Если я попытаюсь установить 'git rev-parse --show-cdup' в качестве псевдонима, он выдаст ошибку, сообщающую, что 'git - это не команда git', поэтому я подозреваю, что на самом деле у вас тоже был восклицательный знак, следовательно, он запускался как команда оболочки, таким образомработает с верхнего уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...