我想知道是否有一种方法可以为git命令默认设置一个标志.具体来说,我想设置--abbrev-commit标志,以便在执行时git log,我想执行git log --abbrev-commit.
与" git命令默认设置标志是否有任何方法? "不同,显然没有用于将-abbrev-commit添加到git log的配置标志.此外,git手册指出我无法创建别名:"为避免混淆和使用脚本的麻烦,忽略隐藏现有git命令的别名"
我的第三个选择是glog=log --abbrev-commit在我的.gitconfig文件中创建一个新的别名.但我宁愿不用新命令发明自己的DSL.
有没有其他方法来实现它,以便abbrev-commit默认设置标志?
und*_*run 55
从git版本1.7.6开始,git config获得了一个log.abbrevCommit选项,可以设置为true.因此,答案是升级到至少1.7.6(截至本文撰写时的当前版本是1.7.11.4)并使用:
git config --global log.abbrevCommit true
Run Code Online (Sandbox Code Playgroud)
dah*_*byk 43
默认情况下,您可以使用自定义格式进行git log模仿--abbrev-commit:
git config format.pretty "format:%h %s"
Run Code Online (Sandbox Code Playgroud)
has*_*sen 32
git中没有通用机制来为命令设置默认参数.
您可以使用git别名来定义带有所需参数的新命令:
git config alias.lg "log --oneline"
Run Code Online (Sandbox Code Playgroud)
然后你就可以跑了git lg.
某些命令还具有配置设置以更改其行为.
Ing*_*kat 10
VonC已在他的回答中暗示了一个shell包装器; 这是我的这种包装器的Bash实现.如果你把这个放入你的.bashrc,你的交互式shell将支持覆盖Git内置命令以及大写别名.
# Git supports aliases defined in .gitconfig, but you cannot override Git
# builtins (e.g. "git log") by putting an executable "git-log" somewhere in the
# PATH. Also, git aliases are case-insensitive, but case can be useful to create
# a negated command (gf = grep --files-with-matches; gF = grep
# --files-without-match). As a workaround, translate "X" to "-x".
git()
{
typeset -r gitAlias="git-$1"
if 'which' "$gitAlias" >/dev/null 2>&1; then
shift
"$gitAlias" "$@"
elif [[ "$1" =~ [A-Z] ]]; then
# Translate "X" to "-x" to enable aliases with uppercase letters.
translatedAlias=$(echo "$1" | sed -e 's/[A-Z]/-\l\0/g')
shift
"$(which git)" "$translatedAlias" "$@"
else
"$(which git)" "$@"
fi
}
Run Code Online (Sandbox Code Playgroud)
然后git log,您可以通过将名为git-logsomewhere 的脚本放入PATH 来覆盖:
#!/bin/sh
git log --abbrev-commit "$@"
Run Code Online (Sandbox Code Playgroud)
我喜欢这种git log --oneline格式。要将其设为默认值,请使用
git config --global format.pretty oneline
信用:https : //willi.am/blog/2015/02/19/customize-your-git-log-format/
我有一个类似的问题(Git命令的许多默认选项都是哑的).这是我的方法.在路径上创建一个名为'grit'(或其他)的脚本,如下所示:
#!/bin/bash
cmd=$1
shift 1
if [ "$cmd" = "" ]; then
git
elif [ $cmd = "log" ]; then
git log --abbrev-commit $@
elif [ $cmd = "branch" ]; then
git branch -v $@
elif [ $cmd = "remote" ]; then
git remote -v $@
else
git $cmd $@
fi
Run Code Online (Sandbox Code Playgroud)
非常简单的阅读和维护,以防您需要与Bash非专家共享.