2014-02-20 4 views
0

브랜치에서 트렁크로 병합해야합니다. 이 두 개는 구조적으로 매우 다르며, 수십 가지의 나무 충돌과 50 개 정도의 텍스트 충돌이 있습니다. 이해할 수 있듯이, 나는이 병합에 대해 약간 긴장합니다.SVN : 충돌은 얼마나 신뢰할 수 있습니까?

충돌을 생성하는 기준이 정확히 무엇인지 궁금합니다. 함수 F가 비효율적이라고 가정 해 봅시다. 즉, 브랜치의 개발자가 헬퍼 함수 G를 다시 작성하고 트렁크의 개발자가 다른 방식으로 다시 작성했다고 가정 해 봅시다. 이 시나리오에서는 두 가지 방식으로 다시 작성된 함수 F에 대해 충돌이 발생 함을 이해합니다. 그러나 트렁크 버전에 속하지 않는 G 함수에 대해 충돌이 발생합니까? 아니면 함수 G가 실제로 적용되고 통지를 피할 수 있습니까? 병합으로 인해 발생할 수있는 이러한 종류의 스크램블 코드가 걱정됩니다.

답변

1

Subversion은 의미 충돌로부터 사용자를 보호 할 수 없습니다. 그 문제에 관해서 나는 할 수있는 버전 제어 시스템을 모른다.

구체적인 예로 응답이 다릅니다. G 기능이 충돌에 포함될 수 있습니다. 그러나 두 파일이 파일에서 충분히 멀리 떨어져 있고 G 코드가 근처에 변경되지 않으면 G 코드가 계속 병합 될 가능성이 있습니다.

물론 의미 충돌을 일으키는 다른 많은 방법이 있습니다. 버전 제어 시스템에 걸릴 수 있습니다. 예를 들어 누군가가 함수 F를 수정하여 새로운 매개 변수를 갖게된다고 말합니다. 다른 개발자는 다른 파일에 함수 F의 새로운 호출을 추가합니다. 개발자는 F를 변경하지 않거나 작업 복사본을 변경하지 않습니다. 의미 론적으로 그의 변경이 저장소의 기존 코드와 충돌하더라도 개발자가 새로운 함수 F를 적용하려고 할 때 충돌이 없습니다. 오늘날 우리가 사용하는 버전 제어 시스템은 팀 커뮤니케이션, 코드 검토 및 테스트입니다.

병합을 수행하는 도구가 줄을 기준으로하는 충돌뿐만 아니라 언어를 이해하는 경우이 같은 것을 피할 수있는 유일한 방법이 있습니다. 이것은 물론 버전 관리 도구가 함께 사용하는 모든 언어를 지원해야 함을 의미합니다. 그러면 범용 도구로 사용하기가 훨씬 수월합니다.

그러나 의미 적으로 인식 할 수있는 병합 도구가 한 가지 구현되어 있습니다. SemanticMerge은 C# 및 Java에서이를 지원합니다. Subversion은 외부 병합 도구를 지원하며 일부 사용자가이 도구를 사용하여 이러한 종류의 사례를 처리하는 것으로 알고 있습니다.

실제로 이러한 문제는 실제로 자주 발생하지 않습니다.

+0

답변 해 주셔서 감사합니다. – ktm5124

관련 문제