문제

나는 Eclipse에서 CVS 병합을 수행하는 방법에 꽤 익숙하고 Subclipse와 Subversive가 SVN 저장소에서 작동하는 방식에 만족하지만 병합을 올바르게 수행하는 방법을 잘 모르겠습니다.

병합을 수행할 때 CVS에서 익숙했던 것처럼 병합에서 교체될 이전 파일을 덮어쓰는 대신 병합된 파일을 내 프로젝트의 별도 디렉터리에 고정하려는 것 같습니다.

질문은 Subclipse 또는 Subversive에 국한되지 않습니다.

도와 주셔서 감사합니다!

도움이 되었습니까?

해결책

Subversion에 대한 기본 액세스로 Eclipse 플러그인을 사용하지 않는 것이 좋습니다.

Windows에서 개발하는 경우 TortoiseSVN은 Subversion 액세스에 대해 제가 본 최고의 프로그램입니다.병합하려는 디렉토리를 탐색하여 마우스 오른쪽 버튼으로 클릭하고 Tortoise SVN 병합 옵션을 사용하십시오.비대화형 병합을 가정하면 충돌이 발생하면 충돌이 발생한 각 파일을 살펴보고 충돌을 해결된 것으로 표시하기 전에 충돌을 편집해야 합니다.이 프로세스에는 로컬 저장소 복사본(병합 전 .svn에 저장된 내용), 로컬 복사본(모든 변경 사항 포함) 및 저장소에서 오는 복사본을 표시하는 KDiff3이라는 프로그램을 권장합니다. 병합 결과를 쉽게 확인하고 필요한 경우 직접 수정할 수도 있습니다.또한 여러 가지 사소한 충돌을 자동으로 처리합니다.

KDiff3은 이식 가능하고 TortoiseSVN은 Windows 셸 확장이므로 다른 환경을 사용하는 경우 SVN을 사용하여 병합하려고 합니다.하지만 그게 훨씬 더 고통스러울 거예요 :)

다른 팁

전체 분기를 트렁크로 병합

  1. Branch 프로젝트 기록을 검사하여 해당 브랜치를 가져온 버전을 확인하세요.

    • 기본적으로 Eclipse 팀 "기록"에는 지난 25개의 개정판만 표시되므로 해당 보기에서 "모두 표시"라는 레이블이 붙은 버튼을 클릭해야 합니다.
    • "모두 표시"라고 말하면 분기 날짜 이후로 돌아가서 트렁크에 대한 모든 기록도 표시되므로 분기한 댓글을 검색해야 합니다.
    • 메모:동일한 작업에 Tortise SVN을 사용하는 경우(브랜치로 이동하여 "로그 표시" 선택) 브랜치 기록만 표시되므로 브랜치가 시작된 위치를 정확히 알 수 있습니다.
  2. 이제 82517이 지점 기록의 첫 번째 버전 ID라는 것을 알았습니다.따라서 82517 이후의 모든 버전의 브랜치에는 트렁크에 병합하고 싶은 변경 사항이 있습니다.

  3. 이제 Eclipse 작업공간의 "트렁크" 프로젝트로 이동하여 "오른쪽 클릭 - 팀 - 병합"을 선택하십시오.

  4. 기본 보기는 1개의 URL 병합입니다.

    • 병합하려는 지점의 URL을 선택하십시오.
    • 개정에서 "모두"를 선택하십시오.
    • 확인을 누르세요
  5. 충돌을 해결하기 위해 "팀 동기화" 관점(그렇지 않은 경우 직접 이동해야 함)으로 이동합니다(아래 참조).

