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별칭 diffdt별칭 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, 교체 mergediff, 트릭을 할 것입니다 위의 답변에서 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.