sourcetip

"git diff"를 할 때 어떻게 나란히 diff를 얻을 수 있습니까?

fileupload 2023. 7. 7. 21:01
반응형

"git diff"를 할 때 어떻게 나란히 diff를 얻을 수 있습니까?

가 때할력을 치면.git diff저는 옆으로 다른 것을 보고 싶어요, 예를 들면.diff -y 대화형 하는 것을 .kdiff3해야 합니까?이것이 어떻게 행해지는가?

Git diff 툴을 사용해 보세요.

사용하다git difftoolgit diff당신은 절대 돌아가지 않을 겁니다.

UPDATE를 사용하여 예제를 추가합니다.

다음은 다음과 같은 다른 스택 오버플로에 대한 링크입니다.git difftool원하는 diff 도구/뷰어를 사용하여 'gitdiff' 출력을 보려면 어떻게 해야 합니까?

의 신버의우의 경우git,difftool명령은 많은 외부 diff 도구를 즉시 지원합니다.를 들어 를들면입니다.vimdiff명령을 하여 열 수 있습니다.

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

는 지원는외부같구습다니를 통해 됩니다.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가 구현되어 있지만, 대신 외부 도구를 설정할 수 있습니다.

외부 디프 도구를 지정하는 두 가지 방법은 다음과 같습니다.

  1. GIT_EXTERNAL_DIFF 리고그고.GIT_DIFF_OPTS환경 변수
  2. "diff"를 통해 git config

ymattw도 꽤 의대은또꽤다니깔다합용, 니합사끔한답다▁'▁usings니▁neat▁is▁also▁answer사▁pretty,용합,다.ydiff

참고 항목:

를 할때.git diff는 위 과 Git의 환경변수 설정을 합니다..gitconfigjava.

기본적으로 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

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

  1. 용사를 합니다.GIT_EXTERNAL_DIFF,GIT_DIFF_OPTS

    예를 들어 .vmsrc 또는 .vms_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 diff --word-diff정확히 나란히 있는 것은 아니지만, 어떻게든 더 낫기 때문에 실제 필요한 것보다 더 선호할 수 있습니다.

ydiff

에는 이에호출됨라고 불렸습니다.cdiff이 도구는 나란히, 증분색상 차이를 표시할 수 있습니다.

에를 하는 에.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의 질문입니다.

인수에 대한 설명은 매니지트-디프 도구를 참조하십시오.


게시판에 있는 댓글을 사용하여 편리한 기능을 만들 수 있습니다.git sdiff다음 실행 파일 스크립트를 작성하여 명령합니다.

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

으로 합니다./usr/bin/git-sdiff그리고.chmod +x그러면 다음과 같은 작업을 수행할 수 있습니다.

$ git sdiff HEAD^

추가 팁

의에제안대사수있다니습할용로된견다있니▁as▁use습수▁can▁you▁in▁suggested▁comments의사견을 사용할 수 있습니다.icdiff무엇을 하기 위하여sdiff색상이 지정된 출력으로 수행합니다.

$ more /usr/bin/git-sdiff
#!/bin/sh
git difftool -y -x "icdiff --cols $(tput cols)" "${@}" | less --raw-control-chars

unix만 하면 unix가 됩니다.git 내장된 리고내된장.diff:

git show HEAD:path/to/file | diff -y - path/to/file

reference로 할 수 , 여러분은 를론 HEAD 로참조 GIT 대있며으수할음, 같것추수있다습니가할을은, 다과물다체른있▁▁like다▁want와 같은 것을 추가하고 입니다.-W 170 명령어diff 파일로 합니다.

이것은 사용자가 디렉토리 내용을 과거의 커밋과 비교하는 것으로 가정합니다.두 커밋을 비교하는 것은 더 복잡합니다.만약 당신의 껍데기가bash" 대체 " 대체"를 사용할 수 있습니다.

diff -y -W 170 <(git show REF1:path/to/file) <(git show REF2:path/to/file)

REF1그리고.REF2태그, 분기 또는 해시와 같은 git 참조입니다.

저는 최근에 바로 이러한 기능을 수행하는 툴을 구현했습니다. https://github.com/banga/git-split-diffs

사용 방법은 다음과 같습니다.

npm install -g git-split-diffs

git config --global core.pager "git-split-diffs --color | less -RFX"

터미널에서 기본 테마를 사용하면 다음과 같이 표시됩니다.

Preview of side by side diffs

보다시피, 줄 안에서 변경된 단어를 구문 강조 및 강조 표시하는 기능도 지원합니다.

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

그러면 간단하게:

git diff

