在命令上设置git default标志

Jes*_*sen 85 git logging

我想知道是否有一种方法可以为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)

  • @Josh,当然是:`git config --global format.pretty oneline` (21认同)
  • 所有这些神秘选择的来源在哪里? (3认同)
  • 不要认为有线上的选项吗? (2认同)

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.

某些命令还具有配置设置以更改其行为.

  • 非常重要的区别是我不想在我的系统上引入"Jespers git语法".我希望我(和其他人使用我的机器)使用通用命令.此外,这将使我的工作在其他机器上更快:我不担心不小心输入"git lg"并得到"未找到"错误 (45认同)
  • 如果其他人正在使用您的计算机并键入git log,那么您的预期解决方案将意味着他们将获得他们没有预料到的结果. (17认同)
  • 我想避免创建自己的语法,所以我更喜欢一个解决方案,我不使用`git lg`但是`git log` (11认同)
  • 重新定义标准别名可能会破坏脚本。 (2认同)

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)


Ari*_*zon 9

我喜欢这种git log --oneline格式。要将其设为默认值,请使用

git config --global format.pretty oneline

信用:https : //willi.am/blog/2015/02/19/customize-your-git-log-format/


Ste*_*ett 7

我有一个类似的问题(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非专家共享.