2009-03-04 1 views
2

필자는 회사 제품의 구성 파일을 서로 비교하고 병합 할 수있는 도구를 작성해야했습니다. 구성은 XML 또는 URL 인코딩 문자열로 저장됩니다. 나는이 diff를 할 수있는 상용 소프트웨어와 호환되는 라이센스가있는 오픈 소스 라이브러리를 찾고 있습니다. 우리의 응용 프로그램은 C++로 작성 되었기 때문에 C++ 라이브러리가 가장 좋았지 만 COM을 통해 C++에 노출시키는 래퍼를 작성할 수 있으므로 C# 전용 라이브러리를 살펴볼 수 있습니다. 3 방향 diff가 이상적이지만 양방향은 허용됩니다. XML을 이해하고 있다면 XML 노드가 문서를 변경하지 않고 재정렬 될 수 있기 때문에 더하기도 될 것입니다. 모든 도서관 제안? 필자의 형식에 대한 의미 론적 지식을 제공하기 위해 diff 도구를 직접 작성해야할까요?diffs를 수행하기위한 라이브러리

this similar question 덕분에, 나는 이미 this google library을 발견했는데, 정말 좋았지 만, 나는 여전히 다른 옵션을 찾고 있습니다. 또한 diff 형식을 HTML 형식으로 출력 할 수있는 것으로 나타났습니다 (실제로 발견하기 전에 존재하지 않는 <ins><del> 태그 사용). 이는 매우 편리 할 수 ​​있지만 통합 된 diff 일뿐입니다. 결과를 웹 브라우저에 표시해야하고 브라우저에서 병합을 수행하기위한 인터페이스를 구축해야 할 것입니다. 도서관이 이러한 작업에 도움이 될 것으로 기대하지는 않지만,이를 위에 구축하는 형식으로 출력물을 만들어야합니다. 나는 현재 TortoiseMerge (사이드 바이 사이드 diffs, 통일되지 않음) 라인을 따라 뭔가를 구상 중이지만, 브라우저 기반을 제외하고는. 이것을 선물하는 방법에 대한 모든 팁/트릭/디자인 아이디어는 높이 평가 될 것입니다.

답변

1

XML을 diffing하려면 먼저 알파벳순으로 모든 요소를 ​​정렬 한 다음 원본 문서를 나타내는 토큰 스트림을 생성하고 원본 서식과는 독립적이어야한다고 제안합니다. diff를 실행 한 후 결과를 구문 분석하여 추가/제거 된 항목을 포함하는 트리를 가져옵니다.

3

Subversion은 libsvn_difflibsvn_delta과 함께 Apache Software License로 사용이 허가됩니다.

2

Here은 작성자가 반 구조화 된 데이터를 호출하는 것을 diff 할 수있는 C++ 라이브러리입니다. 그것은 HTML과 XML을 잘 처리합니다. 데이터가 XML이기 때문에 일반 텍스트 diff 대신이 코드를 사용하는 것이 좋습니다. 이것은 파일이 기계로 생성 될 경우 특히 그렇습니다.

현재이 라이브러리를 사용하여 Visual Studio 프로젝트 파일을 비교하는 도구를 작성하려고합니다. 이것들은 기본적으로 XML 파일이며 Winmerge와 같은 평범한 diff 도구를 사용하는 것은 너무 고통 스럽습니다. Visual Studio가 미친 재정렬을 통해 전체 파일을 거의 망가 뜨 렸기 때문입니다. 아이디어는 문제를 해결하기 위해 일종의 구조화 된 diff를 수행하는 것입니다.