오픈 소스 프로젝트 Trac 은 훌륭한 diff 하이 라이터 를 가지고 있습니다. 변경된 각 라인에서 변경된 라인 과 변경된 바이트를 강조 합니다! 여기 또는 여기 를 참조 하십시오 .
bash 터미널 에서 또는 diff 출력 (패치 파일)에 동일한 색상 강조 표시 (예 : 변경된 행 및 변경된 바이트도 ) 를 사용하는 방법이 있습니까?git
vim
답변:
diff-highlight
펄있는 contrib 스크립트는 이 가능성 Trac에 그것을 사용하고 있다는 Trac의 스크린 샷과 유사하므로 출력을 생성합니다 :
다음으로 설치 :
wget https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight && chmod +x diff-highlight
파일 diff-highlight
을 ~/bin/
디렉토리 (또는 어디에 있든) 로 이동 한 $PATH
후 다음을 추가하십시오 ~/.gitconfig
.
[pager]
diff = diff-highlight | less
log = diff-highlight | less
show = diff-highlight | less
@cirosantilli가 제안한 단일 복사 붙여 넣기 설치 :
cd ~/bin
curl -O https://raw.githubusercontent.com/git/git/fd99e2bda0ca6a361ef03c04d6d7fdc7a9c40b78/contrib/diff-highlight/diff-highlight
chmod +x diff-highlight
git config --global pager.log 'diff-highlight | less'
git config --global pager.show 'diff-highlight | less'
git config --global pager.diff 'diff-highlight | less'
git config --global interactive.diffFilter diff-highlight
git add -p
. 또한 추가하십시오 :git config --global interactive.diffFilter diff-highlight
git diff
또는 git log
다른 것을 사용하는 동안 옵션을 사용하십시오 --word-diff=color
(단어 차이 BTW에 대한 다른 모드도 있음)
--word-diff=color
더 나은 (특히와 정말 git config color.diff.old "red reverse"
하고 git config color.diff.new "green reverse"
)하지만, 내가 :( 원하는 것이 아니다
git add --patch
. stackoverflow.com/questions/10873882/…
diff-highlight
단어 차이와 선 차이 모두에서 잘 작동한다는 것입니다.
diff-so-fancy
A는 diff
인간의 시선을 위해 설계 -highlighter.
잘라 내기 / 붙여 넣기에 짜증나 는 선행 +
/ -
를 제거하고 파일 사이에 명확한 섹션을 만듭니다.
컬러 git
(왼쪽) 대 diff-so-fancy
(오른쪽-캐릭터 레벨 하이라이트에 유의) :
당신이 원하는 경우 diff-so-fancy
(오른쪽) 출력을하지만에있는 파일에 제한되지 git
저장소, 당신에 다음 함수를 추가 .bashrc
모든 파일에 그것을 사용하기 :
dsf() { git diff --no-index --color "$@" | diff-so-fancy; }
예 :
dsf original changed-file
문자 수준 강조 및 표준 diff
형식
당신의 비 표준 포맷 마음에 들지 않으면 diff-so-fancy
여전히 있지만, 캐릭터 레벨을 원하는 git
사용 강조 diff-highlight
소요됩니다 git
의 출력과 정말 꽤 표준 생산 diff
-format 출력 :
에서 기본적으로 사용하려면 다음을 git
추가하십시오 .gitconfig
.
[color "diff-highlight"]
oldNormal = red bold
oldHighlight = red bold 52
newNormal = green bold
newHighlight = green bold 22
[pager]
diff = diff-highlight | less -FRXsu --tabs=4
이 [pager]
섹션은 git
이미 채색 된 출력을 diff-highlight
문자 수준에서 채색 한 다음 기본을 사용하는 대신 (필요한 경우) 더 적은 페이지로 출력하도록 지시 합니다 less
.
gitconfig
옵션 에 대해 조금 설명해 주 시겠습니까?
dsf()
.
원하는 동작은 이제 git 자체에서 사용할 수 있습니다 (naught101의 주석에서 지적했듯이). 이를 활성화하려면 호출기를 다음으로 설정해야합니다.
perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
/usr/share/doc/git/contrib/diff-highlight/diff-highlight
Ubuntu 13.10에서 형광펜 스크립트의 위치는 어디에 있습니까 (왜 doc
폴더 에 있는지 모르겠습니다 ). 시스템에 없으면를 사용 locate diff-highlight
하여 찾으십시오. 강조 표시 스크립트는 실행 가능하지 않으므로 (적어도 내 컴퓨터에서) perl
.
다양한 diff와 유사한 명령에 항상 형광펜을 사용하려면 ~/.gitconfig
파일에 다음을 추가 하십시오.
[pager]
log = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
show = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
diff = perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less
나는 이것을 새로운 대답으로 추가했습니다 .naught101의 코멘트가 묻혀 있고 설정이 그렇게 사소하지 않고 적어도 우분투 버전에서는 README 의 지침이 작동하지 않기 때문입니다.
git add -p
(대화 형 모드) 내에서 diff에 대한 강조 표시를 활성화하지 않는다는 것을 알았습니다 . 그래도 어떻게 고칠 수 있는지 모르겠지만 단순히 목록에 추가를 추가하면 중단됩니다.
git config interactive.diffFilter diff-highlight
diff-highlight
내 길에 있지 않았기 때문에 먼저 찾아야했습니다. 아래 내 대답의 세부 사항.
바이트 기반 diff를위한 유틸리티는 v1.7.8 1 이후 공식 Git과 함께 배포되었습니다 . 컴퓨터에서 설치된 위치를 찾아 활성화하면됩니다.
/usr/local/opt/git
cd / && pwd -W
하여 설치 디렉토리를 찾습니다.ll $(which git)
또는 locate git
도움이 될 것입니다.diff-highlight
PATH에서 찾을 수 있도록 bin 디렉토리에 링크 하십시오.GIT_HOME='/usr/local/opt/git/' # Use the value from the first step.
ln -s "${GIT_HOME}/share/git-core/contrib/diff-highlight/diff-highlight" \
'/usr/local/bin/diff-highlight'
git config --global interactive.diffFilter diff-highlight # Use on interactive prompts
git config --global pager.diff "diff-highlight | less" # Use on git diff
git config --global pager.log "diff-highlight | less" # Use on git log
git config --global pager.show "diff-highlight | less" # Use on git show
which git
처음부터 PATH에 있어야하므로 그렇지 않으면 작동하지 않습니다. :-)
diff-highlight
실제로 설치 하지는 않으므로 심볼릭 링크 단계가 실제로 필요합니다 (최소한 macOS에서는). 플랫폼에 필요하지 않다고 생각되면 다시 자유롭게 답변을 업데이트하십시오. 한편 which git
Git 이git
경로 어딘가에 바이너리를 설치 하기 때문에 일반적으로 작동 합니다.
.perl
.. 컴파일은 간단합니다. 디렉토리 sudo make
에서 실행 하면 diff-highlight
됩니다.
나는 --color-words
옵션을 사용 하고 그것은 나를 위해 잘 작동합니다.
$ git diff --color-words | less -RS
같은 @dshepherd는 말합니다 :
이제 원하는 동작을 git 자체에서 사용할 수 있습니다.
그러나 diff-highlight
DOC에 있으며 셸에서 사용할 수 없습니다.
설치하려면 diff-highlight
사용자로 ~/bin
디렉토리하여 다음 단계를 (이것은 당신의 입력을 저장합니다)에 따라 :
$ locate diff-highlight
$ cd /usr/share/doc/git/contrib/diff-highlight #or path you locate
$ sudo make
$ mv diff-highlight ~/bin
그런 다음 .gitconfig
공식 문서로 구성하십시오 .
[pager]
log = diff-highlight | less
show = diff-highlight | less
diff = diff-highlight | less
UPD
또한 git
설치하지 않고 최신 버전에서 다음을 시도 할 수 있습니다 .
git diff --color-words=.
더 복잡한:
git diff --color-words='[^[:space:]]|([[:alnum:]]|UTF_8_GUARD)+'
Emacs에는 사용자의 요구를 충족시킬 ediff-patch-buffer 기능이 있습니다.
emacs 유형 ESC-x, ediff-patch-buffer에서 패치되지 않은 파일을 엽니 다.
프롬프트에 따라 패치 된 파일과 원본 버전의 비교를 강조 표시해야합니다.
귀하의 의견에 따라 다음은 dwdiff 만 필요한 bash 솔루션을 제공합니다.
#!/bin/bash
paste -d'\n' <(dwdiff -2 -L -c <(cat $2) <(patch $2 -i $1 -o -)) <(dwdiff -1 -L -c <(cat $2) <(patch $2 -i $1 -o -))| uniq
colordiff -u <(patch original_file -i patch_file -o -) <(cat original_file)
하지만 이것은 단지 변경 라인하지 물기를 강조하는 것입니다 ...
dwdiff -c --diff-input diff_file
디피
GitLab은 Diffy https://github.com/samg/diffy(Ruby )를 사용하여 GitHub 및 diff-highlight와 유사한 출력을 얻습니다.
Diffy는 동일한 알고리즘 광고 Git을 사용하여 diff 자체를 만들고 GitLab에서 사용하는 HTML 출력을 포함하여 다양한 유형의 출력을 지원합니다.
gem install diffy
echo '
require "diffy"
puts Diffy::Diff.new("a b c\n", "a B c\n").to_s(:html)
' | ruby
산출:
<div class="diff">
<ul>
<li class="del"><del>a <strong>b</strong> c</del></li>
<li class="ins"><ins>a <strong>B</strong> c</ins></li>
</ul>
</div>
strong
변경된 바이트에 어떻게 추가 되었는지 확인하십시오 .
예, Vim은 한 줄 내에서 변경된 텍스트 강조 표시를 포함하여이 작업을 수행합니다.
참조 :h diff
및 :h 08.7
방법은 diff로 파일에 대한 자세한 내용은.
Vim은 하이라이트를 위해 상당히 간단한 알고리즘을 사용합니다. 줄에서 첫 번째로 변경된 문자를 검색 한 다음 마지막으로 변경된 문자를 검색하고 그 사이의 모든 문자를 강조 표시합니다.
즉, 라인 당 여러 개의 하이라이트를 가질 수 없습니다. Vim의 많은 디자인 결정은 효율성을 우선시합니다.
vimdiff file1 file2
두 파일 간의 차이를 문자별로 표시합니다.
vimdiff는 vim에 포함 된 diff 도구입니다. (Vim은 + diff 옵션으로 컴파일되어 있어야 확인할 수 있습니다 :version
)
vim 내부에서 실행할 수도 있습니다. 자세한 :help diff
정보 및 명령은를 참조하십시오 .
vimdiff file.old file.new -c 'FormatCommand diffformat' -c 'w! file.diff.html' -c 'qa!'
.
screen -D -m
또는 추가 &>/dev/null
(/ dev / null 변형은 때때로 이상한 버그를 생성 함) 에서 diff 를 수행하고 포맷이 완료된 후 vim을 종료합니다. 내 최적화에도 불구하고 대용량 파일의 경우 매우 느립니다.
참고 : 이것은 여기에있는 내용의 중복입니다 : git의 diff 강조 표시를 개선하는 방법? . 이 스레드를 직접 찾는 일부 사람들에게 도움이 될 수 있으므로 여기에도 내 대답을 게시하십시오. :)
이전 답변에서 말했듯이 이것은 git에서만 가능합니다. 시스템에 따라 지침을 따르기가 더 쉬울 수 있으므로 이것을 게시하지만 다른 여러 답변과 유사합니다.
순전히 git과 그 기여에 의존하는 하나의 솔루션입니다. 이것은 git 과 함께 제공되는 것 외에 추가 파일이 필요하지 않습니다 . 모든 설명은 Ubuntu (18.04LTS에서 테스트 됨)에 대한 것이며 다른 Linux 시스템에서도 유사하게 작동해야합니다.
find -L /usr -name diff-highlight -type f
내 시스템에서 유효한 대답은 다음과 같습니다.
/usr/share/doc/git/contrib/diff-highlight/diff-highlight
sudo chmod +x /usr/share/doc/git/contrib/diff-highlight/diff-highlight
~/.gitconfig
을 추가하여 원하는 결과를 얻으려면 업데이트하십시오 (공백 4 개가 아니라 TABS 임).[color "diff-highlight"]
oldNormal = red
oldHighlight = red 52
newNormal = green
newHighlight = green 22