SVN 병합 충돌은 어떻게 해결할까
update 중 충돌이 나면 SVN이 만들어 두는 .mine·.rNNN 파일이 각각 무엇인지 짚고, mine-full·theirs-full·수동 편집 세 갈래로 해결한 뒤 resolved로 닫는 절차를 정리했다.
작성날짜: 25.02.23
상황
flowchart TD
A[파일 상태] --> B{충돌 발생}
B -->|충돌 발생| C[충돌 파일 생성]
subgraph 생성되는_파일
D[".mine 파일<br/>📄 내 작업 내용"]
E[".r1 파일<br/>📄 원본 파일"]
F[".r2 파일<br/>📄 서버 변경 내용"]
G["충돌 마커가 있는<br/>작업 파일<br/>❌ 충돌 표시"]
end
C --> D
C --> E
C --> F
C --> G
G --> H{해결 방법 선택}
H -->|방법 1| I["내 변경 사용<br/>(mine-full)"]
H -->|방법 2| J["서버 변경 사용<br/>(theirs-full)"]
H -->|방법 3| K["수동 편집<br/>👨💻"]
I --> L[충돌 해결 완료]
J --> L
K --> L
L --> M["svn resolved<br/>명령어 실행"]
M --> N["commit<br/>수행"]
style 생성되는_파일 fill:#f5f5ff,stroke:#333,stroke-width:2px
- update 시 로컬 변경사항과 서버의 변경사항이 충돌
- 동일 파일의 동일 부분을 여러 사용자가 수정했을 때 발생
- commit 시도 시 충돌이 발생하면 commit이 거부됨
충돌 시 생성되는 파일들
예시: example.txt 파일에 충돌이 발생한 경우
- example.txt.mine : 내가 수정한 버전
- example.txt.r1234 : 원본 파일 (베이스 리비전)
- example.txt.r1235 : 서버에서 변경된 버전
- example.txt : 충돌 마커가 포함된 작업 파일
실제 파일 모습
충돌 마커 형태
<<<<<<< .mine
내가 수정한 내용
=======
서버에서 변경된 내용
>>>>>>> .r1235
충돌 해결 방법 (3)
1. 명령어를 통한 해결
# 내 변경사항 사용
svn resolve --accept mine-full example.txt
# 서버 변경사항 사용
svn resolve --accept theirs-full example.txt
# 작업 복사본 변경사항 사용
svn resolve --accept working example.txt
2. 수동 해결 절차
- 충돌 파일 열기
- 충돌 마커 찾기
- 코드 수정
- 충돌 마커 제거
- 해결 표시: svn resolved example.txt
- 변경사항 커밋
3. TortoiseSVN을 사용한 해결 (Windows)
- 충돌 파일 우클릭
- TortoiseSVN → Edit Conflicts 선택
- 그래픽 도구로 충돌 해결
- 해결 완료 후 Mark as Resolved 클릭
👨🌾 충돌 예방 팁
- 작업 전 항상
update수행
- svn update
- 자주
commit하기
- 작은 단위로 자주 커밋하면 충돌 가능성 감소
- 파일 잠금 사용
# 작업 복사본 상태 확인
svn status
# 충돌 파일 확인
svn status | grep "^C"
- 상태 확인
# 작업 복사본 상태 확인
svn status
# 충돌 파일 확인
svn status | grep "^C"
주의 사항
충돌 해결 전에 반드시 백업
해결 후 테스트 필수
불확실할 경우 팀원과 상의
binary 파일 충돌은 수동 병합 불가능