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


88

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

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

私の3番目のオプションはglog=log --abbrev-commit、.gitconfigファイルのような新しいエイリアスを作成することです。しかし、私は新しいコマンドで自分のDSLを発明したくありません。

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


1
git 1.7.6以降、この動作を制御するフラグがあります。以下の@underrunによる回答を参照してください。
2013年

回答:


58

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

git config --global log.abbrevCommit true

2
onelineのオプションがあると思いませんか?
Zaz 2013年

1
私はこの答えを受け入れています。ほぼ4年前に質問を書いたので、Gitがこの構成を追加したのはうれしいです。
JesperRønn-Jensen14年

これらすべての神秘的なオプションのソースはどこにありますか?
xaxxon 2015年

誰もがグラフのデフォルトのフラグを知っていますか?リンク@xaxxon私は..ページでそれを見つけることができません
myol

@myol、git config --helpまたはgit help configを使用して、インストールに一致するドキュメントを取得する必要があります
doak

46

カスタム形式を使用して、デフォルトでgit log模倣--abbrev-commitすることができます。

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

すばらしい、これは簡単に最良の答えです。
duane

フォーマット中に色を使用することもできます。「%C(yellow)%h%Creset%s」はgit logのように表示されます-色付きの1行。
Avner

1
さて、簡単な質問です。もしこれが便利で、これが問題に正確に答えたら、これを正しいものとしてマークしてみませんか?
igorsantos07

1
これは、あいまいな名前を覚えたり、エイリアスを覚えるのが難しい場合は、「git log」を常に使用することをお勧めします。
Shyam Habarakada 2014

1
これは私にとって最良の答えでした。log.abbrevCommit設定は、私は好きではなかったフォーマット、冗長な他の多くの影響を及ぼしました。また、%C(auto)%h %s自動カラーリングで通常の1行フォーマットを取得するためにも使用します。git config --global format.pretty "%C(auto)%h %d %s"「デフォルト」として装飾されたonelineが欲しかったので使用しました
davenpcj

33

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

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

git config alias.lg "log --oneline"

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

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


12
私は私が使用していないソリューションを好むので、私自身の構文を作成しないようにしたいgit lgけどgit log
ジェスパーロン・ジェンセン

どうして?どのような違いがありますか?
10

46
非常に重要な違いは、システムに「Jespers git構文」を導入したくないことです。私(および自分のマシンを使用している他の人)に汎用コマンドを使用してほしい。また、これにより他のマシンでの作業が速くなります。誤って「git lg」と入力して「見つかりません」エラーが発生する心配はありません
JesperRønn-JensenApr

19
他の誰かがあなたのマシンを使用していてgit logと入力した場合、あなたが意図した解決策は彼らが期待していない結果を得ていることを意味します。
Abizern

1
標準エイリアスを再定義すると、スクリプトが壊れる可能性があります。
justintime 2014年

10

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、どこかという名前のスクリプトをgit-logPATHに入れてオーバーライドできます。

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

7

同様の問題があります(Gitコマンドのデフォルトオプションの多くは馬鹿げています)。これが私のアプローチです。次のように、パスに「グリット」(またはその他)というスクリプトを作成します。

#!/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の非専門家と共有する必要がある場合に備えて、読み取りと保守が非常に簡単です。


「git remote blah」から「git branch blah」を呼び出してもよろしいですか?私はパスの前にgitを置き、スクリプトで/ usr / bin / gitを明示的に呼び出す、このバリアントを使用しています。ええ、これはおそらく何かを壊します。
LovesTha 2015

1
私はこれが好きで、さらに2つの微調整を行いました。私はそれをbash関数にgitして、実際のコマンドパスを取得するための最初の行を追加して名前を付けましたthegit=`/usr/bin/which git`。そして、私のようなコマンドの前のxとオーバーライドをキャンセルするオプションを追加しましたgit x log ...if [ "$cmd" = "x" ]; then; $thegit $@
ジョシュアゴールドバーグ


0

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

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

しかし、それはGit自体やgitリポジトリにリンクされず、ユーザーの設定にリンクされたソリューションのままです。


つまり、.bash_profileにエイリアスを追加することでそれを実現できるはずですか?
JesperRønn-Jensen2010

@Jesper:ラッパーgit.batが実行するGitコマンドを検出し、必要なオプションを追加できるため、これがアイデアです。
VonC 2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.