programing

어떻게 하면 Git-diff처럼 일을 어렵게 할 수 있을까요?

css3 2023. 6. 29. 20:21

어떻게 하면 Git-diff처럼 일을 어렵게 할 수 있을까요?

의 출력 포맷이 마음에 듭니다.git diff색깔과.+/-행간의 변화를 표현하는 것은 GNU diff보다 읽기 쉽습니다.

달릴 수 있습니다git diff사용.--no-index깃레포 밖에 플래그가 있고 잘 작동합니다.그러나, 그것은 누락된 것으로 보입니다.--exclude재귀에서 파일 또는 하위 디렉터리를 제외하는 옵션diff.

두 세계를 모두 활용할 수 있는 방법이 있습니까?(색상 옵션 및+/-의 형식.git diff그리고.--excludeGNU diff 옵션).

실험을 해봤지만 여전히 출력 형식을 선호합니다.git diff

이렇게 하면 됩니다.+/-보다는<그리고.>.

diff -u file1 file2

GNU가 3.4를 난사하기 때문에 그 깃발은--color추가되었습니다.두 가지를 결합하면 다음과 같습니다.

diff --color -u file1 file2

깃발--color또한 인수를 사용합니다. 유효한 옵션은never,always또는auto수행해야 할 작업에 대해 보다 명확하게 설명하려는 경우 유용합니다.

사용할 수도 있습니다.git diff --no-index -- A B(manpage를 통해).

  1. 색상 차이를 설치합니다.

  2. ~/.colordiffrc 업데이트(필요한 경우 먼저 /etc/colordiffrc 복사):

    # be more git-like:
    plain=off
    newtext=darkgreen
    oldtext=darkred
    diffstuff=darkcyan
    
  3. 사용하다colordiff -u file1 file2두 개의 파일 또는colordiff -ruN path1 path2경로를 재귀적으로 비교합니다.

정확히 같지는 않지만, 아주 가깝습니다.

이것이 제가 제안하는 것이고 꽤 가깝습니다.

diff -u FILE1 FILE2 | colordiff | less -R
  • colordiff설치해야 합니다.
  • -R이것은 Less에게 원시 코드 대신 색상을 표시하도록 지시합니다.

궁극적으로 사용한-w빈 공간의 차이를 보고 싶지 않았기 때문입니다.

diff -w -u FILE1 FILE2 | colordiff | less -R

편집: @Ciprian Tomoiaga가 댓글에서 제안한 것처럼, 이것을 함수로 만들어 당신의 안에 넣을 수 있습니다.~/.bashrc파일도 있습니다.

function gdiff () { diff -u $@ | colordiff | less -R; }

GNUdiff을 가지고 있습니다.--color옵션은 2016년 말 버전 3.4 이후로 유닉스 SE에 대한 이 답변에 따라 제공됩니다.옆에-u의 출력을 모방하기에 충분해야 합니다.git diff:

diff -u --color=always file1 file2 | less -r

--color야 한다.always파이프에 사용될 때,auto파이프의 색이 꺼집니다.

Windows에서 Git Bash와 함께 사용해 본 적이 있습니다.less -R허크의 첫 번째 선에만 색을 칠할 것입니다. less -r그 경우에 저를 위해 그것을 고쳐주었습니다.

사용만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
}

이 기능은 다음과 같이 작동합니다.

  1. 으로, 으로적궁극diff파일 내의 변경 내용을 표시하는 방법을 지정하기 위해 다양한 형식 지정 옵션과 함께 호출됩니다.
  2. tputANSI 색상 코드를 해당 서식 옵션에 삽입하는 데 사용됩니다.단자를 사용하는 ANSI 단자를 해야 할 .tput setaf와 함께tput setf.
  3. 의 출력.diff에 파이프로 연결된less.-RANSI 색상을 보존할 수 있습니다. -X 예방합니다.less종료 시 화면을 지울 수 있습니다. -F 예방합니다.less하나의 화면에 출력이 들어갈 경우 호출기로 작동합니다.
  4. 첫 번째 매개 변수가 다음과 같은 경우@full함수는 추가 및 제거된 선 외에 변경되지 않은 모든 선을 표시합니다.

이 접근 방식과 다음의 차이점에 주목하십시오.git diff:

  1. git diff에서는 각 변경 사항을 둘러싼 세 줄의 컨텍스트를 보고합니다. 불하게도행,,diff컨텍스트 줄 수를 지정하는 동시에 포맷 옵션을 지정하려면 불만을 제기하고 종료하는 것 같습니다(최소한 Mac OS X Yosemite에서는 종료됩니다).합니다.diff따라서 사항을 파일 변경되지 않은 할 수 .@full첫 번째 매개 변수로 사용합니다.
  2. 문맥의 선이 다르기 때문입니다.git diff이 함수에 의해 보고된 라인 번호는 또한 보고된 라인 번호와 다를 것입니다.git diff.
  3. 보고된 한 줄 변경사항이 있을 수 있습니다. 이는 올바른 동작이지만 변경된 파일에 빈 한 줄 삽입이 포함되어 있으면 짜증이 납니다.생각합니다git diff맥락을 통해 이 문제를 더 잘 처리합니다.다른 옵션을 에 전달할 수 있습니다.diff더 나은 공간을 처리할 수 있습니다.

이것을 당신의 rc 파일에 넣으십시오, 가장 일반적으로, 그것은 다음 중 하나일 것입니다..bashrc또는.zshrc:

diff() { git diff --no-index "$1" "$2" | colordiff; }

사항: 요사항:git그리고.colordiff설치했어야 합니다.

: 사법용 :diff file1 file2

다음을 찾고 있습니다.

sudo apt-get install colordiff

박쥐는 발색력이 좋기 때문에, 저는 그것이 잘 작동하는지 시험해 보았습니다.diff그리고 놀랍게도 그것은 개봉 즉시 정말 잘 작동했습니다.

$ diff file1 file2 | bat또는$ diff -u file1 file2 | bat

따라서 보다 효율적인 기능을 위해 아래와 같은 기능을 만들 수 있다고 생각합니다.

function bdiff () { diff -u $@ | bat;}

당신이 으면이 .colordiff또는git diff당신은 색을 얻을 수 있습니다.vim.

cdiff() { diff -u $@ | vim -R -; }

아니면 간단히

cdiff() { diff -u $@ | view -; }

9에서 diff -u --color=always file1 file2

다른 옵션은 저장소 외부에서 수행하여 파일 간에 차이를 알 수 있도록 하는 것입니다.예: 다음과 같은 셸 함수:

gdiff() {
    (
        dir=`pwd`
        cd ./$(git rev-parse --show-cdup)/..
        git diff  $dir/$1 $dir/$2
    )
}

색상 차이 사용:

설치:

sudo apt-get install colordiff

용도:

colordiff -u file_one file_two

표시된 것과 정확히 동일한 차이를 제공합니다.git diff.

더하다

alias diff="git diff --no-index --"

~/.zshrc 또는 ~/.zhrc

이것은 gitdiff를 사용하여 두 파일 간의 일반적인 diff를 수행합니다.

구성 설정:

[color]
     ui = true

"의 "diff"와--relative=<path>당신이 원하는 것을 선택할 수 있습니다.시도해 보셨습니까?

언급URL : https://stackoverflow.com/questions/4857310/how-to-get-diff-working-like-git-diff