Git псевдонимы с аргументами и рыбной раковиной - PullRequest
0 голосов
/ 16 ноября 2018

Псевдонимы Human Git включают некоторые функции, которые принимают аргументы, например

into = "!f() { B=$(git current-branch); git checkout $1; git pull; git merge $B --no-edit; }; f"

У меня проблемы с тем, чтобы подобные вещи работали с рыбой.
Я могу создать псевдоним рыбы, скажем, git-into, который работает, но я бы предпочел иметь псевдоним git, поэтому мне не нужно запоминать, какие команды используют тире, а какие - пробел.

Использование ! fish -c STUFF" or "! bash -c STUFF неправильно передает аргументы.

Как бы я сделал так, чтобы

git into repository

будет делать эквивалент сценария выше?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Добавление ведущего "!"псевдоним действительно означает, что git запускает его в оболочке, но эта оболочка здесь не рыба.Это оболочка, которая была задана во время сборки как SHELL_PATH, скорее всего (и по умолчанию) "/ bin / sh".А поскольку git использует ту же оболочку для запуска других вещей (например, пейджера), она, безусловно, должна быть POSIX-совместимой, что исключает использование fish.

Выбранная пользователем оболочка для входа не имеет значения.

Таким образом, вы можете просто использовать оригинальный код, и он должен работать.

В качестве альтернативы, вы можете поместить это в скрипт с именем git-into (без окончания, правильной строки shebang и исполняемого бита)в $ PATH, и git найдет его, когда вы вызовете git into.

Если вы действительно захотите использовать fish -c здесь, вам придется иметь дело с двумя слегка несовместимыми слоямицитирование, которое я бы не рекомендовал.

0 голосов
/ 16 ноября 2018

Нет ни одного git current-branch.

Если вы хотите текущее имя ветки:

# extract the current branch name
git branch | grep \* | cut -d ' ' -f2

# or 
git rev-parse --abbrev-ref HEAD

# since you are already on the current branch all you need is pull & merge
# be aware that there can be conflicts
into = "!f() { git pull; git merge $B --no-edit; }; f"

Если вы хотите передать параметр и проверить другую ветку, у вас уже есть его в псевдониме

git checkout $1
...