vimdiff로 모든`git diffs '보기


209

가이드로 " Vimdiff와 함께 Git Diffgit diff "를 사용하여 vimdiff로 래핑하도록 설정 했으며 , 변경 사항이 많은 파일이 없으면 예상대로 작동합니다.

변경 사항이있는 여러 파일이 있고 내가 실행 git diff하면 첫 번째 파일이 열리고 vimdiff의 첫 번째 인스턴스를 종료 한 후 다음 메시지가 표시됩니다.

external diff died, stopping at filename

이것은 내가 익숙한 것과 완전히 다른 행동입니다. SVN을 사용하여 과거에 비슷한 설정을했고 여러 파일을 비교할 때 첫 번째 파일을 검토 :wq한 다음 사용 하고 쓰고 종료 하고 차이가있는 다음 파일을 열었습니다.

Git의 경우에는 그렇지 않습니다. 나는 시도 :n[ext]했지만 그렇게하면 수정 된 버전과 비교할 수 있도록 왼쪽 창을 원본 파일로 채우지 않습니다.

답변:


337
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

입력 git d하면 예상되는 동작이 :wq되며 vim을 입력 하면 변경 세트의 다음 파일로 순환합니다.


22
그냥 내 두 센트 : 나는 한 df별칭 diff과 dt별칭 difftool. 또한 :qaVim을 입력 하면 아무 것도 저장하지 않고 다음 변경 세트로 순환합니다.
— JC Yamokoski

2
이 솔루션은 변경 사항을 저장할 때 ": w!"를 입력해야한다는 점을 제외하고는 훌륭합니다. 대신 : w
— Asenar

2
@jonyamo 별칭 설정은 항상 몇 가지 명령을 사용하는 빈도를 기준으로해야합니다. git diff보다 자주 사용 하고 git difftool있습니다. 그래서 나는 d'diff'와 'dt' to difftool '의 별칭 을 가졌습니다. 패턴을 사용하여 별칭을 만드는 것보다 유용성이 중요합니다.
— Habeeb Perwad

"git diff"가 vimdiff를 사용하게하는 방법,이 답변은 별명을 사용하게합니다. "diff"의 별칭이 작동하지 않습니다.
— Rombus

6
@Asenar "이 솔루션은 변경 사항을 저장할 때 " :w!대신 입력해야한다는 점을 제외하고는 훌륭 :w합니다. git vimdiff이 -R옵션으로 호출하기 때문 입니다. 로 재정의 할 수 있습니다 git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'. 쓰기 가능한 모드에서 vimdiff가 열립니다.
— wisbucky

103

시도해 볼 수 있습니다 git difftool.이 작업을 수행하도록 설계되었습니다.

먼저, diff 도구를 vimdiff로 구성해야합니다.

git config diff.tool vimdiff

그런 다음 diff를 원할 경우 git difftool대신을 사용하십시오 git diff. 예상대로 작동합니다.


1
거의 다 왔어! 내가 찾은 것과 정확히 일치합니다. 그래도 +1!
— chuckg

1
vimdiff mergetool이 최근에 업데이트되었습니다 : git.kernel.org/?p=git/… (그리고 다른 커밋도 있지만 가장 큰 것입니다). 다음 유지 보수 릴리스가 언제인지 확실하지 않지만 git.git에서 빌드하려는 경우 업그레이드가 귀하의 것입니다!
— Cascabel

21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge

3
difftool이 아니라 mergetool에 응답합니다. 그러나 여전히 유용한 답변입니다. +1.
— dotancohen

@dotancohen 정말 고마워. 어리석은 실수로 지금 내 대답을 편집 할 수 있다는 것을 알지 못했습니다.
— Nanhe Kumar

1
@NanheKumar는 @dotancohen, 교체 merge로 diff, 트릭을 할 것입니다 위의 답변에서 즉 git config --global diff.tool vimdiff .
— 윌

2

git에없는 다른 diff 도구를 사용하려는 사람들은로 말하십시오 nvim. 여기에 내가 사용한 것이 있습니다 :

git config --global alias.d difftool -x <tool name>

내 경우에는 내가 설정 <tool name>을 nvim -d하고 diff 명령이있는 Invoke

git d <file>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.