.NET 용 텍스트 비교 / 병합 엔진이 있습니까? [닫은]


108

요구 사항 :

  • 무료, 가급적 오픈 소스
  • .NET 관리 언어 중 하나로 구현

Google은 다음을 발견했습니다.

편집하다:

앱은없고 라이브러리 만 있습니다.


5
이 스레드는 한동안 트래 피킹되지 않았지만 어떤 오픈 소스 diff 프로젝트로 끝났습니까? 나는 똑같은 것을 찾고 있으며 나열된 도서관 외에는 많이 찾지 못했습니다 (2 년 동안 거의 변하지 않았습니다 ...).
marr75 2010-08-02

1
marr75 : 여기 있습니다 [Cheeso / Brian에 대한 크레딧 (아래 답변 참조)] : " Google Diff / Patch / Merge 코드 가 C #으로 포팅되었습니다. COM 구성 요소는 여전히 작동하지만 .NET에서 오는 경우 .NET 포트를 직접 사용하고 싶습니다. "
Dave

1
이 답변이 매우 도움이되었으며 매우 구체적인 프로그래밍 문제에 대한 엔진 또는 알고리즘을 요청하는 데 동의하며 다시 열기를 위해 지명했습니다.
Mladen Mihajlovic 2019 년

답변:


88

Google의 Diff / Patch / Match를 사용하는 COM 구성 요소를 가져올 수 있습니다 . .NET에서 작동합니다.

업데이트, 2010 년 10 월 17 일 : Google Diff / Patch / Merge 코드 가 C #으로 포팅되었습니다. COM 구성 요소는 여전히 작동하지만 .NET에서 온 경우 .NET 포트를 직접 사용하고 싶을 것입니다.


14
이것이 C #으로 포팅 된 것 같습니다 (완전 관리 형 C # 구현). C # 버전은 Google 페이지의 다운로드 섹션에서 사용할 수 있습니다. 답변의 "COM"비트를 편집 할 수 있습니다. 이 구현 (적어도 python / js 버전)은 Google 문서와 같이 널리 사용되는 일부 프로젝트에서 사용되기 때문에 좋습니다.
Brian Low

브라이언, 고마워. 답변을 업데이트했습니다.
Cheeso

6
2015 년에 매우 유용한 답변입니다. 삭제하지 마십시오. 이러한 유형의 일이 허용되면 사이트가 더 유용 할 것입니다 (읽기 : 다른 사이트에서이를 허용 할 것입니다. 그리고 이와 같은 유용한 질문이 있으면 SO를 전문가 교환으로 전환하십시오. SO FAQ의 잘못된 가설에 따라 이유 때문에 계속 폐쇄됩니다).
FastAl

1
나는 DiffPlex를 추천 합니다 . 그것은이다 netstandard1.0매우 가벼운 무게. 다음 RichTextBox과 같이 사용하여 WPF 애플리케이션에 쉽게 임베드 할 수 있습니다 . github.com/halllo/WpfDiff
halllo

1
: C보다 번호 -centric 포트 (등의 명칭, 케이싱)에있다 github.com/pocketberserker/Diff.Match.Patch nuget 지원 :Install-Package Diff.Match.Patch
커크 WOLL

21

Codeproject의 "Generic-Reusable Diff Algorithm in C #"이 diff / patch / merge를위한 .NET-Engine으로 찾을 수있는 가장 좋은 방법이라고 생각합니다. 나는 그것으로 혼자서 프로젝트를 만들었고 대부분의 시나리오에서 내 요구에 맞습니다. 알고리즘이 패치 파일을 필요한 것보다 크게 만들었을 때 최악의 시나리오가 한두 가지 있습니다. 그러나 대부분의 경우 저에게 잘 작동합니다 (> 30MB 크기의 텍스트 파일).

저는 현재 다른 Codeproject-Project를 여기에서 테스트하고 있습니다 : http://www.codeproject.com/KB/applications/patch.aspx 패치를 위해 Microsoft의 DLL을 사용하고 있으므로 흥미로워 보입니다. 그러나 이러한 DLL은 관리되지 않으며이 프로젝트는 일종의 래퍼 일뿐입니다. 하지만 도움이 될 수 있습니다

편집 : 그냥 다른 프로젝트, 발견 DiffPlex : http://diffplex.codeplex.com/ 그건 실버 라이트와 HTML 사랑하는 시청자 모두와 .NET diffing의 라이브러리의 조합을 . 거기 에서 언급했듯이 DiffPlex는 CodePlex가 파일의 차이를 생성하는 데 활용하는 라이브러리입니다.


정보 주셔서 감사합니다! 하지만 더 정교한 솔루션을 찾고 싶습니다. 난 그냥 아무도 산뜻한 약간의 lib 디렉토리를 만들어 믿을 수 없어
아쿠

1
더 나은 도서관을 찾으면 알려주세요. (또는 적어도 나에게 g ) 꽤 오랫동안 제 자신을 검색했지만 이미 언급 한 것 외에는 아무것도 찾지 못했습니다.
Anheledir

1
Diffplex는 이동했습니다 github.com/mmanela/diffplex
codingdave


5

지금까지의 답변 (GitSharp 참조 제외)은 3 방향 병합을 처리하지 않으므로 최근에 Tony Garnock-Jones의 javascript diff3 구현 ( Hunt 및 McIlroy 1976 기반 의 싱크로트론 프로젝트 에서)을 이식 한 사람에게 도움이 될 수 있습니다. C #으로.

diff 및 3 방향 병합 방법의 단순한 단일 파일 포트이지만 표준 알고리즘이며 지금까지 저에게 매우 잘 작동합니다 : https://gist.github.com/2633407


gist.github 링크를 해결할 수 없습니다. 3 방향 병합 방법이 이와 같은 도구에 통합 될 수 있는지, 다른 결과를 반환하는지 또는 실제로 이미 구현 된 Myers Diff 알고리즘 과 동일한 지 궁금합니다.
user8276908
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.