web-dev-qa-db-ja.com

meld、kdiff3などのdiffビューアで「git show」の出力を表示するにはどうすればよいですか

git diffなどを使用してmeldなどのdiffビューアでgit difftoolコマンドの出力を表示する方法を示すSOの質問がたくさんあります。ただし、git diffについては質問していません。

Meldなどのdiffビューアでgit show <previous commit sha1>の出力を表示したい。これどうやってするの?

41
Buttons840

git difftoolを使用して、単一のコミットを表示できます。

Sha1 abc123でコミットを見たいとしましょう:

git difftool abc123~1 abc123

~1は前のコミットに移動するようにgitに指示するため、abc123~1abc123の前のコミットです)

これを定期的に使用する場合は、カスタムgitコマンドを作成して簡単にすることができます。

  1. git-showtoolのどこかに$PATHというファイルを作成し、次の内容を含めます。

    git difftool $1~1 $1
    
  2. そのファイルに実行権限を与えます。

    chmod +x ~/path/to/git-showtool
    
  3. コマンドgit showtool <sha1 or tag or ...>を使用します

  4. 利益。
47
georgebrock

Georgebrockの応答に基づいて、.gitconfigに次のようなエイリアスを作成できます。

showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"

次に、git showtool abc123を使用して実行できます(このための個別のシェルスクリプトを作成する必要はありません)。リビジョンを省略すると、デフォルトでHEADになります。

20
sagittarian

Gitの知識が少ない方のためのsagittarianの提案を翻訳するには、これをグローバルに追加しますC:\ Users [user name]にあるグローバル。gitconfigファイル:Windowsユーザーの場合:

[alias]
    showtool = "!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1"

または、get bashシェルで次のコマンドを実行できます。

git config --global alias.showtool '!showci () { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1'

。gitconfigファイルが変更されます。

10

Sagitarrianの答えに基づいて、より一般的なrev構文の小さな変更を以下に示します。

showtool = "!showci () { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci"

rev-parseを使用して、複雑なrev式を透過的に許可します。

エイリアスが呼び出されて引数が続くため、最後に$1を削除しました。 $1のみを使用すると、気付かれずに通過しますが、$*の動作が壊れます。

これにより、次のような素晴らしいことを行うことができます。

git showtool :/some nasty bug
3
John Gliksberg

Geogrebrockの回答は問題ありませんが、次のように改善できます。

commit=$1
shift
git difftool $commit~1 $commit $@

$ PATHのどこかにある実行可能(chmod + x)ファイルに入れます。

これで、追加の引数を渡すことができます。たとえば、表示するファイルを指定します(他のファイルは無視します)。

$ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/
1
MateuszL

PATHのgit-showcommitファイル(実行可能ファイル)は次のようになります。

#!/bin/bash

git difftool --dir-diff $1^..$1

その後、git showcommit HEADまたはgit showcommit a5b26d5で新しいツールを呼び出すだけです。

0
fiorentinoing