SlideShare a Scribd company logo
소셜인어스는 버전관리툴로     SVN을 이용해요
      개발하다가 실수로 파일을 지워버리면?
      팀 작업을 하다가 다른 사람 작업물을 덮어써버리면?
      걱정 없어요! 버전관리툴 SVN이 있으니까요!




                           svn이 더 궁금하면? 클릭
맥용   SVN 프로그램에는 이런 것들이 있어요
        스마트SVN       SmartSVN

                                       ☛ 쓸만해요
        SC툴바버튼       SCToolbarButton




        코너스톤    cornerstone

                                       ☛ 한글 오류 때문에 골치가 아파요
                                                 예쁘긴 진짜 예쁜데...
        버전스   versions
이제 SVN에 대해서 알아볼까요?




이건 여러분의 컴퓨터!        이건 SVN 서버 컴퓨터!
처음에는 여러분의 컴퓨터에   아무것도 없어요!
                     정말이에요!



 여러분의 컴퓨터!          SVN 서버 컴퓨터!



                     a.txt
                     b.txt
                     c.txt
                     d.txt
제일 먼저 할 것은 ‘체크아웃(checkout)’
                        서버로부터 파일들을 가져와요



   여러분의 컴퓨터!               SVN 서버 컴퓨터!

                 체크아웃




 파일들을
         a.txt
         b.txt
         c.txt
         d.txt
                 ➟           a.txt
                             b.txt
                             c.txt
                             d.txt
  똑같이
내려받았어요
이제 파일들을        마음대로 할 수 있어요!

     여러분의 컴퓨터!             SVN 서버 컴퓨터!



이름 변경! ☞ jay.txt            a.txt
 삭제!   ☞ b.txt              b.txt
내용 수정! ☞ c.txt              c.txt
          d.txt             d.txt
파일 추가! ☞ e.txt                        그런데
                                    SVN 서버는
                                    아직 바뀐게
                                      없네요
이제 작업이 끝났어요! ‘커밋(commit)’ 합니다!
                      내 파일들을 서버로 보내요



  여러분의 컴퓨터!              SVN 서버 컴퓨터!

                 커밋
       jay.txt
        c.txt
        d.txt
        e.txt
                 ➟        jay.txt
                          c.txt
                          d.txt
                          e.txt
                                      드디어 내
                                    컴퓨터와 서버가
                                     똑같아졌어요
앗, 그런데 갑자기      누군가가 나타났어요!
                     그리고 자기가 바꾼 파일을 서버로 커밋했어요!

여러분의 컴퓨터!
      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
어떡하죠? 서로 또   달라졌어요.

여러분의 컴퓨터!            SVN 서버 컴퓨터!



     jay.txt           jay.txt
      c.txt             c.txt
      d.txt           snsd.txt
      e.txt             e.txt
최신 상태를 유지하려면 ‘업데이트(update)’
                           체크아웃은 처음에만, 업데이트는 수시로!



   여러분의 컴퓨터!                      SVN 서버 컴퓨터!

                    업데이트




다시 서버와
          jay.txt
           c.txt
         snsd.txt
           e.txt
                    ➟              jay.txt
                                    c.txt
                                  snsd.txt
                                    e.txt

똑같아졌어요
아, 그런데 뭔가 수정할 게 생겼어요!


     여러분의 컴퓨터!              SVN 서버 컴퓨터!



             jay.txt         jay.txt
 소녀시대가
9명이라고 잘못      c.txt           c.txt
 적혀 있어요.    snsd.txt        snsd.txt
 8명으로 정정
              e.txt           e.txt
   합니다.
수정한걸 취소할땐 ‘되돌리기(revert)’


     여러분의 컴퓨터!         SVN 서버 컴퓨터!



 아, 효연을      jay.txt    jay.txt
 빠뜨렸어요.       c.txt      c.txt
다시 돌려놔야
  겠어요.      snsd.txt   snsd.txt
              e.txt      e.txt
   서버와는 상관없이 내 컴퓨터에서
   일어나는 일들이랍니다.
그런데        누가 저 파일을 바꾼거야?

    여러분의 컴퓨터!                 SVN 서버 컴퓨터!



 이 파일은    jay.txt               jay.txt
 지금까지      c.txt                 c.txt
