web-dev-qa-db-ja.com

コマンドにgitのデフォルトフラグを設定する

Gitコマンドにデフォルトでフラグを設定する方法があるかどうか知りたいです。具体的には、--abbrev-commitを実行するときにgit logを実行するように、git log --abbrev-commitフラグを設定します。

質問 " gitコマンドのデフォルトでフラグを設定する方法はありますか? "とは異なり、-abbrev-commitをgitログに追加するための構成フラグは明らかにありません。さらに、gitマニュアルには、エイリアスを作成できないと記載されています。 「スクリプトの使用に関する混乱とトラブルを避けるため、既存のgitコマンドを隠すエイリアスは無視されます」

3番目のオプションは、.gitconfigファイルにglog=log --abbrev-commitなどの新しいエイリアスを作成することです。ただし、新しいコマンドを使用して独自のDSLを発明することは避けたいです。

abbrev-commitフラグがデフォルトで設定されるようにする別の方法はありますか??

83

Gitバージョン1.7.6以降、git configはtrueに設定できるlog.abbrevCommitオプションを取得しました。したがって、答えは少なくとも1.7.6にアップグレードすることで(この記事の執筆時点では1.7.11.4であり)、以下を使用します。

git config --global log.abbrevCommit true
53
underrun

カスタム形式を使用して、git log模倣--abbrev-commitデフォルトでは:

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

Gitには、コマンドのデフォルト引数を設定する一般的なメカニズムはありません。

git aliases を使用して、必要な引数を使用して新しいコマンドを定義できます。

git config alias.lg "log --oneline"

その後、git lgを実行できます。

一部のコマンドには、動作を変更する構成設定もあります。

32
hasen

VonCは、彼の答えで既にシェルラッパーを示唆しています。このようなラッパーのBash実装を次に示します。これを入れると.bashrcに追加すると、インタラクティブシェルは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
} 

git logという名前のスクリプトをPATHのどこかに置くことで、git-logをオーバーライドできます。

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

同様の問題があります(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

Bashの非専門家と共有する必要がある場合に備えて、読みやすく保守しやすい。

7
Steve Bennett

開発者にパスに追加するディレクトリを提供するために、使用するすべてのユーティリティ(svn、maven、git、...)は常に.bat(Windowsの場合、またはUnixの.sh)にカプセル化されます。

Gitがラッパースクリプトにカプセル化されている場合、...すべてが可能です。

しかし、それはユーザーのセットアップにリンクされたソリューションであり、Git自体やgitリポジトリにリンクされたものではありません。

2
VonC

私は好き git log --oneline フォーマット。デフォルトとして取得するには、使用します

git config --global format.pretty oneline

クレジット: https://willi.am/blog/2015/02/19/customize-your-git-log-format/

1
Ariel Gabizon