Могу ли я встроить следующий код оболочки bash:
for name in $(git diff --name-only $1); do git difftool $1 $name & done
непосредственно при создании псевдонима git:
git config --global alias.diffall ***my-bash-code-here***
Это следует из моего предыдущего вопроса / ответа по SO, где я поместил код в файл .sh, а затем присвоил ему псевдоним:
git config --global alias.diffall '!sh diffall.sh'
Но в нескончаемом поиске простоты должен быть способ пропустить файл и вставить код прямо в псевдоним? Не могу понять формат ...
! binary
!sh git checkout $(git log --branches -1 --pretty=format:'%D' | sed 's/.*, //g')
приводит к/usr/lib/git-core/git: /usr/lib/git-core/git: cannot execute binary file
. Пробовал сначала как с так и безsh
.Чтобы запускать команды внутри псевдонима git и, в частности, передавать аргументы этим командам, вам, вероятно, придется создать временную функцию, которую вы затем немедленно вызовете:
$ vim ~/.gitconfig ... [alias] # compare: foo = "! echo begin arg=$1/$2/end" foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
В этом примере функция, вероятно, то, что вам нужно (и она более гибкая в отношении того, что вы можете сделать в одном «операторе»); и вы, вероятно, можете сказать, что для обоих вариантов оставшиеся аргументы команды git просто передаются как аргументы псевдониму, независимо от того, является ли он «echo» или «f»; вызов функции просто использует аргументы, игнорируя то, что явно не используется:
Другой пример (перечисляет все псевдонимы на основе совпадающего шаблона) (примечание: вы можете повторно использовать одно и то же имя функции «f ()» во всем .gitconfig):
[alias] alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
Первый возвращает псевдоним только для «foo $», второй для «foo. *»:
$ git alias foo alias.foo ! echo begin arg=$1/$2/end $ git alias 'foo.*' alias.foo ! echo begin arg=$1/$2/end alias.foo2 !f() { echo begin arg=$1/$2/end; }; f
(Примечание: фактические результаты могут отличаться в зависимости от оболочки; я использую это с bash в Linux, Unix и Cygwin (Windows).)
источник
sh -c
, так что вам не нужно беспокоиться о том, что такое оболочка входа пользователя.git status
, пользовательскими псевдонимами»Мне не удалось найти в документации, но если вы создадите скрипт «git- <name>» в пути, вы можете вызвать его с «git name» в своем репо.
Видеть:
$ cd ~/bin $ echo "echo I love this log: >pwd >git log --graph --summary --decorate --all" > git-logg $ chmod +x git-logg $ cd /path/to/your/repo $ git logg I love this log: /path/to/your/repo * commit 3c94be44e4119228cc681fc7e11e553c4e77ad04 (whatever-branch) | Author: myself <my@Laptop.(none)> | Date: Fri Apr 1 16:47:20 2011 +0200 | | would have been better not to do it at all | ... $
Таким образом, вы можете написать любой псевдоним, который вам нравится, с помощью этого (довольно непонятного) способа.
Более того, вы можете добавить автозаполнение к этой новой команде, определяющей функцию. Информация здесь
$ _git_logg () { # you can return anything here for the autocompletion for example all the branches __gitcomp_nl "$(__git_refs)" }
источник
Добавление этих двух строк в ваш .git / config файл должно помочь.
[alias] diffall = '!for name in $(git diff --name-only $1); do git difftool $1 $name & done'
Изменить: предположительно, версия git-config тоже работает, но мне нравится хранить свои псевдонимы в файле конфигурации для удобства управления.
В git wiki есть хорошая страница, которая очень четко объясняет псевдонимы: http://git.or.cz/gitwiki/Aliases В частности, прочтите «расширенные псевдонимы с аргументами»
источник
(Из документации ProGit: http://progit.org/book/ch7-3.html )
Вы пробовали добавить скрипт в .git / hooks?
Например, если вы создаете скрипт .git / hooks / post-checkout:
#!/bin/bash echo "This is run after a 'git checkout'"
а затем запустите команду:
$ git checkout master Switched to branch 'master' This is run after a 'git checkout'
источник