더 많은 브랜치 변경 사항을 트렁크에 다시 병합

  1. 트렁크 프로젝트 기록을 검사하여 마지막으로 트렁크에 병합한 시간을 확인합니다(이 내용에 대해 주석을 달았어야 합니다).

    • 논의를 위해 이 버전이 82517이라고 가정해 보겠습니다.
  2. 이제 브랜치의 82517보다 큰 버전은 트렁크에 병합해야 한다는 것을 알고 있습니다.

  3. 이제 Eclipse 작업공간의 "트렁크" 프로젝트로 이동하여 "오른쪽 클릭 - 팀 - 병합"을 선택하십시오.

  4. 기본 보기는 1개의 URL 병합입니다.

    • 병합하려는 지점의 URL을 선택하십시오.
    • 개정 아래에서 "개정" 라디오 버튼을 선택하고 "찾아보기"를 클릭하세요.
    • 그러면 최신 25개의 분기 개정 목록이 열립니다.
    • 82517보다 큰 번호를 가진 모든 개정판을 선택하십시오.
    • 확인을 누르세요. (라디오 버튼 옆의 입력 필드에 개정 목록이 표시되어야 합니다.)
    • 확인을 누르세요
  5. 충돌을 해결하기 위해 "팀 동기화" 관점(그렇지 않은 경우 직접 이동해야 함)으로 이동합니다(아래 참조).

갈등 해결

  1. "팀 동기화" 관점에 있어야 합니다.이는 새로운 파일과 충돌이 있는 파일을 볼 수 있는 커밋 목적의 일반적인 동기화처럼 보입니다.

  2. 충돌이 있는 모든 파일에 대해 "오른쪽 클릭 - 충돌 편집"을 선택하십시오. (파일을 두 번 클릭하지 마십시오. 커밋 diff 버전 도구가 나타납니다. 이는 매우 다릅니다.)

    • "<<<<<<< .working" 또는 ">>>>>>> .merge-right.r84513"과 같은 내용이 표시되면 잘못된 편집 모드에 있는 것입니다.
  3. 해당 파일의 모든 충돌을 해결한 후에는 파일에 "병합된 것으로 표시"하라고 지시하세요.

  4. 모든 파일에 충돌이 없으면 Eclipse 프로젝트를 동기화하고 파일을 SVN에 커밋할 수 있습니다.

나는 일반적으로 두 분기를 모두 확인한 다음 두 소스 트리를 동기화하는 것과 유사한 비교를 수행하는 서로 비교 옵션을 사용합니다.변경 사항을 하나의 브랜치에 통합한 후 리포지토리에 다시 커밋할 수 있습니다.

Eclipse 통합을 사용하면 완벽하게 작동합니다.

CVS의 주요 변경 사항은 분기의 델타만 병합한다는 것입니다. 즉, 한 개정판에서 다른 개정판으로의 변경 사항만 병합할 수 있습니다.즉, 어떻게든 올바른 시작 개정을 추적해야 합니다(svn 1.5 병합 기록이 없는 한).

올바르게 이해했다면 비교 편집기를 사용하여 변경 사항을 올바르게 적용하는 것은 귀하에게 달려 있습니다.

첫째, Eclipse에서 파일을 볼 때 ">>>>>" 등이 파일에 표시된다면 이는 아마도 적절한 비교 편집기를 사용하여 파일을 보고 있지 않다는 의미일 수 있습니다.프로젝트 보기 또는 동기화 보기에서 파일을 마우스 오른쪽 버튼으로 클릭하고 "충돌 편집"을 선택하면 충돌하는 영역을 텍스트가 아닌 그래픽으로 표시하는 비교 편집기를 불러올 수 있습니다."충돌 편집"에 나타나는 비교 편집기는 동기화 보기에서 파일을 두 번 클릭할 때 표시되는 것과 다릅니다. doublieclick 비교 편집기는 현재 파일과 존재 방식 간의 차이점을 보여줍니다. 마지막으로 체크아웃하거나 업데이트할 때 충돌 편집 비교 대화 상자에는 두 가지 변경 소스 간의 차이점이 표시됩니다(예: 병합한 변경 사항과 병합하기 전에 작업 공간에 존재했던 변경 사항).

