출처: http://bloodguy.tistory.com/entry/Mercurial-TortoiseHG를-이용한-버전관리
http://bloodguy.tistory.com/entry/Mercurial-TortoiseHG-conflict-해결법
아래 그림과 같은 형태로 SVN으로 중앙관리를 하며, 각 프로젝트 리더가 일정한 수의 프로그래머들과
Mercurial로 분산 협업 후 최종 SVN 중앙 커밋을 한다고 가정함.
1. 프로젝트 리더
- 프로젝트 리더는 해당 프로젝트 진행에서 소스를 관리하고 마지막에 SVN 커밋을 하는 사람을 뜻함.
- 프로젝트 리더는 나머지 프로젝트 참가 프로그래머들에게 저장소의 역할을 함.
1-1. 저장소 공개
- 프로젝트 리더는 서버가 되어 저장소를 공개해야 함.
1. SVN CheckOut
2. SVN으로 버전관리되고 있는 폴더에 Mercurial 저장소 생성
3. 웹서버를 실행시켜 접근할 수 있도록 함
1-2. 소스관리
- 프로젝트 리더는 자신이 작업한 내용은 물론, 자신에게 push된 소스도 포함해서 관리해야 함.
- push된 내용을 자신의 메인 repository에 반영하기 위해, 저장소 폴더에서
오른쪽 클릭 > TortoiseHG > Update To Revision 선택
오른쪽 클릭 > TortoiseHG > Update To Revision 선택
- = Current Branch Tip = 을 선택 (현재 브랜치의 최신 리비전으로 업데이트 한다는 뜻)
- update를 진행. 아래의 그림은 업데이트 된 내용이 없는 것이므로, 업데이트를 진행하다가
충돌이 났을 경우 conflict 해결에 관한 아래 페이지를 참조.
-> http://bloodguy.tistory.com/604 (push 할 때의 해결법이지만 대동소이함)
1-3. SVN commit
- 개발이 완료되었을 경우 프로젝트 리더가 SVN commit 을 함.
2. 일반 프로그래머
- commit한 소스는 주기적으로 프로젝트 리더에게 push 하여 소스관리.
- 주기적으로 pull->update를 통해 메인 저장소와의 갭을 줄이면서 작업하는 게 좋음.
(상단 맨처음 그림에서 노란색 상자가 일반 프로그래머를 뜻함)
2-1. Clone
- 프로젝트 리더의 메인저장소로부터 소스를 받아오는 과정 (=SVN CheckOut)
- 소스저장소로 사용하고자 하는 폴더에서 오른쪽 클릭 > TortoiseHG > Clone a Repository 선택
- 받아 올 저장소의 경로를 입력, 저장할 로컬 path 입력하여 Clone 버튼 누름
- 어느 리비전을 받아올 것인가 등의 옵션사항도 지정 가능함.
- Clone이 실행된 결과 화면
2-2. Pull -> Update
- 메인저장소로부터 최신버전의 소스를 받아와 동기화를 하는 과정.
- 작업 시작 전에 Pull -> Update 를 하여 충돌을 방지하는 것이 좋음.
- 저장소 폴더에서 오른쪽 클릭 > TortoiseHG > Synchronize 선택.
- 저장소 경로를 설정하고 Pull 버튼을 눌러 실행.
- Incoming 을 실행하여 바뀔 내용을 미리 알아보고 대책을 세울 수도 있음.
- 우측의 Post pull operation 은 pull 완료 후 실행될 명령을 지정할 수 있음.
- pull 을 했어도 아직 로컬 저장소에 반영은 되지 않은 상태이므로 Update를 해야함.
- 저장소 폴더에서 오른쪽 클릭 > TortoiseHG > Update To Revision 선택.
- = Current Branch Tip = 을 선택 (현재 브랜치의 최신 리비전으로 업데이트 한다는 뜻)
- conflict 가 났을 경우 merge 툴을 지정했다면 merge 툴이 뜸.
- conflict 해결에 관한 자세한 내용은 다음 페이지 참조 -> http://bloodguy.tistory.com/604
2-3. commit
- 로컬에서 작업 후 원할 때 commit을 하면 됨.
- commit 했을 때 메인저장소에 반영되는 게 아니라 push 할 때 반영됨.
- 소스수정, 저장 후 commit
- 저장소 폴더에서 오른쪽 클릭 > TortoiseHG > Commit 선택
- commit 할 파일 선택, log message 작성 후 Commit 버튼 누름 (우측 하단에 diff 정보 확인 가능)
- commit 결과 화면
- 저장소 로그에는 변경사항이 없음을 확인할 수 있음
2-4. Push
- commit을 한 다음 적당한 시기에 메인저장소로 push를 해야 반영이 가능함.
- push 하기 전에 pull 을 먼저 해서 필요하다면 merge를 통해 충돌을 방지하는 식의
작업 프로세스를 하는 게 좋음.
- 저장소 폴더에서 오른쪽 클릭 > TortoiseHG > Synchronize 선택
- Synchronize 화면
- Incoming : 원격저장소와 로컬저장소의 변경사항을 확인할 수 있음
- Pull : 원격저장소로부터 변경사항을 가져옴
- Outgoing : Push할 경우 원격저장소로 Push될 변경파일 확인 가능
- Push : 원격저장소로 변경된 파일을 보냄.
- Post pull operation : pull 실행 후 자동으로 실행할 동작 선택
- Push 할 원격저장소의 경로를 지정한 후 Push 버튼 누름.
- Push가 완료된 결과 화면.
- 만약 충돌이 났을 경우 다음 페이지 참조 -> http://bloodguy.tistory.com/604
- Push가 완료되면 저장소 로그에 반영됨을 확인.
- graph를 통해 브랜치 된 시점과 병합된 시점 등을 한 눈에 확인 가능.
1. 3-way merge tool 설정
- merge에 사용할 3-way merge tool 설정.
- TortoiseHG를 설치하면 같이 설치되는 KDiff3는 한글지원이 제대로 안되어서 DiffMerge로 설정.
DiffMerge
- 다운로드 받은 DiffMerge.exe 파일을 TortoiseHG가 설치된 폴더에 복사.
(만약 인스톨 했다면 설치경로에 있는 DiffMerge.exe 를 복사하거나, 시스템 환경변수로 DiffMerge
설치경로를 지정해 주면 됨)
- TortoiseHG의 3-way Merge Tool을 DiffMerge로 설정.
- Context Menu에서 TortoiseHG > Repository Settings 선택
(만약 전체 설정으로 하고 싶으면 Global Settings 선택)
- 3-way Merge Tool 에서 DiffMerge 로 설정
2. push 시도
- commit 후 push 를 해야 반영이 됨로 push 를 시도해야 비로소 conflict 여부를 알 수 있음.
그 전에 미리 pull을 해서 merge를 해둘 수도 있음.
- 아래는 push 했을 때 conflict 에러가 났음.
3. pull
- conflict 가 났을 시 pull 을 해서 merge 시도 준비
- 하단에 보이는 'View pulled revisions' 메뉴를 통해 로그창을 띄움
4. log 확인 및 merge 준비
- log 창에서 diff 정보를 확인하고 merge 시작
- log 창에서 오른쪽 클릭을 해서 나오는 메뉴 중 merge with 선택. (3-way merge를 시도)
- 선택하면 merge할 리비전 간 파일의 정보가 나옴.
- 우선 자동으로 Merge를 실행한 결과를 보여줌.
- base가 N-1 리비전, local이 현재 작업한 파일, other가 직전에 커밋된 파일임.
- 충돌이 난 부분은 빨간색, 일치하는 부분은 초록색 등 색으로 구분해가며 Merge.
- 우측 상단의 두개의 아이콘은 모양 그대로, base의 내용을 적용시키거나 other의 내용을 적용시키는
아이콘.
- Merge를 하고 파일을 저장한 다음 DiffMerge 프로그램을 종료시키면 일단 Merge 완료.
5. merge 완료
- merge 가 완료되었다면 다시 commit (직접 해도 되고 아래처럼 merge 창을 통해 해도 됨)
- commit 이 완료되면 다시 push 시도.
- push가 끝난 후 graph를 보면 아래처럼 conflict 가 나서 잠시 branch가 나왔다가 merge를 통해
다시 메인으로 병합되는 것을 확인할 수 있음.
'IT_Programming > Dev Tools' 카테고리의 다른 글
Android Studio Gradle build (0) | 2013.11.07 |
---|---|
ProGuard keep Generic (0) | 2013.07.16 |
[펌] Mercurial + TortoiseHG 기초 메뉴얼 (0) | 2013.07.04 |
Visual Studio 2008 단축키 및 단축키 변경 (0) | 2012.06.05 |
[펌] Subversion 사용 HOWTO (0) | 2012.06.01 |