이것--unified=<n>
옵션을 사용하면 줄 수를 설정할 수 있습니다. 문자에도 동일한 작업을 수행할 수 있는 방법이 있습니까?
예
사용할 때 컨텍스트를 변경하려면 X 문자를 제한하세요.git diff --color-words=. file.ext
고려해야 할 특별한 상황
이전 및/또는 다음 변경 사항의 맥락에서 변경이 이루어집니다.
예
하나의 긴 줄이 포함된 축소된 파일 비교
긴 이야기 짧게
나는 변화와 그 맥락을 제외하고 그 줄의 모든 것을 잘라내고 싶습니다.
답변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
이 경우에는 임의의 매개변수를 전달하는 것이 특히 어렵습니다.