둘째, 병합 변경을 허용한 모든 파일이 충돌이 있는 것으로 잘못 표시되도록 하는 Eclipse 파괴성 플러그인의 일부 버전에 있는 버그에 대해 알고 싶을 수도 있습니다.이 버그는 수정되었으나 많은 사람들이 아직 수정 사항을 업데이트하지 않은 것 같습니다.자세한 내용은 여기를 참조하세요:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=312585

svn을 사용하면 수정된 트리를 깨끗한 상태로 되돌리는 것이 매우 쉽다는 것을 기억하십시오.병합 대상 브랜치에 깨끗한 작업 공간을 두고 병합 명령을 실행하여 병합 소스 브랜치에서 수정 사항을 가져온 다음 작업 공간을 동기화하면 모든 병합 수정 파일과 충돌을 보여주는 일반적인 Eclipse 비교 창이 표시됩니다.

어떤 이유로 충돌을 해결할 수 없는 경우 프로젝트를 svn revert하고 깨끗한 상태로 되돌릴 수 있습니다. 그렇지 않으면 병합을 수행하고 완료되면 커밋할 수 있습니다.커밋할 필요는 없습니다. 충돌 처리가 끝나면 개발 보기로 돌아가 코드가 컴파일되는지 확인하고 단위 테스트 등을 실행한 다음 다시 동기화하고 커밋할 수 있습니다(충돌이 로컬에서 발생하면). 그들은 돌아오지 않을 것이라고 결정했습니다)

지난번에 보니 subclipse merge 명령을 사용하면 병합된 파일을 덮어쓰고(충돌 마커를 사용하여 충돌 영역을 표시함) 병합의 원본 왼쪽과 오른쪽을 같은 위치에 배치합니다.다른 디렉터리에 아무 것도 넣어서는 안 됩니다.

경험상 단일 커밋에서 모든 병합 수정 사항을 커밋하고 필요한 경우 나중에 병합을 롤백할 수 있도록 커밋에 병합 수정 사항만 포함하는 것이 가장 좋습니다.

openCollabNet의 subclipse용 병합 도구는 매우 깔끔합니다.사용할 수 있는 병합 유형이 많이 있으며 원활하게 병합을 수행했습니다.난 그것을 추천 해.

Eclipse에서 뷰를 동기화하는 데 부족한 한 가지는 체크인 기능입니다.팀 동기화 보기에서는 모든 변경 사항을 보고 충돌을 해결할 수 있으므로 Java 보기로 돌아가서 체크인하는 대신 바로 그곳에서 체크인하는 것이 직관적일 것입니다.

외부 병합 편집기(KDIFF3)에서 병합하고 Eclipse에서 병합을 시작하는 방법을 찾고 있었기 때문에 여기에 왔습니다.위에 제공된 답변이 만족스럽지 않았습니다.따라서 eclipse에서 SVN용 병합 및 diff 편집기로 kdiff3을 구성하는 방법은 다음과 같습니다.

Windows로 이동 -> 환경 설정 → 팀 -> svn-> diff viewer 새 구성 추가 (추가 버튼) :확장자 또는 MIME 유형:* - 다른 편집자에 대해 다른 MIME 유형을 지정할 수 있기를 원한다면 alquantor에서는 그럴 필요가 없었습니다.

차이점:프로그램 경로 C:\Program Files\KDiff3\kdiff3.exe(또는 병합 편집기가 있는 곳이면 어디든지 - Windows 경로를 확인하세요. 댓글에 Linux 버전을 추가하거나 이 답변을 편집하세요.)

인수:${base} ${mine} ${theirs}

병합:프로그램 경로 C:\Program Files\KDiff3\kdiff3.exe

인수:${base} ${mine} ${theirs} -o ${merged}

이것은 아마도 다른 병합 편집기에서도 잘 작동할 것입니다. 하지만 인수 구문이 다릅니다(알고 알려주세요 :)).

diff 보기의 경우 병합 및 비교->foo의 사용법은 평소와 같습니다(팀->편집 충돌).

건배

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top