“git diff”를 수행 할 때 어떻게 diff를 얻을 수 있습니까? 나란히 diff를 보거나 “kdiff3″과 같은 대화식

“git diff”를 입력하면 “diff -y”와 같이 나란히 diff를 보거나 “kdiff3″과 같은 대화식 diff 도구에 diff를 표시하고 싶습니다. 어떻게 할 수 있습니까?



답변

Git에는 diff의 내부 구현이 있지만 대신 외부 도구를 설정할 수 있습니다.

외부 diff 도구를 지정하는 방법에는 두 가지가 있습니다.

  1. GIT_EXTERNAL_DIFFGIT_DIFF_OPTS환경 변수 설정 .
  2. 통해 외부 diff 도구 구성 git config

또한보십시오:

를 수행 할 때 git diffGit은 위의 환경 변수 설정과 .gitconfig파일을 모두 확인 합니다.

기본적으로 Git은 다음 7 가지 인수를 diff 프로그램에 전달합니다.

path  old-file  old-hex old-mode  new-file  new-hex new-mode

일반적으로 이전 파일 및 새 파일 매개 변수 만 필요합니다. 물론 대부분의 diff 도구는 두 개의 파일 이름 만 인수로 사용합니다. 즉, Git이 스크립트에 제공하는 인수를 가져 와서 선택한 외부 git 프로그램에 전달하는 작은 래퍼 스크립트를 작성해야합니다.

래퍼 스크립트를 아래에 넣었다고 가정 해 봅시다 ~/scripts/my_diff.sh.

#!/bin/bash
# un-comment one diff tool you'd like to use

# side-by-side diff with custom options:
# /usr/bin/sdiff -w200 -l "$2" "$5"

# using kdiff3 as the side-by-side diff:
# /usr/bin/kdiff3 "$2" "$5"

# using Meld
/usr/bin/meld "$2" "$5"

# using VIM
# /usr/bin/vim -d "$2" "$5"

그런 다음 해당 스크립트를 실행 가능하게 만들어야합니다.

chmod a+x ~/scripts/my_diff.sh

그런 다음 Git에 사용자 정의 diff 래퍼 스크립트를 찾는 방법과 위치를 알려줘야합니다. 이를 수행하는 방법에는 세 가지가 있습니다. (.gitconfig 파일 편집을 선호합니다)

  1. 사용하여 GIT_EXTERNAL_DIFF,GIT_DIFF_OPTS

    예를 들어 .bashrc 또는 .bash_profile 파일에서 다음을 설정할 수 있습니다.

    GIT_EXTERNAL_DIFF=$HOME/scripts/my_diff.sh
    export GIT_EXTERNAL_DIFF
    
  2. 사용 git config

    래퍼 스크립트를 찾을 수있는 위치를 정의하려면 “git config”를 사용하십시오.

    git config --global diff.external ~/scripts/my_diff.sh
    
  3. ~/.gitconfig파일 편집

    ~/.gitconfig파일을 편집하여 다음 줄을 추가 할 수 있습니다 .

    [diff]
      external = ~/scripts/my_diff.sh
    

노트 :

사용자 지정 diff 도구를 설치하는 것과 마찬가지로 사용자 지정 병합 도구를 설치할 수도 있습니다.이 병합 도구는 병합을보다 잘 시각화하기위한 시각적 병합 도구 일 수 있습니다. (progit.org 페이지 참조)

참조 : http://fredpalma.com/518/visual-diff-and-merge-tool/https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration


답변

git difftool을 사용해보십시오

git difftool대신에 사용하십시오 git diff. 당신은 다시 가지 않을 것입니다.

사용 예를 추가하려면 업데이트하십시오.

여기에 대해 이야기가 또 다른 유래에 대한 링크입니다 git difftool: 어떻게 내 기본 설정은 diff 도구 / 뷰어 ‘자식은 diff’출력을 보려면 어떻게해야합니까는?

의 새 버전 gitdifftool명령은 아웃 – 오브 – 박스 많은 외부은 diff 도구를 지원합니다. 예를 들어 vimdiff자동 지원되며 다음을 통해 명령 줄에서 열 수 있습니다.

cd /path/to/git/repo
git difftool --tool=vimdiff

지원되는 다른 외부 diff 도구는 다음 git difftool --tool-help예제 출력을 통해 나열됩니다 .

'git difftool --tool=<tool>' may be set to one of the following:
        araxis
        kompare
        vimdiff
        vimdiff2

The following tools are valid, but not currently available:
        bc3
        codecompare
        deltawalker
        diffuse
        ecmerge
        emerge
        gvimdiff
        gvimdiff2
        kdiff3
        meld
        opendiff
        tkdiff
        xxdiff

답변

시도해 볼 수도 있습니다 git diff --word-diff. 정확히 나란히는 아니지만 어쨌든 더 좋으므로 실제 나란히 필요한 것보다 선호 할 수 있습니다.


답변

ydiff

이전에 호출 된 cdiff이 도구는 나란히 , 증분색상이 다른 diff를 표시 할 수 있습니다 .

을 수행하는 대신 다음을 수행하십시오 git diff.

ydiff -s -w0

ydiff차이가있는 각 파일에 대해 나란히 표시 모드로 시작 됩니다.

다음을 사용하여 설치 :

python3 -m pip install --user ydiff

-또는-

brew install ydiff

의 경우 git log다음을 사용할 수 있습니다.

ydiff -ls -w0

-w0터미널 너비를 자동 감지합니다. 자세한 내용과 데모 는 ydiff GitHub 리포지토리 페이지 를 참조하십시오 .

Git 2.18.0, ydiff 1.1에서 테스트되었습니다.


답변

다음과 같이 나란히 diff사용할 sdiff수 있습니다.

$ git difftool -y -x sdiff  HEAD^ | less

어디에서 다른 HEAD^것으로 바꾸어야하는 예가 있습니까?

나는이 솔루션을 발견 여기에 다른 몇 가지 제안도있는 곳. 그러나이 답변은 OP의 질문을 간결하고 명확하게 대답합니다.

인수에 대한 설명은 man git-difftool 을 참조하십시오 .


게시판에 주석을 달면 git sdiff다음 실행 스크립트를 작성하여 편리한 명령을 만들 수 있습니다 .

#!/bin/sh
git difftool -y -x "sdiff -w $(tput cols)" "${@}" | less

로 저장 /usr/bin/git-sdiff하고 chmod -x그것. 그런 다음이 작업을 수행 할 수 있습니다 :

$ git sdiff HEAD^

답변

export GIT_EXTERNAL_DIFF='meld $2 $5; echo >/dev/null'

그런 다음 간단히 :

git diff

답변

당신은 GitHub의를 포함하지 않고 브라우저에서 나란히 차이점을보고 싶은 경우에, 당신은 즐길 수있는 자식 webdiff을 , 드롭 인 교체 git diff:

$ pip install webdiff
$ git webdiff

이것은 다음과 같은 전통적인 GUI difftools에 비해 많은 장점을 제공합니다 tkdiff 구문 강조를 제공하고 이미지 차이를 표시 할 수 있다는 점에서 제공합니다.

자세한 내용은 여기를 참조 하십시오 .