4. 처음에는 여러분의 컴퓨터에 아무것도 없어요!
정말이에요!
여러분의 컴퓨터! SVN 서버 컴퓨터!
a.txt
b.txt
c.txt
d.txt
5. 제일 먼저 할 것은 ‘체크아웃(checkout)’
서버로부터 파일들을 가져와요
여러분의 컴퓨터! SVN 서버 컴퓨터!
체크아웃
파일들을
a.txt
b.txt
c.txt
d.txt
➟ a.txt
b.txt
c.txt
d.txt
똑같이
내려받았어요
6. 이제 파일들을 마음대로 할 수 있어요!
여러분의 컴퓨터! SVN 서버 컴퓨터!
이름 변경! ☞ jay.txt a.txt
삭제! ☞ b.txt b.txt
내용 수정! ☞ c.txt c.txt
d.txt d.txt
파일 추가! ☞ e.txt 그런데
SVN 서버는
아직 바뀐게
없네요
7. 이제 작업이 끝났어요! ‘커밋(commit)’ 합니다!
내 파일들을 서버로 보내요
여러분의 컴퓨터! SVN 서버 컴퓨터!
커밋
jay.txt
c.txt
d.txt
e.txt
➟ jay.txt
c.txt
d.txt
e.txt
드디어 내
컴퓨터와 서버가
똑같아졌어요
8. 앗, 그런데 갑자기 누군가가 나타났어요!
그리고 자기가 바꾼 파일을 서버로 커밋했어요!
여러분의 컴퓨터!
jay.txt SVN 서버 컴퓨터!
c.txt
d.txt
e.txt jay.txt
c.txt
Juno의 컴퓨터!
커밋 snsd.txt
➟
jay.txt e.txt
c.txt
snsd.txt
e.txt
9. 어떡하죠? 서로 또 달라졌어요.
여러분의 컴퓨터! SVN 서버 컴퓨터!
jay.txt jay.txt
c.txt c.txt
d.txt snsd.txt
e.txt e.txt
10. 최신 상태를 유지하려면 ‘업데이트(update)’
체크아웃은 처음에만, 업데이트는 수시로!
여러분의 컴퓨터! SVN 서버 컴퓨터!
업데이트
다시 서버와
jay.txt
c.txt
snsd.txt
e.txt
➟ jay.txt
c.txt
snsd.txt
e.txt
똑같아졌어요
11. 아, 그런데 뭔가 수정할 게 생겼어요!
여러분의 컴퓨터! SVN 서버 컴퓨터!
jay.txt jay.txt
소녀시대가
9명이라고 잘못 c.txt c.txt
적혀 있어요. snsd.txt snsd.txt
8명으로 정정
e.txt e.txt
합니다.
12. 수정한걸 취소할땐 ‘되돌리기(revert)’
여러분의 컴퓨터! SVN 서버 컴퓨터!
아, 효연을 jay.txt jay.txt
빠뜨렸어요. c.txt c.txt
다시 돌려놔야
겠어요. snsd.txt snsd.txt
e.txt e.txt
서버와는 상관없이 내 컴퓨터에서
일어나는 일들이랍니다.
13. 그런데 누가 저 파일을 바꾼거야?
여러분의 컴퓨터! SVN 서버 컴퓨터!
이 파일은 jay.txt jay.txt
지금까지 c.txt c.txt
누가 수정해
왔을까요? snsd.txt snsd.txt
e.txt e.txt
14. 수정 기록 훑어보기! ‘로그(log)’
r1977 | reid | 2012년 6월 20일 오전 11시 43분 10초 | 1번째 줄
/trunk/test_repo/jay.txt로 이름 변경
r1974 | reid | 2012년 6월 19일 오후 4시 12분 56초 | 1번째 줄
여러분의 컴퓨터! 뭔가 내용 작성
r1970 | jay | 2012년 6월 18일 6시 52분 15초 | 1 번째 줄
/trunk/test_repo/a.txt 생성
맨 앞 r1977은 리비전이라고 해요
jay.txt 수정 사항이 있을 때 마다 1씩
증가한답니다.
c.txt 누가 언제
무엇을 어떻게
snsd.txt 바꾸었는지가
e.txt 기록되어
있어요!
15. 어딜 어떻게? ‘책임묻기ㅋ(blame)’
1970 jay 안녕하세요? 저는 jay예요.
여러분의 컴퓨터! 1970 jay 오늘도 즐거운 하루 보내고 계신가요?
1974 reid 힘들고 지칠때면 레고로 원기회복하세요.
1970 jay 그럼 안녕히
jay.txt
c.txt 파일의
snsd.txt 한줄한줄 누가
e.txt 언제 작성한건지
알려줍니다. ㅋ
16. 자, 지금까지는 기초반 공부였구요.
이 정도만 알아도 별 문제 없이 잘 쓸 수 있답니다.
단, 프로그래머만 빼구요. :(
이제 고급반 들어갑니다!
17. 휴와 잭이 멋진 게임을 만들고 있어요!
휴 잭 좋아요!
좋은 아이디어가 그런데, 혹시라도
떠올랐어요! 버그가 있는 코드를
그런데 구현하는데 커밋하시면
시간이 좀 걸릴 것 곤란해요...
같아요!
18. 휴는 깊은 고민에 빠졌어요.
아, 이럴수가... 내가 만약 작은
스펙타클한 버그라도 만들어내면
아이디어인데
잭의 작업에
마음 놓고 만들 수 지장을 줄텐데...
없다니... 아, 어떡하지
21. 이 권장하는
SVN 디렉토리 구조도 나무와 비슷해요
모두가
공유하는
작업공간
Project trunk
branches
tags 임시로 격리된
작업공간
이건 조금
있다가
설명할게요
22. 휴가 브랜치를 만들고 있어요
브랜치(branch) 명령을 사용해요
Project trunk
branches Hugh’s Brilliant Idea
tags
trunk의 파일들을
branches 디렉토리
아래 나만의 작업
공간으로 복사합니다.
23. 휴와 잭이 만드는 게임 디렉토리의 구조예요
잭이 열심히
달리고 있어요
Project trunk
branches Hugh’s Brilliant Idea
tags
휴가 편안하게
작업하고 있어요
24. 드디어 휴의 아이디어가 구현되었어요!
레드불 먼저
DOH!!!!! 한잔 하시고... 이제 일주일동안
작업이 드디어 휴의 소스와
끝났어요! 제 소스를 비교하며
이제 어떡하나요? 카피&페이스트를
하도록 해요
그럴리가 없겠죠?
25. 휴의 작업을 ‘병합(merge)‘합니다!
병합(merge) 명령을 사용해요
Project trunk
branches Hugh’s Brilliant Idea
tags
휴가 작업한 branch의
파일들이 trunk로
병합됩니다.
26. 뜨어! 휴와 잭의 작업이 충돌했어요!
아, sistar.hpp 설마, 휴도 그 파일
파일 1514번째줄을 수정하신거예요?
수정하셨어요? 하필 왜 1514번째줄을
수정하신거예요.
27. 스스로 충돌을 해결해야 합니다.
SVN 병합(merge)은 두 작업을 자연스럽게 합쳐줍니다.
하지만, 하나의 파일 속 동일한 위치를 변경해버리면,
컴퓨터의 슈퍼 할아버지가 오더라도 자동으로 해결할 수가 없습니다.
SmartSVN의
3-way merge tool 입니다.
이런 도구를 이용하면
병합이 쉬워집니다.
28. 병합 과정을 다시 한번 순서대로 살펴볼까요?
생각보다 복잡해요.
2) 업데이트
여러분의 trunk svn서버의 trunk
4) 커밋
3) 병합
여러분의 branch svn서버의 branch
1) 커밋
• 2)가 끝나면, 내 컴퓨터와 서버는 완전히 똑같아집니다.
• 병합은 내 컴퓨터에서 처리됩니다. 모든 이슈가 해결되면 그때 서버에 반영합니다.
29. 브랜치 작업의 장점은 협업에서 두드러집니다.
Yubin Juno 작업을 branch에서
검증하고 trunk로 커밋한다면
trunk가 문제가 생기기는
Hugh Jay 쉽지 않겠죠?
TRUNK
BRANCHES
Jack Joy Willy
소셜인어스는 정신없이 개발 중!
30. 마일스톤이 완료되었습니다!
Juno
Jay
TRUNK
이 빌드가 서비스를 시작했는데
한참 후, 이 빌드에서
버그가 발생한다면 어떡하죠?
Joy Willy 빌드를 저장해두지 않으면
완벽하게 수정 할 방법이 없어요.
목표가 달성되면 완료 순간의 빌드를
저장하고 유지해야 합니다.
31. 이때 사용하는 것이 ‘태그(tag)‘입니다.
태그는 수정하지 않아요!
Project trunk
branches
tags 120720_3rd_milestone
모든 개발자들이 열정을
쏟아부은 trunk를
태깅(tagging) 합니다
32. 설명은 여기까지입니다...
쉬우면서도 어려워요. 하지만 중요하죠!
작업의 버전 관리는 말로 다 할 수 없을만큼 중요해요.
프로젝트의 시작과 끝, 모든 역사가 다 저장되기 때문이에요.
그리고 SVN의 기본적인 사용법은 굉장히 쉽지만,
조금만 더 잘 사용하려면 무척 어려워진답니다.
게다가 올바르게 사용하지 않으면 엉뚱한 결과를 만들어내기도 해요.
그래서 SVN의 정확한 사용법을 아는게 매우 중요해요!
항상 아기 강아지처럼 신중하게 다루어주세요.