【问题标题】:how do i make git log --graph the default我如何使 git log --graph 成为默认值
【发布时间】:2017-09-19 04:43:33
【问题描述】:

非常类似于这个问题:How to make git log decorate by default

我想让git loggit log --graph。我以为我可以在我的~/.gitconfig 文件的[log] 部分添加类似graph = true 的内容,但它不起作用,我尝试放入[log] 部分的其他28 件事也没有。 :(

我希望有人会建议我添加一个别名,例如 git lg。我不想创建别名。我有两个原因:

  1. 十多年来,我的手指一直在输入git log,我没有兴趣改变它
  2. 由于我的职业生涯,我对别名的使用非常保守。我无法将我的别名添加到我最终以云工程师身份与之交互的数千台机器中,我也无法始终添加我的别名。我在多台机器上使用 git,我希望 git log 成为我用来显示 git 日志的唯一命令。

更新:我想了一个办法,但我讨厌它。这个想法是创建一个名为git 的bash 脚本,并将其放在我的路径中/usr/bin/git 之前的某个位置。它所要做的就是用传递的任何参数调用/usr/bin/git,除非它是log,在这种情况下它会做同样的事情,但会附加--graph。 /我不寒而栗

【问题讨论】:

    标签: git version-control


    【解决方案1】:

    如果你想要一个默认的log --graph,添加到你的~/.bashrc(或~/bash_aliases)这个函数:

    function git {
      cmd=$1
      shift
      extra=
      if [ "$cmd" = "log" ]; then extra=--graph; fi
      "$(which git)" "$cmd" $extra "$@"
    }
    

    现在可以在没有图表的情况下查看日志,并添加相应的 git 别名:

     git config --global alias.log-default 'log'
    

    如果您设置了非默认的漂亮格式,并且想摆脱它,只需添加--pretty=medium

     git config --global alias.log-default 'log --pretty=medium'
    

    作为 git 别名的替代方法,您可以将此行添加到函数 git:

      if [ "$cmd" = "log-default" ]; then cmd='log'; extra=; fi
    

    【讨论】:

      【解决方案2】:

      无论如何,我不认为在所有情况下都将其作为默认设置。我特别想到了当您想要处理git log 的输出或添加其他与--graph 冲突的选项时的情况。

      所以我更喜欢在你的更新中使用这个想法,并在我的$HOME/bin 中放置一个小脚本,称为git,它位于我的$PATH 中安装的git 之前。

      看起来像这样:

      #!/bin/bash
      
      function run_git(){
          real_git=$(which -a git | sed '2 !d;')
          bash -c "$real_git $(printf ' %q' "$@")"
      }
      
      if [ -t 1 ]; then
          case "$*" in
          log)
              run_git log --graph
              exit $?
              ;;
          esac
      fi
      
      run_git "$@"
      

      功能:

      • 获取要调用的实际git 可执行文件。
      • 运行命令,通过双引号保留参数中的空格(感谢this answer

      [ -t 1 ] 测试检查是否直接输出到终端,以避免弄乱潜在的脚本/程序/管道。 (感谢this question

      然后case 语句将允许简单地处理其他类似情况。

      【讨论】:

      • 我自己的答案很有趣。 +1。那个脚本似乎比我的更完整;)
      • 默认这样做正是我想要的。对于我不想要它的时候(例如通过脚本处理),我希望其他工具使用的两种行为之一。要么:a)git可以检测到它的输出正在通过管道并关闭影响显示的默认选项。用户仍然可以手动指定这些选项。或者更好 b) git 应该有一个 --graph 以及一个 --no-graph 选项。后者可用于关闭默认选项。这两种技术在 VCS 和包管理器等大型 CLI 应用程序中都很常见。
      【解决方案3】:

      我不知道:

      • 图形选项的 git 配置:您可能必须提出与我在 Git 2.13 for got log --decorate 中提到的类似的默认行为
      • 一种没有某种包装的方法

      例如,您可以define a bash function 添加选项

      function do_git {
        cmd=$1
        shift
        extra=""
        if [ "$cmd" == "log" ]; then
          extra="--graph"
        fi
        "`which git`" "$cmd" "$extra" "$@"
      }
      

      然后添加一个包装器或别名来引用do_git。

      优点是该函数是您的 dotfiles 的一部分,您可以将其作为 git repo 进行管理并在您的机器上复制。参见例如“ Managing Dotfiles with Git

      【讨论】:

      • 你的想法跟我一样!此外,从进一步阅读看来,git 本身不允许您在 gitconfig 中设置图形。所以现在是包装器。
      • @tr3buchet 是的,目前没有允许将 --graph 定义为默认值的原生选项。
      • 如果你要包装一些东西,为什么不包装git-log,因为它会更具体。此外,您可以在 ~/.gitconfig 中创建别名,这似乎是最好的选择。
      • @iconoclast 是 git log 的别名?我相信它不会起作用:stackoverflow.com/q/5916565/6309stackoverflow.com/a/3538791/6309。我并没有尝试定义 git-log 可执行文件。
      猜你喜欢
      • 1970-01-01
      • 2011-11-10
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2020-05-26
      • 2011-07-28
      • 2018-03-11
      相关资源
      最近更新 更多