我可以嵌入以下bash shell代码:
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'
但是,在永无止境的简单追求中,必须有一种跳过文件并将代码直接插入别名的方法吗?我无法弄清楚格式......
git config --global alias.diffall '!sh diffall.sh'
这在某种程度上是多余的.如果你打算在你的$ PATH中添加'diffall.sh',为什么不把它保存为'git-diffall',并保存自己不要声明别名.是的,"git diffall"将运行它.
要在git别名中运行命令,特别是将参数传递给这些命令,您可能必须创建一个临时函数,然后立即调用:
$ vim ~/.gitconfig ... [alias] # compare: foo = "! echo begin arg=$1/$2/end" foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
在这个例子中,函数可能就是你所需要的(并且在单个"语句"中你可以做的更灵活); 并且您可以告诉对于这两个选项,git命令的剩余args只是作为args传递给别名,无论它是"echo"还是"f"; 调用该函数只是消耗args,忽略未明确使用的内容:
$ git foo a b c begin arg=a/b/end a b c $ git foo2 a b c begin arg=a/b/end
另一个例子(基于匹配模式列出所有别名)(注意:你可以在.gitconfig中继续重复使用相同的函数名"f()"):
[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
(nb:实际结果可能因shell而异;我在Linux,Unix和Cygwin(Windows)上使用bash.)
我在文档中找不到,但是如果你在路径中创建一个脚本"git-
看到:
$ 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| 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特别是,读取'带参数的高级别名'