Я пытаюсь создать псевдоним, который использует несколько команд Git и позиционные параметры. Для каждого есть страницы Stackoverflow, и кажется, что делать то и другое мучительно очевидно, но у меня возникли проблемы.
В качестве примера я хочу перейти на ветку foo и выполнить статус. Итак, по моему .gitconfig
, у меня есть:
[alias]
chs = !sh -c 'git checkout $0 && git status'
который не работает. В то время как что-то подобное будет работать.
chs = !sh -c 'git checkout $0'
echoes = !sh -c 'echo hi && echo bye'
Любое понимание будет оценено.
Ответы:
Это будет работать (протестировано с zsh и bash):
источник
git chs foo
вgit checkout && git status foo
echo $1 && echo done
, когда вызывается с аргументом 'foo', выведет как 'foo', так и 'done foo'.git
?!
средства передают все это оболочке. В противном случае предполагается, что вы пытаетесь запустить другую команду git, и передает ее в качестве аргументов вgit
двоичный файл.;:
вместо того, чтобы&& :
хотя. И это прекрасно работает и на Unix.Это предназначается для Windows batch / msysgit bash; может не работать в других средах.
Как сказали Оливье Вердиер и Лили Баллард
[alias] chs = !git checkout $1 && git status
почти работает, но дает ложную дополнительную вставку аргумента ...
git chs demo -> git checkout demo && git status demo
Но если вы добавите
&& :
в конец свой псевдоним, то ложный аргумент будет использован в теге location.Так
дает правильный вывод ...
git chs demo -> git checkout demo && git status
источник
&& :
золото и заставляет это решение работать для команд, где дополнительный аргумент будет проблематичным.&& :
делает?a=123;$a
ошибки, ноa=123; : $a
это не так. 2.: > hello.txt
опустошает hello.txt. 3.if [ "$a" = "hello" ];then : ;fi
работает нормально, но ошибки без ':'. Это какpass
в питоне. 4.: this is a comment
двоеточие с последующими пробелами, как#
в строке комментария.co = !git checkout public/compiled && git checkout $1
и когда я это сделаю,git co master
я получу сообщениеerror: pathspec 'master' did not match any file(s) known to git.
. Я не думал, что этот ответ будет полезен для меня, потому что первое, что он упоминает, это Windows, и я нахожусь на Linux. Но ты объяснил почему.Вы можете определить функцию оболочки.
источник
"
Мне удалось создать многострочные и довольно сложные псевдонимы git. Они отлично работают на Windows, но я предполагаю, что они будут работать и в других местах, например:
Я написал пост и у меня есть еще несколько примеров здесь .
источник
!f() { : reset
для получения завершений из команды сброса github.com/git/git/blob/master/contrib/completion/…источник
!
?!
но, насколько я вижу, git по умолчанию будет предполагать, что псевдоним - это команда git, поэтому онаt = status
будет работать. Однако, если вы попытаетесь,t = git status
это не сработает (скажем, команда "git" не найдена). Так что, когда!
приходит, он говорит ему, чтобы запустить команду, как если бы это была оболочка, и обычно вам это нужно, когда у вас есть несколько команд git на псевдоним, так что вы можете иметь,t = !git status && git log
например, и это будет работать.Попробуй это:
Назовите это так:
git chs master
источник
Возможно иметь многострочный псевдоним git, добавляя
\
в конце каждой строки.источник
"!git fetch --prune --all; git pull --rebase upstream master; git push origin master"
моего псевдонима.Проблема здесь в том, что позиционные параметры, похоже, отправляются в команду оболочки дважды (начиная с git 1.9.2). Чтобы понять, что я имею в виду, попробуйте это:
Затем сделать
git test this is my testing string
. Вы должны наблюдать следующий вывод (последние две строки отредактированы здесь для ясности):Один из способов обойти это было бы
Это будет использовать дополнительный позиционный параметр, поскольку он будет применен к этой последней команде эха, и не повлияет на результаты.
источник