ProgramingTip

변경된 각 행에서 변경된 행 및 변경된 바이트 강조 표시

bestdevel 2020. 10. 12. 07:53
반응형

변경된 각 행에서 변경된 행 및 변경된 바이트 강조 표시


오픈 소스 프로젝트 Trac 은 훌륭한 diff 하이 라이터 를 가지고 있습니다. 변경된 각 라인에서 변경된 라인 과 변경된 바이트를 강조 합니다! 여기 또는 여기참조 하십시오 .

bash 터미널 에서 또는 diff 출력 (패치 파일)에 동일한 색상 강조 표시 (예 : 변경된 행 및 변경된 바이트 ) 를 사용하는 방법이 있습니까?gitvim


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 diff또는 git log기타를 사용 하는 동안 옵션을 사용하십시오 --word-diff=color(단어 차이 BTW에 대한 다른 모드도 있음)


diff-so-fancyA는 diff인간의 시선을 위해 설계 -highlighter.

잘라 내기 / 넣기에 짜증나 는 선행 +/ -제거하고 파일 사이에 명확한 섹션을 만듭니다.

컬러 git(왼쪽) 대 diff-so-fancy(오른쪽-캐릭터 레벨 하이라이트에 유의) :

diff-so-fancy 출력

당신이 원하는 경우 (오른쪽) 출력을하지만에있는 파일에 제한되지 않는 저장소 , 당신에 다음 함수를 추가 모든 파일에 그것을 사용하기 :diff-so-fancygit.bashrc

dsf() { git diff --no-index --color "$@" | diff-so-fancy; }

예 :

dsf original changed-file

문자 수준 강조 및 표준 diff형식

의 비표준 형식화를 좋아하지 않지만 diff-so-fancy문자 수준의 git강조 표시를 원하면 의 출력 을 가져와 정말 예쁜 표준 형식 출력을 생성합니다 .diff-highlightgitdiff

diff-highlight 스크린 샷

기본적으로 사용에서하려면 다음을 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.


원하는 동작은 이제 git 자체에서 사용할 수 있습니다 (naught101의 주석에서 지적했듯이). 이를 활성화 활성화 호출기를 다음으로 설정해야합니다.

perl /usr/share/doc/git/contrib/diff-highlight/diff-highlight | less

/usr/share/doc/git/contrib/diff-highlight/diff-highlightUbuntu 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 의 지침이 작동하지 않는 Ubuntu 버전 에서는 작동하지 않기 때문입니다.


나는 --color-words옵션을 사용 하고 그것은 나를 위해 잘 작동합니다.

$ git diff --color-words | less -RS

바이트 기반 diff 용 유틸리티는 v1.7.8 1 이후 공식 Git과 함께 배포되었습니다 . 컴퓨터에 설치된 위치를 찾아 활성화하면됩니다.

Git이 설치된 위치 찾기

  • Homebrew 를 통해 Git이 설치된 MacOS :/usr/local/opt/git
  • Windows 용 Git이있는 Windows : 실행 cd / && pwd -W하여 설치 디렉토리를 찾습니다.
  • Linux : 대단합니다. 힘내가 설치된 위치를 당신이 이미 알고하지 않으면, ll $(which git)또는 locate git도움이 될 것입니다.

diff-highlightPATH에서 찾을 수 있도록 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 구성에서 활성화

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

1 다음은 v1.7.8 버전 이지만 그 이후로 많은 변경 이 이루어졌습니다.


같은 @dshepherd는 말합니다 :

이제 원하는 동작을 git 자체에서 사용할 수 있습니다.

그러나 diff-highlightDOC에 있으며 셸에서 사용할 수 없습니다.
설치하려면 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

디피

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정보 및 명령은를 참조하십시오 .

참고 URL : https://stackoverflow.com/questions/5326008/highlight-changed-lines-and-changed-bytes-in-each-changed-line

반응형