아래 그림과 같은 형태로 SVN으로 중앙관리를 하며, 
각 프로젝트 리더가 일정한 수의 프로그래머들과 Mercurial로 분산 협업 후 최종 SVN 중앙 커밋을 한다고 가정함.











1. 프로젝트 리더


- 프로젝트 리더는 해당 프로젝트 진행에서 소스를 관리하고 마지막에 SVN 커밋을 하는 사람을 뜻함.
- 프로젝트 리더는 나머지 프로젝트 참가 프로그래머들에게 저장소의 역할을 함.






1-1. 저장소 공개
- 프로젝트 리더는 서버가 되어 저장소를 공개해야 함.
  1. SVN CheckOut
  2. SVN으로 버전관리되고 있는 폴더에 Mercurial 저장소 생성
  3. 웹서버를 실행시켜 접근할 수 있도록 함



1-2. 소스관리
- 프로젝트 리더는 자신이 작업한 내용은 물론, 자신에게 push된 소스도 포함해서 관리해야 함.
- push된 내용을 자신의 메인 repository에 반영하기 위해, 저장소 폴더에서 오른쪽 클릭 > 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를 통해 브랜치 된 시점과 병합된 시점 등을 한 눈에 확인 가능.







Posted by bloodguy
,