어떻게 하면 Git-diff처럼 일을 어렵게 할 수 있을까요?
의 출력 포맷이 마음에 듭니다.git diff
색깔과.+
/-
행간의 변화를 표현하는 것은 GNU diff보다 읽기 쉽습니다.
달릴 수 있습니다git diff
사용.--no-index
깃레포 밖에 플래그가 있고 잘 작동합니다.그러나, 그것은 누락된 것으로 보입니다.--exclude
재귀에서 파일 또는 하위 디렉터리를 제외하는 옵션diff
.
두 세계를 모두 활용할 수 있는 방법이 있습니까?(색상 옵션 및+
/-
의 형식.git diff
그리고.--exclude
GNU diff 옵션).
실험을 해봤지만 여전히 출력 형식을 선호합니다.git diff
이렇게 하면 됩니다.+/-
보다는<
그리고.>
.
diff -u file1 file2
GNU가 3.4를 난사하기 때문에 그 깃발은--color
추가되었습니다.두 가지를 결합하면 다음과 같습니다.
diff --color -u file1 file2
깃발--color
또한 인수를 사용합니다. 유효한 옵션은never
,always
또는auto
수행해야 할 작업에 대해 보다 명확하게 설명하려는 경우 유용합니다.
사용할 수도 있습니다.git diff --no-index -- A B
(manpage를 통해).
색상 차이를 설치합니다.
~/.colordiffrc 업데이트(필요한 경우 먼저 /etc/colordiffrc 복사):
# be more git-like: plain=off newtext=darkgreen oldtext=darkred diffstuff=darkcyan
사용하다
colordiff -u file1 file2
두 개의 파일 또는colordiff -ruN path1 path2
경로를 재귀적으로 비교합니다.
정확히 같지는 않지만, 아주 가깝습니다.
이것이 제가 제안하는 것이고 꽤 가깝습니다.
diff -u FILE1 FILE2 | colordiff | less -R
colordiff
설치해야 합니다.brew install colordiff
내 Mac에서.port install colordiff
일부 Mac에서.sudo apt-get install colordiff
데비안 또는 우분투에서- 다른 플랫폼의 경우 메인 페이지 또는 GitHub에서 소스를 다운로드하고 설치 지침을 따릅니다.
-R
이것은 Less에게 원시 코드 대신 색상을 표시하도록 지시합니다.
궁극적으로 사용한-w
빈 공간의 차이를 보고 싶지 않았기 때문입니다.
diff -w -u FILE1 FILE2 | colordiff | less -R
편집: @Ciprian Tomoiaga가 댓글에서 제안한 것처럼, 이것을 함수로 만들어 당신의 안에 넣을 수 있습니다.~/.bashrc
파일도 있습니다.
function gdiff () { diff -u $@ | colordiff | less -R; }
GNUdiff
을 가지고 있습니다.--color
옵션은 2016년 말 버전 3.4 이후로 유닉스 SE에 대한 이 답변에 따라 제공됩니다.옆에-u
의 출력을 모방하기에 충분해야 합니다.git diff
:
diff -u --color=always file1 file2 | less -r
--color
야 한다.always
파이프에 사용될 때,auto
파이프의 색이 꺼집니다.
Windows에서 Git Bash와 함께 사용해 본 적이 있습니다.less -R
허크의 첫 번째 선에만 색을 칠할 것입니다. less -r
그 경우에 저를 위해 그것을 고쳐주었습니다.
사용만bash
,diff
,tput
,그리고.less
우리는 의 산출물에 근접할 수 있습니다.git diff
그러나 근시안적인 시각 때문에 몇 가지 주목할 만한 차이가 있을 것입니다.diff
프로그래머
다음 Bash 함수 정의를 사용자 계정에서 자동으로 소스되는 일부 파일에 넣으면 명령줄에서 이 함수에 액세스할 수 있습니다.
function gdiff()
{
local REG=`tput op`
local GRP=`tput setaf 6`
local ADD=`tput setaf 2`
local REM=`tput setaf 1`
local NL=$'\n'
local GRP_LABEL="${GRP}@@ %df,%dn +%dF,%dN @@${REG}"
local UNCH_GRP_FMT=''
[[ "${1}" == '@full' ]] && {
UNCH_GRP_FMT="${GRP_LABEL}${NL}%="
shift
}
diff \
--new-line-format="${ADD}+%L${REG}" \
--old-line-format="${REM}-%L${REG}" \
--unchanged-line-format=" %L${REG}" \
--new-group-format="${GRP_LABEL}${NL}%>" \
--old-group-format="${GRP_LABEL}${NL}%<" \
--changed-group-format="${GRP_LABEL}${NL}%<%>" \
--unchanged-group-format="${UNCH_GRP_FMT}" \
"${@}" | less -FXR
}
이 기능은 다음과 같이 작동합니다.
- 으로, 으로적궁극
diff
파일 내의 변경 내용을 표시하는 방법을 지정하기 위해 다양한 형식 지정 옵션과 함께 호출됩니다. tput
ANSI 색상 코드를 해당 서식 옵션에 삽입하는 데 사용됩니다.단자를 사용하는 ANSI 단자를 해야 할 .tput setaf
와 함께tput setf
.- 의 출력.
diff
에 파이프로 연결된less
.-R
ANSI 색상을 보존할 수 있습니다.-X
예방합니다.less
종료 시 화면을 지울 수 있습니다.-F
예방합니다.less
하나의 화면에 출력이 들어갈 경우 호출기로 작동합니다. - 첫 번째 매개 변수가 다음과 같은 경우
@full
함수는 추가 및 제거된 선 외에 변경되지 않은 모든 선을 표시합니다.
이 접근 방식과 다음의 차이점에 주목하십시오.git diff
:
git diff
에서는 각 변경 사항을 둘러싼 세 줄의 컨텍스트를 보고합니다. 불하게도행,,diff
컨텍스트 줄 수를 지정하는 동시에 포맷 옵션을 지정하려면 불만을 제기하고 종료하는 것 같습니다(최소한 Mac OS X Yosemite에서는 종료됩니다).합니다.diff
따라서 사항을 파일 변경되지 않은 할 수 .@full
첫 번째 매개 변수로 사용합니다.- 문맥의 선이 다르기 때문입니다.
git diff
이 함수에 의해 보고된 라인 번호는 또한 보고된 라인 번호와 다를 것입니다.git diff
. - 보고된 한 줄 변경사항이 있을 수 있습니다. 이는 올바른 동작이지만 변경된 파일에 빈 한 줄 삽입이 포함되어 있으면 짜증이 납니다.생각합니다
git diff
맥락을 통해 이 문제를 더 잘 처리합니다.다른 옵션을 에 전달할 수 있습니다.diff
더 나은 공간을 처리할 수 있습니다.
이것을 당신의 rc 파일에 넣으십시오, 가장 일반적으로, 그것은 다음 중 하나일 것입니다..bashrc
또는.zshrc
:
diff() { git diff --no-index "$1" "$2" | colordiff; }
사항: 요사항:git
그리고.colordiff
설치했어야 합니다.
: 사법용 :diff file1 file2
다음을 찾고 있습니다.
sudo apt-get install colordiff
박쥐는 발색력이 좋기 때문에, 저는 그것이 잘 작동하는지 시험해 보았습니다.diff
그리고 놀랍게도 그것은 개봉 즉시 정말 잘 작동했습니다.
$ diff file1 file2 | bat
또는$ diff -u file1 file2 | bat
따라서 보다 효율적인 기능을 위해 아래와 같은 기능을 만들 수 있다고 생각합니다.
function bdiff () { diff -u $@ | bat;}
당신이 으면이 .colordiff
또는git diff
당신은 색을 얻을 수 있습니다.vim
.
cdiff() { diff -u $@ | vim -R -; }
아니면 간단히
cdiff() { diff -u $@ | view -; }
9에서 diff -u --color=always file1 file2
다른 옵션은 저장소 외부에서 수행하여 파일 간에 차이를 알 수 있도록 하는 것입니다.예: 다음과 같은 셸 함수:
gdiff() {
(
dir=`pwd`
cd ./$(git rev-parse --show-cdup)/..
git diff $dir/$1 $dir/$2
)
}
색상 차이 사용:
설치:
sudo apt-get install colordiff
용도:
colordiff -u file_one file_two
표시된 것과 정확히 동일한 차이를 제공합니다.git diff
.
더하다
alias diff="git diff --no-index --"
~/.zshrc 또는 ~/.zhrc
이것은 gitdiff를 사용하여 두 파일 간의 일반적인 diff를 수행합니다.
구성 설정:
[color]
ui = true
"의 "diff"와--relative=<path>
당신이 원하는 것을 선택할 수 있습니다.시도해 보셨습니까?
언급URL : https://stackoverflow.com/questions/4857310/how-to-get-diff-working-like-git-diff
'programing' 카테고리의 다른 글
R에서 데이터 프레임에 행을 추가하는 방법은 무엇입니까? (0) | 2023.07.04 |
---|---|
JPA - DDL에서 문자열 열을 varchar(max)로 설정하는 방법 (0) | 2023.06.29 |
GitHub에서 자신의 저장소를 어떻게 포크합니까? (0) | 2023.06.29 |
판다 데이터 프레임에 목록이나 시리즈를 행으로 추가하시겠습니까? (0) | 2023.06.29 |
참조된 모델의 필드별 모델에 대한 Mongoose 중첩 쿼리 (0) | 2023.06.29 |