만을 사용하여 bash
, diff
, tput
, 그리고 less
, 우리가 밀접의 출력에 근접 할 수 있습니다 git diff
. 그러나 근시로 인해 눈에 띄는 차이점이 있습니다.diff
프로그래머의 .
사용자 계정이 자동으로 제공하는 일부 파일에 다음 Bash 함수 정의를 넣으면 명령 줄에서 함수에 액세스 할 수 있습니다.
function gdiff()
{
local REG=`tput op`
local GRP=`tput setaf 6`
local ADD=`tput setaf 2`
local REM=`tput setaf 1`
local NL=$'\n'
local GRP_LABEL="${GRP}@@ %df,%dn +%dF,%dN @@${REG}"
local UNCH_GRP_FMT=''
[[ "${1}" == '@full' ]] && {
UNCH_GRP_FMT="${GRP_LABEL}${NL}%="
shift
}
diff \
--new-line-format="${ADD}+%L${REG}" \
--old-line-format="${REM}-%L${REG}" \
--unchanged-line-format=" %L${REG}" \
--new-group-format="${GRP_LABEL}${NL}%>" \
--old-group-format="${GRP_LABEL}${NL}%<" \
--changed-group-format="${GRP_LABEL}${NL}%<%>" \
--unchanged-group-format="${UNCH_GRP_FMT}" \
"${@}" | less -FXR
}
이 기능은 다음과 같이 작동합니다.
- 궁극적으로
diff
으로 다양한 서식 옵션을 사용하여 파일 내 변경 내용이 표시되는 방법을 지정합니다.
tput
이러한 형식화 옵션에 ANSI 색상 코드를 삽입하는 데 사용됩니다. ANSI 이외의 터미널을 사용하는 경우 다음 tput setaf
과 같이 교체해야 할 수도 있습니다.tput setf
.
- 의 출력은
diff
로 파이프됩니다 less
. -R
ANSI 색상을 유지합니다. 종료시 화면을 지우는 -X
것을 방지합니다 less
. -F
방지less
출력이 한 화면에 맞으면 호출기로 작동 .
- 첫 번째 매개 변수가
@full
인 경우이 함수는 추가 및 제거 된 행 외에 변경되지 않은 모든 행을 표시합니다.
이 방법과 다음의 차이점을 참고하십시오 git diff
.
git diff
각 변경 사항을 둘러싼 세 줄의 컨텍스트를보고합니다. 불행히도, diff
컨텍스트 라인 수를 지정하고 동시에 서식 옵션을 지정하려는 경우 불평하고 종료하는 것처럼 보입니다. (적어도 Mac OS X Yosemite에서는 그렇습니다). diff
프로그래머 감사 합니다. 따라서 각 변경을 둘러싼 컨텍스트 행 (기본 동작)을 요청하지 않거나 파일 내에서 변경되지 않은 모든 행도보고하도록 요청할 수 있습니다.@full
첫 번째 매개 변수로 .
- 상황에
git diff
맞는 행이와 다르므로이 함수에 의해보고되는 행 번호는git diff
.
- 단일 행 변경 사항이보고 될 수 있습니다. 이는 올바른 동작이지만 변경된 파일에 빈 줄이 하나라도 포함되어 있으면 성가신 일입니다. 나는
git diff
문맥을 통해 이것을 더 잘 처리 한다고 생각 합니다. 원하는 diff
경우 공백을 더 잘 처리 하기 위해 다른 옵션을 전달할 수 있습니다 .
newtext
의를/etc/colordiff
. git이 녹색을 사용한다고 생각합니까?