다르다
diff원저작자 | 더글러스 매킬로이 (AT&T 벨 연구소) |
---|---|
개발자 | 다양한 오픈 소스 및 상용 개발자 |
초기 릴리즈 | 1974년 6월, | 전(
기입처 | C |
운영 체제 | Unix, Unix like, V, Plan 9, Inferno |
플랫폼 | 크로스 플랫폼 |
유형 | 명령어 |
면허증. | 계획 9: MIT 라이선스 |
컴퓨팅에서 유틸리티 diff는 파일 내용 간의 차이를 계산하고 표시하는 데이터 비교 도구입니다.다른 목적으로 사용되는 편집 거리 개념과는 달리 diff는 문자 지향보다는 선 지향이지만, 다른 파일로부터 하나의 파일을 만들기 위해 최소의 삭제 및 삽입 세트를 결정하려고 한다는 점에서 Levenshtein 거리 같은 것입니다.이 유틸리티는 변경 내용을 몇 가지 표준 형식 중 하나로 표시하므로 사용자 또는 컴퓨터 모두 변경 내용을 해석하여 패치 적용에 사용할 수 있습니다.
일반적으로 diff는 같은 파일의 두 버전 간의 변경을 표시하기 위해 사용됩니다.최신 구현에서는 바이너리 [1]파일도 지원합니다.출력을 Unix 프로그램 패치와 함께 적용할 수 있기 때문에 출력을 "diff" 또는 패치라고 합니다.유사한 파일 비교 유틸리티의 출력은 "diff"라고도 불리며, 검색 동작을 설명하기 위해 "grep"라는 단어를 사용하는 것과 마찬가지로 diff라는 단어는 데이터 차이와 [2]그 결과를 계산하는 총칭이 되었습니다.POSIX 표준은 "diff" 및 "patch" 유틸리티의 동작과 파일 [3]형식을 지정합니다.
역사
diff는 1970년대 초에 Unix 운영 체제에서 개발되었으며, 이는 뉴저지 주 머레이 힐에 있는 Bell Labs에서 개발되었습니다.1974년[citation needed] Unix 5 에디션과 함께 출시된 첫 번째 버전은 더글라스 맥일로이와 제임스 헌트에 의해 작성되었습니다.이 연구는 제임스 W와 공동으로 쓴 1976년 논문에서 발표되었습니다.헌트, 그는 [4]diff의 초기 프로토타입을 개발했다.이 문서에서 설명한 알고리즘은 Hunt-Szymanski 알고리즘으로 알려졌습니다.
McIlroy의 연구는 GECOS에 대한 Steve Johnson의 비교 프로그램과 Mike Lesk의 증명 프로그램에 의해 선행되었고 영향을 받았습니다.또한 증명은 Unix에서 시작되었으며 diff와 마찬가지로 한 줄씩 변경되었으며 프로그램 출력에 줄 삽입 및 삭제를 표시하기 위해 앵글 브래킷(">" 및 "<")을 사용하기도 했습니다.그러나 이러한 초기 적용에서 사용된 휴리스틱스는 신뢰할 수 없는 것으로 간주되었다.다른 툴의 유용성에 의해 McIlroy는 다양한 태스크에서 사용할 수 있는 보다 견고한 툴을 연구하고 설계하게 되었습니다.그러나 PDP-11 하드웨어의 처리 및 크기 제한에서는 뛰어난 성능을 발휘합니다.이 문제에 대한 그의 접근은 Alfred Aho, Elliot Pinson, Jeffrey Ulman 및 Harold S를 포함한 벨 연구소의 개인들과의 협업에서 비롯되었습니다.돌.
Unix 의 경우, ed line editor 를 사용하면, 머신이 사용할 수 있는 「편집 스크립트」를 작성하는 자연스러운 기능이 다릅니다.이러한 편집 스크립트는 파일에 저장하면 원본 파일과 함께 수정된 파일 전체에 재구성할 수 있습니다.이를 통해 여러 버전의 파일을 유지하는 데 필요한 보조 스토리지가 크게 줄어들었습니다.McIlroy는 다양한 출력 포맷을 설계하고 구현할 수 있는 diff용 포스트 프로세서를 작성하는 것을 고려했지만, ed 명령어로 받아들여지는 구문과 역순서 입력을 생성하는 것을 diff로 하는 것이 더 검소하고 간단하다는 것을 알게 되었습니다.
1984년 후반에 Larry Wall은 별도의 유틸리티인 패치를 만들어 소스코드를 mod에 공개했습니다.소스 및 넷.소스 뉴스 그룹.[5][6][7]이 프로그램은 diff에서 출력된 파일을 수정하는 기능을 일반화하고 확장했습니다.
Emacs 모드에서는 패치의 포맷을 변환하거나 인터랙티브하게 패치를 편집할 수도 있습니다.
diff의 초기 몇 년 동안 일반적인 용도에는 소프트웨어 코드와 기술 문서의 마크업 소스 변경 비교, 프로그램 디버깅 출력 확인, 파일 시스템 목록 비교 및 컴퓨터 어셈블리 코드 분석이 포함되었습니다.ed를 대상으로 한 출력은 파일에 대한 일련의 수정에 대한 압축을 제공하기 위해 작성되었습니다.소스 코드 제어 시스템(SCCS)과 리비전을 아카이브하는 기능은 1970년대 후반에 diff에서 편집 스크립트를 저장함으로써 등장했습니다.
알고리즘.
diff의 연산은 가장 긴 공통의 서브시퀀스 [4]문제를 해결하는 것에 근거하고 있습니다.
이 문제에서는 다음 두 가지 항목의 시퀀스가 지정됩니다.
a b c d f g h j q z
a b c d e f g i j k r x y z
두 원본 시퀀스에 같은 순서로 존재하는 가장 긴 시퀀스의 아이템을 찾습니다.즉, 첫 번째 원본 시퀀스에서 일부 항목을 삭제하여 얻을 수 있는 새로운 시퀀스와 다른 항목을 삭제하여 두 번째 원본 시퀀스에서 얻을 수 있는 새로운 시퀀스를 찾고자 합니다.또한 이 시퀀스가 가능한 한 길었으면 합니다.이 경우는 그렇다
a b c d f g j z
가장 긴 공통의 연속에서 diff와 같은 출력을 얻는 것은 작은 단계일 뿐입니다.연속에는 존재하지 않지만 첫 번째 원본 시퀀스에 존재하는 항목은 삭제되었을 것입니다(아래의 '-' 표시로 표시됨).후속에는 없지만 두 번째 원본 시퀀스에 존재하는 경우 삽입된 상태여야 합니다('+' 표시로 표시됨).
e h iq k r x y + - + + + + + + +
사용.
그diff
명령어는 명령줄에서 호출되며 다음 2개의 파일 이름을 전달합니다.diff original new
명령어 출력은 원래 파일을 새 파일로 변환하는 데 필요한 변경을 나타냅니다.
original과 new가 디렉토리인 경우 diff는 양쪽 디렉토리에 존재하는 각 파일에서 실행됩니다.옵션,-r
는 일치하는 서브디렉토리를 재귀적으로 하강시켜 디렉토리간의 파일을 비교합니다.
이 문서의 예 중 하나는 원본과 새 파일 두 개를 사용합니다.
오리지널: 의 이 부분문서가버전부터 버전까지 동일버전입니다.그러면 안 돼그렇지 않으면 나타나다변화. 그렇지 않으면, 그것은도움이 되지 않을 것이다크기를 압축하다변화들. 이 단락은 다음을 포함합니다.오래된 텍스트 에서 삭제됩니다.가까운 장래에 철자를 쓰는 것은 중요하다.이 도큐먼트를 확인해봐온다른 한편으로 a철자가 틀린 단어는 아니다세상의 종말 나머지 부분에는 아무것도 없습니다.이 단락은 할 필요가 있다.바뀌다할 수 있는 일그 뒤에 붙는다. | 신규: 이것은 중요하다.알아둬야 해!따라서 위치하다이 일의 발단문서! 의 이 부분문서가버전부터 버전까지 동일버전입니다.그러면 안 돼그렇지 않으면 나타나다변화. 그렇지 않으면, 그것은도움이 되지 않을 것이다크기를 압축하다변화들. 철자를 쓰는 것은 중요하다.이 문서를 확인합니다.온다른 한편으로 a철자가 틀린 단어는 아니다세상의 종말 나머지 부분에는 아무것도 없습니다.이 단락은 할 필요가 있다.바뀌다할 수 있는 일그 뒤에 붙는다. 이 단락은 다음을 포함합니다.중요한 신규 추가 사항를 참조해 주세요. | 이 명령어는 다음과 같은 일반 diff 출력을 생성합니다. 0a1,6 > 이것은 중요한 > 통지입니다! 따라서 이 문서의 선두에 >>11,15d16 < 이 단락에는 오래된 텍스트가 포함되어 있습니다. 가까운 장래에 삭제될 예정입니다. < 17c18 < 이 도큐먼트를 확인합니다. ---> 에서 이 문서를 확인합니다. 24a26,29 >> 이 단락에는 이 문서의 중요한 신규 추가 >가 포함되어 있습니다. 주의: 여기서 diff 출력은 읽기 쉽도록 색상으로 표시된다.diff 유틸리티는 컬러 출력을 생성하지 않으며 출력은 일반 텍스트입니다.그러나 많은 도구에서 구문 강조 표시를 사용하여 출력을 색상으로 표시할 수 있습니다. |
이 기존 출력 형식에서는 added, deleted 및 changed를 나타냅니다.원본 파일의 행 번호는 // dc앞에 표시되고 새 파일의 행 번호는 뒤에 표시됩니다.작은 기호와 큰 기호(추가, 삭제 또는 변경된 행의 시작 부분)는 행이 표시되는 파일을 나타냅니다.새 파일에 표시되도록 원래 파일에 추가 행이 추가됩니다.삭제 행은 원래 파일에서 삭제되어 새 파일에서 누락됩니다.
기본적으로는 두 파일에 공통되는 행은 표시되지 않습니다.이동한 행은 새 위치에 추가된 행과 이전 [8]위치에서 삭제된 행으로 표시됩니다.단, 일부 다른 툴에서는 이동선이 강조 표시됩니다.
출력 변동
스크립트 편집
ed 스크립트는 최신 버전의 diff를 사용하여 생성할 수 있습니다.-e
선택.이 예의 편집 스크립트는 다음과 같습니다.
24a 이 단락은 이 문서에 새로 추가된 중요한 내용을 포함하고 있습니다. . . 17c 이 문서를 확인하십시오. On. 11,15d 0a 이것은 중요한 공지입니다! 따라서 이 문서의 첫머리에 기재되어 있어야 합니다.
ed를 사용하여 파일 원본의 내용을 파일 new의 내용으로 변환하기 위해, 우리는 이 diff 파일에 두 줄을 추가해야 합니다. 한 줄은 다음 행을 포함합니다.w
(write) 명령어 및 명령어를 포함하는 명령어q
(예) 명령어(예:printf "w\nq\n" >> mydiff
여기서 diff 파일에 mydiff라는 이름을 붙였습니다.이 경우, 이 변환은 실행시에 실행됩니다.ed -s original < mydiff
.
콘텍스트 형식
Unix의 버클리 디스트리뷰션에서는 컨텍스트 포맷을 추가하였습니다.-c
파일 시스템 디렉토리 구조에서의 재현 기능(-r
1981년 7월에 출시된 2.8 BSD에 이러한 기능이 추가되었습니다.Berkeley에서 도입된 diff의 콘텍스트 포맷은 최소한의 변경을 수반하는 소스 코드의 패치를 배포하는 데 도움이 되었습니다.
컨텍스트 형식에서는 변경된 행이 이전 및 이후 변경되지 않은 행과 함께 표시됩니다.변경되지 않은 임의의 수의 행을 포함하면 패치에 컨텍스트가 제공됩니다.컨텍스트는 두 파일 간에 변경되지 않은 행으로 구성되어 있으며 변경된 파일에서 행의 위치를 찾고 행 번호가 여전히 일치하는지 여부에 관계없이 변경 내용을 적용할 위치를 찾기 위한 참조가 됩니다.콘텍스트 포맷에 의해, 유저에 의한 가독성과 패치 적용시의 신뢰성이 향상해, 패치 프로그램의 입력으로서 받아들여지는 출력이 실현됩니다.이 인텔리전트한 동작은 기존의 diff 출력에서는 가능하지 않습니다.
변경 행의 위아래에 표시되는 변경되지 않은 행의 수는 사용자가 정의할 수 있습니다(짝수라도 0).단, 일반적으로는 3 행이 기본값입니다.행크 내의 변경되지 않은 행의 컨텍스트가 인접 행크와 겹치면 diff에 의해 변경되지 않은 행이 중복되지 않고 단일 행크로 결합됩니다.
A "!
" 는 2 개의 파일에 대응하는 행간의 변경을 나타내고 있습니다만, " 는+
"는 행의 추가를 나타내고 "는-
라인을 삭제합니다.공백은 변경되지 않은 행을 나타냅니다.패치의 선두에는, 풀 패스와 탭 문자로 구분된 타임 스탬프를 포함한 파일 정보가 표시됩니다.각 행크의 선두에는, 파일의 변경에 대응하는 행 번호가 표시됩니다.3개의 별표 집합 사이에 나타나는 숫자 범위는 원래 파일에 적용되며, 3개의 대시 집합은 새 파일에 적용됩니다.hunk 범위는 각 파일의 시작 및 끝 행 번호를 지정합니다.
명령어diff -c original new
그럼 다음 출력이 생성됩니다.
*** /path/to/original timestamp --- /path/to/new timestamp ****** 1,3 **** --- 1,9 --+ 이것은 중요한 + 알림입니다! 따라서 + 이 + 문서의 시작 부분에 있어야 합니다. + 문서의 이 부분은 **************************************************************************************************************************철자를 쓰는 것이 중요합니다! 이 도큐먼트를 확인해 보세요. 반면 철자가 틀렸다고 해서 세상이 끝나는 것은 아닙니다. --- 14,21 ----- 변화의 크기를 압축합니다.이 문서의 철자를 확인하는 것이 중요합니다. 반면에, 철자가 틀린 단어가 세상의 끝은 아닙니다.***********22,24****** --- 23,29 --- 이 단락을 변경해야 합니다.그 뒤에 내용을 추가할 수 있습니다.+ + 이 단락에는 + 이 문서에 새로 추가된 중요한 내용이 포함되어 있습니다.
주의: 여기서 diff 출력은 읽기 쉽도록 색상으로 표시된다.diff 유틸리티는 컬러 출력을 생성하지 않으며 출력은 일반 텍스트입니다.그러나 많은 도구에서 구문 강조 표시를 사용하여 출력을 색상으로 표시할 수 있습니다.
통합 형식
통합 형식(또는 unidiff)[9][10]은 컨텍스트 형식에 의해 이루어진 기술적 개선 사항을 상속받지만, 오래된 텍스트와 새로운 텍스트가 바로 인접하여 표시되므로 더 작은 차이를 생성합니다.통합 포맷은 보통 "를 사용하여 호출됩니다.-u
명령줄 옵션.이 출력은 패치프로그램의 입력으로 자주 사용됩니다.많은 프로젝트에서는 특히 "diff"를 통합 형식으로 제출하도록 요구하기 때문에 통합 diff 포맷은 소프트웨어 개발자 간의 교환에 가장 일반적인 포맷이 됩니다.
통합 콘텍스트 차이는 1990년 8월 Wayne Davison에 의해 처음 개발되었다(집 제14권에 나타난 유니디프).sources.misc)를 참조해 주세요.Richard Stallman은 한 달 후 GNU 프로젝트의 diff 유틸리티에 통합 diff 지원을 추가하였고, 이 기능은 1991년 1월에 출시된 GNU diff 1.15에서 첫 선을 보였습니다.이후 GNU diff는 콘텍스트 포맷을 일반화하여 diff의 임의의 포맷을 가능하게 했습니다.
포맷은 콘텍스트 포맷과 동일한 2행 헤더로 시작합니다.단, 원본 파일 앞에는 "가,--- 새 파일 앞에는 "+++가 있습니다.다음은 파일의 행 차이를 포함하는 하나 이상의 변경 훈크입니다.변경되지 않은 컨텍스트 행에는 공백 문자가, 추가 행에는 플러스 기호, 삭제 행에는 마이너스 기호가 붙습니다.
행크는 범위 정보로 시작하여 행 추가, 행 삭제 및 임의의 수의 컨텍스트 행이 바로 이어집니다.범위 정보는 더블 앳 기호로 둘러싸여 컨텍스트 형식(위)에서 두 줄에 나타나는 한 줄에 결합됩니다.범위 정보 행의 형식은 다음과 같습니다.
@@ -l,s +l,s @ 옵션 섹션 제목
hunk 범위 정보에는 2개의 hunk 범위가 포함됩니다.원래 파일의 hunk 범위는 마이너스 기호 앞에, 새 파일의 범위는 플러스 기호 앞에 표시됩니다.각 hunk 범위는 l,s 형식입니다.여기서 l은 시작행 번호, s는 각 파일에 대해 변경 hunk가 적용되는 행 수입니다.많은 버전의 GNU diff에서 각 범위는 콤마와 후행 값 s를 생략할 수 있습니다.이 경우 기본값은 1입니다.주목되는 값은 첫 번째 범위의 l행 번호뿐입니다.다른 모든 값은 diff에서 계산할 수 있습니다.
원본의 hunk 범위는 모든 컨텍스트 행과 삭제 행(변경 포함)의 합계여야 합니다.새 파일의 hunk 범위는 모든 컨텍스트 행과 추가된 행(변경된 행 포함)의 합계여야 합니다.hunk 사이즈 정보가 hunk 내의 행 수와 일치하지 않으면 diff는 무효로 간주되어 거부될 수 있습니다.
임의로 hunk 범위 뒤에 hunk가 속한 섹션 또는 함수의 제목을 붙일 수 있습니다.이것은 주로 차이를 읽기 쉽게 만드는 데 유용합니다.GNU diff를 사용하여 diff를 작성하는 경우 헤더는 정규 표현 [11]조회에 의해 식별됩니다.
행이 변경되면 삭제 및 추가로 표시됩니다.원래 파일과 새 파일의 hunk가 동일한 hunk에 표시되므로 이러한 변경은 서로 [12]인접하게 나타납니다.다음 예에서는 이 문제가 발생합니다.
- 이 도큐먼트를 확인합니다.+에서 이 문서를 확인합니다.온
명령어diff -u original new
그럼 다음 출력이 생성됩니다.
--- /path/to/original timestamp +++ /path/to/new timestamp @@ -1,3 +1,9 @@ 이것은 중요한 +알림입니다! 따라서 +이 +문서의 선두에 위치해야 합니다.+ 문서의 이 부분은 버전부터 @@ -8,13 +14,8@ 의 변경 크기를 압축할 때까지 동일합니다.-이 단락에는 오래된 텍스트가 포함되어 있습니다.-근래에 삭제될 예정입니다.-이 도큐먼트의 철자를 확인하는 것이 중요합니다. +에서 이 문서를 확인합니다. 반면에, 철자가 틀린 단어가 세상의 끝은 아닙니다.@@ -22,3 +23,7 @@ 이 단락을 변경해야 합니다.그 뒤에 추가할 수 있습니다.+이 단락에는 +이 문서에 +중요한 새로운 추가가 포함되어 있습니다.
주의: 여기서 diff 출력은 읽기 쉽도록 색상으로 표시된다.diff 유틸리티는 컬러 출력을 생성하지 않으며 출력은 일반 텍스트입니다.그러나 많은 도구에서 구문 강조 표시를 사용하여 출력을 색상으로 표시할 수 있습니다.
파일명과 타임스탬프를 올바르게 구분하려면 , 그 사이에 구분자가 탭 문자인 것에 주의해 주세요.화면에서는 보이지 않으며 콘솔/단말기 화면에서 차이를 복사/붙일 때 손실될 수 있습니다.
특정 프로그램 및 특정 컨텍스트에서 사용되고 이해되는 diff 형식에 대한 일부 수정 및 확장이 있습니다.예를 들어 Subversion 등의 일부 리비전 제어 시스템에서는 diff 헤더 섹션의 타임스탬프 대신 또는 타임스탬프 외에 버전 번호, "작업 복사본" 또는 기타 주석을 지정합니다.
일부 도구에서는 다음과 같이 수정된 각 파일의 헤더를 사용하여 여러 개의 다른 파일을 하나로 병합할 수 있습니다.
인덱스: path/to/file.cpp
줄 바꿈으로 끝나지 않는 파일의 특수한 경우는 처리되지 않습니다.unidiff 유틸리티도 POSIX diff 표준도 이러한 유형의 파일을 처리하는 방법을 정의하지 않습니다(실제로 이러한 파일은 엄격한 POSIX 정의에 의해 "텍스트" 파일이 아닙니다).[13]패치 프로그램은 실장 고유의 diff 출력조차 인식하지 않습니다.
1975년 이후의 변경에는 코어 알고리즘의 개량, 명령어에 유용한 기능의 추가, 새로운 출력 포맷의 설계가 포함됩니다.기본 알고리즘은 Eugene W. Myers의[14] O(ND) 차분 알고리즘과 그 변주곡 및 Web Miller와 Myers의 [15]A File Comparison Program에 설명되어 있습니다.이 알고리즘은 에스코 우코넨에 [16]의해 독립적으로 발견되어 "개산 스트링 매칭 알고리즘"에서 설명되었습니다.diff 프로그램의 첫 번째 에디션은 줄 바꿈 문자를 예상하는 텍스트 파일의 줄 비교를 위해 설계되었습니다.1980년대에 이르러 바이너리 파일의 지원은 애플리케이션의 설계와 구현에 변화를 가져왔다.
GNU diff 및 diff3는 다른 diff 및 패치 관련 [17]유틸리티와 함께 diffutils 패키지에 포함되어 있습니다.최근에는 콘텍스트의 차이와 통합의 [18]차이를 조합, 재배열, 비교 및 수정할 수 있는 패치 유틸리티 패키지도 있습니다.
포메터 및 프론트 엔드
포스트프로세서 sdiff와 diffmk는 각각 나란히 다른 목록을 렌더링하고 인쇄된 문서에 변경 마크를 적용합니다.둘 다 1981년 [citation needed][discuss]또는 그 이전에 벨 연구소의 다른 곳에서 개발되었습니다.
Diff3는 2개의 diff를 조정하여 1개의 파일을 다른 2개의 파일과 비교합니다.원래 Paul Jensen은 공통 소스를 편집하는 두 사람에 의해 이루어진 변화를 조정하기 위해 고안되었습니다.또한 RCS와 같은 수정기호 제어 시스템에서 [19]병합을 위해 사용됩니다.
Emacs 에는 패치 파일의 인터랙티브 편집 및 Marge 기능을 조합한 사용자 인터페이스에서 패치가 제공하는 변경을 표시하는Ediff 가 있습니다.
Vim은 2개에서 8개의 파일을 비교할 수 있는 vimdiff를 제공하며 [20]색상의 차이가 강조 표시됩니다.역사적으로 diff 프로그램을 호출하는 동안 현대의 vim은 git의 fork of xdiff library(LibXDIf) 코드를 사용하여 향상된 [21]속도와 기능을 제공합니다.
GNU[22] Wdiff는 diff의 프런트 엔드입니다.단어나 구문이 변경되어 있는 경우에서도, 문자 언어의 텍스트 문서에서 변경된 단어 또는 구를 표시합니다.
colordiff는 'diff'의 Perl 래퍼로 출력은 같지만 'syntax' 하이라이팅이 [23]잘 되어 있습니다.
알고리즘 도함수
소스 파일을 구문 구조로 비교하는 유틸리티는 주로 일부 프로그래밍 [24][25][26]언어에 대한 연구 도구로 구축되어 있으며, 일부는 [27][28]상용 도구로 사용할 수 있습니다.또한 구문 인식 diff를 실행하는 무료 도구에는 다음이 포함됩니다.
- C++: zograscope, AST 기반.[29]
- HTML: Daisydiff,[30] html-differ.
- XML: Microsoft의 xmldiffpatch와 IBM의 [31][32]xmldiffmerge.
- JavaScript: astii(AST 기반).
- 다국어:Pretty Diff (포맷 코드 후 diff)[33]
spiff는 반올림 오류와 공백이 있는 부동소수점 계산의 차이를 무시하는 diff의 변형으로, 둘 다 일반적으로 소스 코드 비교와 관련이 없습니다.벨코어는 원본을 썼다.[34][35]HPUX 포트는 최신 공개 릴리스입니다.spiff는 바이너리 파일을 지원하지 않습니다.spiff 출력은 표준 diff 형식으로 표준 출력으로 출력되며 C,[36][37][34][38][35] Bourne 쉘, Fortran, Modula-2 및 Lisp 프로그래밍 언어로 입력을 받습니다.
LibXDiff는 1998년부터 많은 알고리즘에 대한 인터페이스를 제공하는 LGPL 라이브러리입니다.Rabin 지문을 사용한 개량된 Myers 알고리즘이 당초(2008년 [39]최종 릴리즈 시점)에 실장되어 있었지만, git과 libgit2의 포크는 그 후 많은 자체와 함께 저장소를 확장했다.일반적으로 "히스토그램"이라고 불리는 알고리즘은 속도와 [40][41]품질 모두에서 원래의 마이어스 알고리즘보다 훨씬 더 나은 것으로 간주됩니다.이것은 [21]Vim에서 사용되는 최신 버전의 LibXDiff입니다.
「 」를 참조해 주세요.
기타 무료 파일 비교 도구
레퍼런스
- ^ 맥켄지 등GNU Diff 및 패치와의 파일 비교 및 병합의 "바이너리 파일과 텍스트 비교 강제"2007년 4월 28일 다운로드.[1] 2017-12-19 Wayback Machine에 보관
- ^ Eric S. Raymond(ed.), "diff" 2014-01-31 Wayback Machine, The Jonesons File, 버전 4.4.7에서 아카이브됨
- ^ IEEE Computer Society; The Open Group (26 September 2008). Standard for Information Technology—Portable Operating System Interface (POSIX) Base Specifications, Issue 7. pp. 2599–2607. IEEE 규격 1003.1-2001은 기존의 "ed 스크립트" 및 컨텍스트의 diff 출력 형식을 지정합니다.IEE 규격 1003.1-2008은 (그때까지) 더 일반적인 통합 형식을 추가했습니다.
- ^ a b James W. Hunt; M. Douglas McIlroy (June 1976). "An Algorithm for Differential File Comparison" (PDF). Computing Science Technical Report, Bell Laboratories. 41. Archived (PDF) from the original on 2014-12-26. Retrieved 2015-05-06.
- ^ Larry Wall (November 9, 1984). "A patch applier--YOU WANT THIS!!!". Newsgroup: net.sources. Usenet: 1457@sdcrdcf.UUCP. Archived from the original on February 19, 2022. Retrieved May 11, 2015.
- ^ Larry Wall (November 29, 1984). "patch version 1.2--YOU WANT THIS". Newsgroup: net.sources. Usenet: 1508@sdcrdcf.UUCP. Archived from the original on March 21, 2020. Retrieved May 11, 2015.
- ^ Larry Wall (May 8, 1985). "patch version 1.3". Newsgroup: net.sources. Usenet: 813@genrad.UUCP. Archived from the original on February 19, 2022. Retrieved May 11, 2015.
- ^ David MacKenzie; Paul Eggert; Richard Stallman (1997). Comparing and Merging Files with GNU Diff and Patch. Bristol: Network Theory. ISBN 978-0-9541617-5-0. Archived from the original on 2015-03-31. Retrieved 2015-03-17.
- ^ "Detailed Description of Unified Format". GNU Diffutils (version 3.7, 7 January 2018). Archived from the original on 18 January 2020. Retrieved 29 January 2020.
- ^ van Rossum, Guido. "Unified Diff Format". All Things Pythonic. Archived from the original on 2019-12-25. Retrieved 2020-01-29.
- ^ 2.2.3 GNU diffutils 매뉴얼에서의 차이점 섹션 표시
- ^ Guido van Rossum의 Unified Diff 포맷, 2006년 6월 14일
- ^ http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403 2013-04-29 Wayback Machine 섹션 3.19에 보관
- ^ E. Myers (1986). "An O(ND) Difference Algorithm and Its Variations". Algorithmica. 1 (2): 251–266. CiteSeerX 10.1.1.4.6927. doi:10.1007/BF01840446. S2CID 6996809.
- ^ Webb Miller; Eugene W. Myers (1985). "A File Comparison Program". Software: Practice and Experience. 15 (11): 1025–1040. CiteSeerX 10.1.1.189.70. doi:10.1002/spe.4380151102. S2CID 15489614.
- ^ Esko Ukkonen (1985). "Algorithms for Approximate String Matching". Information and Control. 64 (1–3): 100–118. doi:10.1016/S0019-9958(85)80046-2.
- ^ GNU Diff 유틸리티 2015-03-16을 Wayback Machine에 보관했습니다.Free Software Foundation에 의해 제공되었습니다.무료 문서.프리 소스 코드
- ^ Waugh, Tim (12 June 2020). "twaugh/patchutils". GitHub. Archived from the original on 1 October 2020. Retrieved 28 June 2020.
- ^ "merge (GNU RCS 5.10.0)". gnu.org. Archived from the original on 18 September 2019. Retrieved 22 January 2021.
- ^ Moolenaar, Bram. "Vim documentation: diff". vimdoc.sourceforge.net. Archived from the original on 16 February 2020. Retrieved 1 May 2020.
The easiest way to start editing in diff mode is with the "vimdiff" command. This starts Vim as usual, and additionally sets up for viewing the differences between the arguments.
vimdiff file1 file2 [file3] [file4] [...file8]
This is equivalent to:vim -d file1 file2 [file3] [file4] [...file8]
- ^ a b Brabandt, Christian (1 December 2018). "The power of diff". Vimways. Archived from the original on 2 December 2018. Retrieved 1 May 2020.
- ^ "gnu.org". www.gnu.org. Archived from the original on 2020-08-11. Retrieved 2020-09-12.
- ^ "colordiff". www.colordiff.org. Archived from the original on 2018-06-14. Retrieved 2018-06-14.
- ^ Horwitz, Susan (June 1990). "Identifying the semantic and textual differences between two versions of a program". ACM SIGPLAN Notices. 25 (6): 234–245. CiteSeerX 10.1.1.49.3377. doi:10.1145/93548.93574. Archived from the original on 2010-06-12. Retrieved 2017-11-01.
- ^ Yang, Wuu (July 1991). "Identifying syntactic differences between two programs". Software: Practice and Experience. 21 (7): 739–755. CiteSeerX 10.1.1.13.9377. doi:10.1002/spe.4380210706. S2CID 10853673.
- ^ Grass. Cdiff: C++ 프로그램에 대해 Diff로 지정된 구문입니다.절차 USENIX C++ 회의, 181-193, 1992 페이지
- ^ Compare++, http://www.coodesoft.com/ Wayback Machine에서 2011-11-29 아카이브 완료
- ^ SmartDifferencer, http://www.semanticdesigns.com/Products/SmartDifferencer 2009-10-14 Wayback Machine 아카이브 완료
- ^ "xaizek/zograscope". GitHub. 26 May 2020. Archived from the original on 21 December 2020. Retrieved 27 June 2020.
- ^ DaisyDiff, https://code.google.com/p/daisydiff/ Wayback Machine에서 2015-03-19 아카이브 완료
- ^ xmldiffpatch, http://msdn.microsoft.com/en-us/library/aa302294.aspx Wayback Machine에서 2009-10-27 아카이브 완료
- ^ xmldiffmerge, http://www.alphaworks.ibm.com/tech/xmldiffmerge 2009-09-24 Wayback Machine에서 아카이브 완료
- ^ 체니, 오스틴Pretty Diff - 문서.http://prettydiff.com/documentation.php Wayback Machine에서 2012-07-31 아카이브 완료
- ^ a b dontcallmedotcom. "spiff". GitHub. Archived from the original on 2015-03-26. Retrieved 2013-06-16.
- ^ a b Nachbar, Daniel W (1999-12-01). "HP-UX Porting and Archiving". UK. Archived from the original on 2012-09-05. Retrieved 2013-06-13.
- ^ "SPIFF 1". 1988-02-02. Archived from the original on 2016-10-02. Retrieved 2013-06-16.
- ^ Nachbar, Daniel W (1988-02-02). "Man page". UK. Archived from the original on 2012-09-10. Retrieved 2013-06-16.
- ^ Davide (2009-09-28). "stackoverflow". Archived from the original on 2022-02-19. Retrieved 2013-06-16.
- ^ Libenzi, Davide. "LibXDiff". SourceForge FreshMeat. Archived from the original on 2020-07-01. Retrieved 2020-06-28.
- ^ Nugroho, Yusuf Sulistyo; Hata, Hideaki; Matsumoto, Kenichi (January 2020). "How different are different diff algorithms in Git?: Use --histogram for code changes". Empirical Software Engineering: 790–823. doi:10.1007/s10664-019-09772-z. S2CID 59608676.
- ^ "algorithm - What's the difference between 'git diff --patience' and 'git diff --histogram'?". Stack Overflow. Archived from the original on 2022-02-19. Retrieved 2020-06-28.
This does indeed show that histogram diff slightly beats Myers, while patience is much slower than the others.
추가 정보
- Paul Heckel (April 1978). "A technique for isolating differences between files". Communications of the ACM. 21 (4): 264–268. doi:10.1145/359460.359467. S2CID 207683976.파일 간의 차이를 분리하는 기술
- Hirschberg 선형 공간 미세화를 사용한 마이어스 SES/LCS 알고리즘의 일반적인 구현(C 소스 코드)
외부 링크
- The Single UNIX Specification, The Open Group 버전4 : 2개의 파일 비교– Shell and Utilities Reference,
- Plan 9 프로그래머 매뉴얼, 1권 –
- Inferno 일반 명령 설명서 –
- Curlie에서의 파일 비교
- JavaScript 구현