GitHub을 포함하지 않고 브라우저에서 나란히 차이를 보고 싶다면, 당신은 Gitwebdiff를 즐길 수 있습니다.git diff:

$ pip install webdiff
$ git webdiff

는 이는다과같은기존 GUI diff에해와 같은 기존 GUI 많은 합니다.tkdiff구문 강조 표시 및 이미지 차이 표시를 제공할 수 있다는 점에서

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

는 컬러디프를 사용합니다.

Mac OS X에서 다음과 같이 설치합니다.

$ sudo port install colordiff

에는 리눅스가 수 .apt get install colordiff배급사에 따라 다르거나 그런 것들이 있습니다.

그러면:

$ git difftool --extcmd="colordiff -ydw" HEAD^ HEAD

또는 별칭을 만듭니다.

$ git alias diffy "difftool --extcmd=\"colordiff -ydw\""

그러면 사용할 수 있습니다.

$ git diffy HEAD^ HEAD

라고 이유는 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠdiff -yunix.입니다.컬러디프는 또한 색상을 추가하는데, 그것은 더 좋습니다.-ydw,y 하기 위한 것입니다.w을 무시하는 공을무것이고는그고리, 백시하고▁whites입니다.d최소 디프를 생성하는 것입니다(보통 디프로 더 나은 결과를 얻을 수 있습니다).

저는 개인적으로 아이스디프를 정말 좋아합니다!

사용 중인 경우Mac OS X와 함께HomeBrew 해요.brew install icdiff.

멋진을 정확하게 위해, 는 제 파일레과기멋타기정얻위기해게확다,.~/.gitconfig:

[pager]
    difftool = true
[diff]
    tool = icdiff
[difftool "icdiff"]
    cmd = icdiff --head=5000 --highlight --line-numbers -L \"$BASE\" -L \"$REMOTE\" \"$LOCAL\" \"$REMOTE\"

다음과 같이 사용합니다.git difftool

이 질문은 차이를 찾기 위해 내장된 깃을 사용하는 빠른 방법을 찾고 있을 때 나타났습니다.내 솔루션 기준:

  • 빠른 시작, 내장 옵션 필요
  • 다양한 형식, xml 및 다양한 프로그래밍 언어를 쉽게 처리할 수 있습니다.
  • 빅 텍스트 파일에서 작은 코드 변경 사항을 신속하게 식별

저는 색칠을 하기 위해 이 을 찾았습니다.

라인 디프 대신 나란히 디프를 얻기 위해 다음 매개 변수를 사용하여 이 질문에 대한 mb14의 우수한 답변을 수정했습니다.

$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]"