누가 수정해
왔을까요?    snsd.txt              snsd.txt
           e.txt                 e.txt
수정 기록 훑어보기! ‘로그(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                                          기록되어
                                                       있어요!
어딜 어떻게? ‘책임묻기ㅋ(blame)’


                1970   jay    안녕하세요? 저는 jay예요.
여러분의 컴퓨터!       1970   jay    오늘도 즐거운 하루 보내고 계신가요?
                1974   reid   힘들고 지칠때면 레고로 원기회복하세요.
                1970   jay    그럼 안녕히




      jay.txt
       c.txt                                  파일의
     snsd.txt                               한줄한줄 누가
       e.txt                               언제 작성한건지
                                            알려줍니다. ㅋ
자, 지금까지는   기초반          공부였구요.
           이 정도만 알아도 별 문제 없이 잘 쓸 수 있답니다.
           단, 프로그래머만 빼구요. :(



           이제   고급반 들어갑니다!
휴와 잭이 멋진 게임을 만들고 있어요!


             휴   잭      좋아요!
 좋은 아이디어가            그런데, 혹시라도
  떠올랐어요!             버그가 있는 코드를
그런데 구현하는데              커밋하시면
시간이 좀 걸릴 것             곤란해요...
    같아요!
휴는 깊은 고민에 빠졌어요.

 아, 이럴수가...        내가 만약 작은
  스펙타클한           버그라도 만들어내면
 아이디어인데

                    잭의 작업에
마음 놓고 만들 수         지장을 줄텐데...
  없다니...            아, 어떡하지
맞다! 게보... ‘브랜치(branch)’
브랜치가 뭔가요?

  브랜치(branch)
몸통에서 뻗어나온
 곁가지를 말해요.




                 트렁크(trunk)
                 듬직한 나무 몸통이에요.
이 권장하는


SVN 디렉토리 구조도 나무와 비슷해요

                           모두가
                          공유하는
                          작업공간
  Project     trunk
               branches
              tags        임시로 격리된
                           작업공간

            이건 조금
             있다가
            설명할게요
휴가 브랜치를 만들고 있어요
                         브랜치(branch) 명령을 사용해요


Project      trunk
             branches   Hugh’s Brilliant Idea
             tags

                               trunk의 파일들을
                               branches 디렉토리
                               아래 나만의 작업
                               공간으로 복사합니다.
휴와 잭이 만드는 게임         디렉토리의 구조예요
                         잭이 열심히
                         달리고 있어요
    Project   trunk
              branches      Hugh’s Brilliant Idea
              tags
                                  휴가 편안하게
                                  작업하고 있어요
드디어 휴의 아이디어가 구현되었어요!

              레드불 먼저
  DOH!!!!!   한잔 하시고...    이제 일주일동안
 작업이 드디어                   휴의 소스와
  끝났어요!                  제 소스를 비교하며
이제 어떡하나요?                 카피&페이스트를
                           하도록 해요




                           그럴리가 없겠죠?
휴의 작업을 ‘병합(merge)‘합니다!
                       병합(merge) 명령을 사용해요

Project   trunk
          branches   Hugh’s Brilliant Idea
          tags

                          휴가 작업한 branch의
                           파일들이 trunk로
                             병합됩니다.
뜨어! 휴와 잭의 작업이    충돌했어요!

 아, sistar.hpp    설마, 휴도 그 파일
파일 1514번째줄을        수정하신거예요?
 수정하셨어요?          하필 왜 1514번째줄을
                    수정하신거예요.
스스로 충돌을     해결해야 합니다.
SVN 병합(merge)은 두 작업을 자연스럽게 합쳐줍니다.

하지만, 하나의 파일 속 동일한 위치를 변경해버리면,
컴퓨터의 슈퍼 할아버지가 오더라도 자동으로 해결할 수가 없습니다.




                         SmartSVN의
                    3-way merge tool 입니다.
                       이런 도구를 이용하면
                       병합이 쉬워집니다.
병합 과정을 다시 한번 순서대로 살펴볼까요?
                                  생각보다 복잡해요.



                   2) 업데이트
     여러분의 trunk                svn서버의 trunk
                    4) 커밋



                    3) 병합

     여러분의 branch               svn서버의 branch
                    1) 커밋



