(git)diffを生成する方法文脈の特徴?

(git)diffを生成する方法文脈の特徴?

これ--unified=<n>オプションを使用すると、行数を設定できます。文字にも同じことをする方法はありますか?

はい

使用時にコンテキストを変更するには、X文字を制限してください。git diff --color-words=. file.ext

考慮すべき特別な状況

前および/または次の変更の文脈で変更が行われます。

はい

1つの長い行を含む縮小ファイルの比較

長い話を短く

私は変更とその文脈を除いて、その行のすべてを切り取りたいと思います。

ベストアンサー1

このスクリプトは、少なくとも予想される長いエスケープシーケンス(着色用)を使用して操作を実行します。たとえばと呼んでくださいgit-diff-word-context -U 5。文字数を設定することを許可git diffし、インターセプトは-U(それぞれ)すべてのパラメータを受け入れます。タスクを完了する--unified=ために使用されます。grep

#!/usr/bin/env bash

ESCAPE=$'\e'
START_DIFF="$ESCAPE\\[3[12]m"
END_DIFF="$ESCAPE\\[m"
NOESCAPE="[^$ESCAPE]"

CONTEXT="20"
STDIN=false
ARGS=()
while [ "${1::1}" = "-" ]; do
    case "$1" in
        "-U"|"--unified")
            CONTEXT="$2"
            shift
            ;;
        "-U"*)
            CONTEXT="${1#-U}"
            ;;
        "--unified="*)
            CONTEXT="${1#--unified=}"
            ;;
        "--stdin")
            STDIN=true
            ;;
        "--")
            break
            ;;
        *)
            ARGS+=("$1")
            ;;
    esac
    shift
done

set -o pipefail

ok() {
    "$@"
    true
}

if $STDIN; then
    cat
else
    git diff --color-words='[^\n]' "${ARGS[@]}" "$@"
fi |
ok grep -oP "$NOESCAPE{0,$CONTEXT}(($START_DIFF[^$ESCAPE]+$END_DIFF)+$NOESCAPE{0,$CONTEXT})+"

これを呼び出す最も簡単な方法は、例えばgit config alias.diffwc '!path/to/git-diff-word-context'

--stdinたとえば、optionsを介して呼び出してフィルタとして使用することもできますgit show --color-words | git-diff-word-context --stdin -U5

外部diffドライバとして設定するには、追加の手順を実行する必要があります(GIT_EXTERNAL_DIFF内部参照man git)。 IMHO、git diffこの場合、任意のパラメータを渡すことは特に困難です。

はい

出力例

おすすめ記事