{+] 에 들지 [- {+] 옵션을 합니다.--word-diff=color사용할 수 있습니다.

$ git diff --word-diff-regex="[A-Za-z0-9. ]|[^[:space:]]" --word-diff=color

그것은 json과 xml 텍스트 및 java 코드를 적절히 비교하는 데 도움이 되었습니다.

요약하면,--word-diff-regex옵션은 작은 라인 변경으로 큰 파일을 탐색할 때 표준 라인 diff와 비교하여 색상별 소스 코드 환경을 얻을 수 있도록 색상 설정과 함께 유용한 가시성을 제공합니다.

여기 접근법이 있습니다.파이프를 적게 통과하면 xterm 너비가 80으로 설정되어 그다지 뜨겁지 않습니다.그러나 COLS=210과 같이 명령을 진행하면 확장된 xterm을 사용할 수 있습니다.

gitdiff()
{
    local width=${COLS:-$(tput cols)}
    GIT_EXTERNAL_DIFF="diff -yW$width \$2 \$5; echo >/dev/null" git diff "$@"
}

Intellij IDEA를 열고 "Version Control" 도구 창에서 하나 또는 여러 커밋을 선택하고 변경된 파일을 찾은 다음 두 번 클릭하여 각 파일에 대한 변경 사항을 나란히 검사합니다.

로 제공되는 수 .idea some/path

version control view diff view

몇몇 다른 사람들은 이미 cdiff를 나란히 디핑에 대해 언급했지만 아무도 그것을 완전히 구현하지 못했습니다.

설정 cdiff:

git clone https://github.com/ymattw/cdiff.git
cd cdiff
ln -s `pwd`/cdiff ~/bin/cdiff
hash -r # refresh your PATH executable in bash (or 'rehash' if you use tcsh)
        # or just create a new terminal

다음 행을 삽입하여 ~/.gitconfig를 편집합니다.

[pager]
        diff = false
        show = false

[diff]
        tool = cdiff
        external = "cdiff -s $2 $5 #"

[difftool "cdiff"]
        cmd = cdiff -s \"$LOCAL\" \"$REMOTE\"

[alias]
        showw = show --ext-dif

cdiff가 Diff와 함께 작동하려면 호출기 꺼짐이 필요합니다. 어쨌든 기본적으로 호출기이므로 괜찮습니다.이러한 설정에 관계없이 Diff 도구가 작동합니다.

gitshow는 인수를 통한 외부 diff 도구만 지원하므로 show alias가 필요합니다.

diff external 명령어 끝에 있는 '#'은 중요합니다.Git의 diff 명령어는 diff 명령어에 $@(사용 가능한 모든 diff 변수)를 추가하지만, 우리는 두 개의 파일 이름만 원합니다.그래서 우리는 $2와 $5로 명시적으로 그 둘을 부르고, 그렇지 않으면 sdiff를 혼동할 수 있는 코멘트 뒤에 $@를 숨깁니다.다음과 같은 오류가 발생합니다.

fatal: <FILENAME>: no such path in the working tree
Use 'git <command> -- <path>...' to specify paths that do not exist locally.

이제 나란히 디핑을 생성하는 Git 명령:

git diff <SHA1> <SHA2> 
git difftool <SHA1> <SHA2>
git showw <SHA>

Cdiff 사용:

'SPACEBAR' - Advances the page of the current file.
'Q'        - Quits current file, thus advancing you to the next file.

이제 Git diff와 diff 도구를 나란히 사용할 수 있습니다.그리고 필요할 경우 파워 유저 사용자 맞춤을 위한 cdiff python 소스 코드가 있습니다.

이것은 다소 제한적인 해결책일 수 있지만, 시스템의 기능을 사용하여 작업을 수행합니다.diff외부 도구를 사용하지 않는 명령:

diff -y  <(git show from-rev:the/file/path) <(git show to-rev:the/file/path)
  • 사하는라필터링만을 사용합니다.--suppress-common-lines(만약 당신이diff옵션을 지원합니다.
  • 이 경우에는 색상이 없습니다. 그냥 보통입니다.diff
  • 너비를 할 수 있습니다.--width=term-width를 Bash 서을 을수있습다니로 가져올 수.$COLUMNS또는tput cols.

이것은 다음과 같은 사용법과 같이 더 편리하게 하기 위해 도우미 git-script로 포장될 수도 있습니다.

git diffy the/file/path --from rev1 --to rev2

사용합니다.

파일(일반적으로 gitconfig 파일)에서~/.gitconfig또는~/.config/git/config),

추가:

[core]
  pager = delta --light --side-by-side 

이 스레드에는 좋은 답변이 많이 있습니다.이 문제에 대한 저의 해결책은 대본을 작성하는 것이었습니다.

이 'git-scriptname'에 이름을 붙입니다(그리고 다른 스크립트처럼 실행 가능하게 하고 PATH에 넣습니다). 그러면 일반 git 명령처럼 실행할 수 있습니다.

$ git scriptname

실제 기능은 마지막 줄에 불과합니다.출처는 다음과 같습니다.

#!/usr/bin/env zsh
#
#   Show a side-by-side diff of a particular file how it currently exists between:
#       * the file system
#       * in HEAD (latest committed changes)

function usage() {
    cat <<-HERE
    USAGE

    $(basename $1) <file>

    Show a side-by-side diff of a particular file between the current versions:

        * on the file system (latest edited changes)
        * in HEAD (latest committed changes)

HERE
}

if [[ $# = 0 ]]; then
    usage $0
    exit
fi

file=$1
diff -y =(git show HEAD:$file) $file | pygmentize -g | less -R

두 가지 솔루션이 있습니다.

솔루션 1: 멜드:

에서 나는 meld를 사용했습니다.) sudo apt install meld 아래와 그런 다음 아래와 같이 구성합니다.

git config --global diff.tool meld
git config --global difftool.meld.path "$(which meld)"
git config --global difftool.prompt false

git config --global merge.tool meld
git config --global mergetool.meld.path "$(which meld)"

솔루션 2: 델타:

CLI를 사용하기로 결정한 경우 델타를 설치합니다.사용하는 구성은 다음과 같습니다.

git config --global core.pager 'delta'
git config --global interactive.diffFilter 'delta --color-only'
git config --global delta.side-by-side true
git config --global delta.line-numbers true
git config --global delta.syntax-theme 'Solarized (dark)'

용액 3: 용해:

멜트를 사용할 수도 있습니다.구문 강조는 배트로 수행됩니다.이것도 cli 도구입니다.

언급URL : https://stackoverflow.com/questions/7669963/how-can-i-get-a-side-by-side-diff-when-i-do-git-diff

반응형