• 2)가 끝나면, 내 컴퓨터와 서버는 완전히 똑같아집니다.
• 병합은 내 컴퓨터에서 처리됩니다. 모든 이슈가 해결되면 그때 서버에 반영합니다.
브랜치 작업의 장점은         협업에서 두드러집니다.
         Yubin            Juno           작업을 branch에서
                                         검증하고 trunk로 커밋한다면
                                         trunk가 문제가 생기기는
  Hugh              Jay                  쉽지 않겠죠?


                                         TRUNK


  BRANCHES
             Jack   Joy          Willy

                      소셜인어스는 정신없이 개발 중!
마일스톤이    완료되었습니다!
        Juno

  Jay

                       TRUNK
                                이 빌드가 서비스를 시작했는데
                                한참 후, 이 빌드에서
                                버그가 발생한다면 어떡하죠?
 Joy           Willy            빌드를 저장해두지 않으면
                                완벽하게 수정 할 방법이 없어요.

                        목표가 달성되면 완료 순간의 빌드를
                        저장하고 유지해야 합니다.
이때 사용하는 것이 ‘태그(tag)‘입니다.
                                태그는 수정하지 않아요!
 Project   trunk
           branches
           tags       120720_3rd_milestone


                          모든 개발자들이 열정을
                           쏟아부은 trunk를
                          태깅(tagging) 합니다
설명은 여기까지입니다...

  쉬우면서도 어려워요. 하지만             중요하죠!
              작업의 버전 관리는 말로 다 할 수 없을만큼 중요해요.
              프로젝트의 시작과 끝, 모든 역사가 다 저장되기 때문이에요.

그리고 SVN의 기본적인 사용법은 굉장히 쉽지만,
조금만 더 잘 사용하려면 무척 어려워진답니다.
게다가 올바르게 사용하지 않으면 엉뚱한 결과를 만들어내기도 해요.

    그래서 SVN의 정확한 사용법을 아는게 매우 중요해요!
    항상 아기 강아지처럼 신중하게 다루어주세요.

More Related Content

Similar to 소셜인어스 SVN 도움말 (9)

WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
WTM 2018 2개월차 신입 백엔드 개발자의 따끈따끈 개발 썰
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
NDC15 - 사례로 살펴보는 MSVC 빌드 최적화 팁
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법디자이너를 위한 Svn 사용법
디자이너를 위한 Svn 사용법
 
온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기온라인 게임 처음부터 끝까지 동적언어로 만들기
온라인 게임 처음부터 끝까지 동적언어로 만들기
 
도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편도커없이 컨테이너 만들기 1편
도커없이 컨테이너 만들기 1편
 
Django beginning
Django beginningDjango beginning
Django beginning
 
programming with GDB
programming with GDBprogramming with GDB
programming with GDB
 

소셜인어스 SVN 도움말

  • 1. 소셜인어스는 버전관리툴로 SVN을 이용해요 개발하다가 실수로 파일을 지워버리면? 팀 작업을 하다가 다른 사람 작업물을 덮어써버리면? 걱정 없어요! 버전관리툴 SVN이 있으니까요! svn이 더 궁금하면? 클릭
  • 2. 맥용 SVN 프로그램에는 이런 것들이 있어요 스마트SVN SmartSVN ☛ 쓸만해요 SC툴바버튼 SCToolbarButton 코너스톤 cornerstone ☛ 한글 오류 때문에 골치가 아파요 예쁘긴 진짜 예쁜데... 버전스 versions
  • 3. 이제 SVN에 대해서 알아볼까요? 이건 여러분의 컴퓨터! 이건 SVN 서버 컴퓨터!
  • 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. 휴는 깊은 고민에 빠졌어요. 아, 이럴수가... 내가 만약 작은 스펙타클한 버그라도 만들어내면 아이디어인데 잭의 작업에 마음 놓고 만들 수 지장을 줄텐데... 없다니... 아, 어떡하지
  • 20. 브랜치가 뭔가요? 브랜치(branch) 몸통에서 뻗어나온 곁가지를 말해요. 트렁크(trunk) 듬직한 나무 몸통이에요.
  • 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의 정확한 사용법을 아는게 매우 중요해요! 항상 아기 강아지처럼 신중하게 다루어주세요.