在命令上设置git默认标志

我想知道是否有办法设置一个标志默认为git命令。 具体来说,我想设置--abbrev-commit标志,以便在执行git log ,我想要执行git log --abbrev-commit

不像问题“ 是否有任何方式来设置一个git命令默认标志? ”,显然没有configuration标志添加–abbrev-commit到git日志。 此外,git手册指出我不能创build一个别名: “为了避免混淆和脚本使用的麻烦,隐藏现有的git命令的别名被忽略”

我的第三个select是在我的.gitconfig文件中创build一个新的别名,如glog=log --abbrev-commit 。 但我宁愿不用新的命令创造我自己的DSL。

是否有另一种方法来实现它,以便默认设置abbrev-commit标志?

由于git版本1.7.6,gitconfiguration获得了可以设置为true的log.abbrevCommit选项。 因此,答案是升级到至less1.7.6(截至撰写本文时为1.7.11.4),并使用:

 git config --global log.abbrevCommit true 

你可以使用一个自定义的格式来默认的git log mimic --abbrev-commit

 git config format.pretty "format:%h %s" 

git中没有通用机制来设置命令的缺省参数。

你可以使用git别名来定义一个带有必要参数的新命令:

 git config alias.lg "log --oneline" 

然后你可以运行git lg

一些命令也有configuration设置来改变他们的行为。

VonC已经在他的回答中暗示了一个封皮。 这里是我的这种包装的Bash实现。 如果你把这个例如放入你的.bashrc ,你的交互式shell将支持覆盖Git内置命令和大写别名。

 # Git supports aliases defined in .gitconfig, but you cannot override Git # builtins (eg "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" =~ [AZ] ]]; then # Translate "X" to "-x" to enable aliases with uppercase letters. translatedAlias=$(echo "$1" | sed -e 's/[AZ]/-\l\0/g') shift "$(which git)" "$translatedAlias" "$@" else "$(which git)" "$@" fi } 

然后你可以通过把一个名为git-log的脚本放到你的PATH中来覆盖git log

 #!/bin/sh git log --abbrev-commit "$@" 

我有一个类似的问题(许多Git命令的默认选项是哑巴)。 这是我的方法。 在path上创build一个名为“砂砾”(或其他)的脚本,如下所示:

 #!/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 

非常简单的阅读和维护,以防您需要与Bash非专家分享。

我们使用的每个实用程序(svn,maven,git,…)总是封装在一个.bat(在Windows上,或者在Unix上是.sh),以便为我们的开发者提供一个目录添加到他们的path。

如果git封装在一个包装脚本中,那么……一切皆有可能。

但是,这仍然是一个解决scheme,链接到用户的设置,而不是链接到Git本身或git回购。