subversion 사용 시 주의 사항

2008.12.26 11:03 컴퓨터/유틸리티

컴퓨터 작업하다 보면 항상 걱정하는 것이 버전관리입니다. 방법을 계속 바꿔 보지만 또 고심하게 되는 것이 버전관리입니다. 그나마 혼자서 모든 작업을 한다면 부지런을 떨면 되는데, 여러 사람이 공동 작업을 한다면 부지런을 떤다고 해서 해결되지 않습니다. 이것은 백업과는 달라서, 열심히 다른 곳에 복사본을 만든다고 해서 해결되지 않습니다. 길게 말씀을 드리지 않아도 모두 동감하는 내용이라 생각합니다. 그래서 선택한 것이 subversion입니다.

subversion을 선택한 이유에 대해서는, 이미 많은 곳에서 소개되고 언급된 매우 유명한 프로그램이라 생략하고, 대신에 설치부터 간단한 사용방법까지 매우 정리가 잘된 문서가 있어서 링크를 대신합니다.

 09 서브버전(Subversion) 윈도우 서버 설치 - kkamagui의 프로그래밍 작업실

subversion이 좋다는 말씀이 많고 자세한 설명도 많아서 쉽게 설치했는데, 정작 어떤 점을 주의해야 하는지 알 수 없어서 평소 습관대로 사용했다가 매우 낭패를 보았습니다. 전 이 글에서 subversion을 사용하면서 주의해야할 내용을 정리해서 처음 사용하시는 분이 저처럼 고생하지 않게 도움을 드리고 싶습니다.

처음에는 이유도 모르고 고생을 많이 했습니다만, 수아파파님의 도움으로, 왜 제가 그렇게 생고생을 했는지 이해할 수 있었고, 올바르게 사용하기 위해서는 어떻게 해야 하는지 큰 도움을 받았습니다. 이 자리를 빌어 수아파파님께 큰 감사를 드립니다. ^^

수아파파님 블로그

참고이 글은 Subversion 프로그램 중에 Microsoft Windows에서 제일 많이 사용하는 Tortoise Subversion을 기준으로 작성했습니다.

평소 습관대로 사용하면 절대 안 된다.

가장 조심해야 할 내용입니다. 예전 습관처럼,

  • 아무 생각 없이 파일이나 폴더를 삭제하시면 안 됩니다.
  • 무책임하게 폴더를 다른 곳에 옮기시면 안 됩니다. 파일도 안 됩니다.
  • 더욱이 파일이나 폴더도 함부로 이름을 바꾸시면 안 됩니다.
  • 그래서 jwFreeNote처럼 파일이나 폴더를 subversion이 모르게 이동하는 프로그램을 사용하면 절대 안 됩니다.

그럼? 모든 작업을 subversion이 알도록 작업해야 합니다. 어떻게? 저는 Tortoise 프로그램을 사용하는데, 파일 하나 삭제하더라고, 이전의 방법으로 삭제하는 것이 아니라 Tortoise 프로그램을 이용하여 삭제해야 한다는 것이죠.

파일과 폴더 삭제

폴더를 삭제해 보겠습니다. 예전에는 폴더 선택하고 메뉴나 키보드로 간단히 삭제할 수 있었습니다만, 절대 그러시면 안 됩니다. 삭제하려는 폴더를 Tortoise 메뉴의 삭제 메뉴를 이용한 후에 커밋을 실행해야 합니다. 즉,

이렇게 되면 삭제된 폴더나 파일의 아이콘이 삭제된 모습으로 바뀌게 되는데, 그렇다고 Delete 키를 이용하여 삭제하면 안 됩니다. 대신에 repository(보관소)에 등록된 최상위 폴더에서 Tortoise 메뉴를 이용하여 커밋해야 합니다. 이렇게 커밋을 해야 실제 폴더가 삭제됩니다.

파일? 역시 탐색기에서 예전 방법으로 삭제하시면 안 되고, 역시 Tortoise의 삭제 메뉴를 이용하여 삭제해야 합니다.

이렇게 생각하면 쉽습니다.

지금까지 파일이나 폴더를 삭제하거나 이름을 변경하거나 다른 곳을 옮길 때에는 나의 의지와 생각에만 따랐지만 Subversion을 이용하여 버전관리를 하기 위해서는, 이와 같은 변경 사항을 나만 알고 있어서는 안 되고, Subversion도 알 수 있게끔 알려 주고 처리 한다고 생각하시면 되겠습니다.

저는 Subversion이 하도 유명해서 만능인 줄 알았습니다. 설치하면, 이후로 이전까지의 습관 그대로 사용하면 Subversion이 알아서, 매우 유명한 프로그램이니까 모두 알아서 관리를 해 주는 줄 알았습니다. 그러나 그런 것이 아니었습니다. 그리고 지금 생각해 보면 그렇기 때문에 중요한 데이터를 관리할 수 있다고 생각합니다.

즉, 지금 내가 만지는 파일이나 폴더는 나만이 사용하는 것이 아니라 다른 사람도 사용하는 공동 우물 같은 것이어서 두레박을 혼자서 모두 사용해서는 안 되는 것처럼, Subversion이 되었든 다른 버전관리 프로그램이 되었는 사용하는 사람도 버전 관리를 위해 규칙에 맞추어 행동해야 겠다는 것입니다.

다시 말씀드려 Subversion에 모두 맡기는 것이 아니라 워드를 사용하려면 워드 사용방법을 습득하듯이 Subversion도 사용방법을 익혀서 그 프로그램의 규칙에 따라 파일과 폴더를 사용해야 한다는 말씀이 되겠습니다.

파일과 폴더 이름 변경

삭제하나도 쉽지 않은데 이름 바꾸기라고 쉽겠습니까? 생각하겠습니다만 다행히 Tortoise의 이름변경 메뉴를 이용하시면 됩니다. 그럼 이렇게 간단한 것을 왜 얘기하나 하시겠습니다만, Subversion을 조금 더 이해를 드리고자 말씀을 드립니다.

Tortoise를 이용하여 파일 이름을 변경한 후 커밋을 실행한 화면입니다.

보시면 아시겠습니다만, 단순히 파일 이름을 변경하는 것이 아니라 기존 파일 이름의 파일을 삭제하고 새로 입력한 이름의 파일로 추가했습니다. 즉, 이와 같이 파일 이름 하나 변경하는 것부터 Subversion은 모든 작업 단위를 기억하고 관리합니다.

파일 또는 폴더 이동

이름 하나 바꾸는 것도 이렇게 부산한데, 파일이나 폴더 이동은 어떨까요? 결론부터 말씀드리면 복잡합니다. 우선 파일 이동부터 정리하겠습니다.

  1. 파일을 다른 폴더로 이동합니다.
  2. 이동한 폴더를 선택하고 옮긴 파일을 Tortoise의 추가 메뉴를 이용하여 Subversion에 추가합니다.

즉, 이렇게 처리한다는 것입니다.

그럼 폴더는? 역시 옮겨 놓고? 절대 그렇게 해서는 안 됩니다. 저, 이렇게 했다가 무지 고생했습니다. Tortoise의 익스포트 메뉴를 이용합니다.

  1. 이동하려는 폴더를 선택합니다.
  2. Tortoise의 익스포트 메뉴를 이용하여 이동하려는 폴더를 선택합니다.
  3. 익스포트 메뉴를 이용하면 Subversion의 버전관리를 위한 .svn을 제외한 실제 파일과 폴더만 선택한 폴더에 복사합니다.
  4. 익스포트가 완료되면 기존의 폴더를 Tortoise의 삭제메뉴를 이용하여 Subversion에서 삭제합니다.
  5. 익스포트에서 선택했던 목적 폴더로 이동해서, 새로 복사된 폴더를 선택하고 Tortoise의 추가 메뉴를 이용하여 Subversion에 추가합니다.
  6. 이제 repository에 등록한 최상위 폴더에서 Tortoise의 커밋 메뉴를 이용하여 커밋합니다.

마지막으로 주의할 점. 최상위 폴더에서 커밋할 것!

커밋은 폴더나 파일 모두에서 실행할 수 있습니다만, 모든 작업이 repository에 등록된 최상위 폴더 안에서, 다양한 작업이 진행되고, 각 작업은 다른 작업에 영향을 주고 받을 수 있기 때문에 가급적 repository에 등록한 최상위 폴더에서 커밋하는 것이 좋다고 합니다.

물론 서브 폴더나 파일에서 커밋해도 좋지만 Subversion이 헷갈리지 않게 하는 것이 좋기 때문이죠.

이렇게 복잡한데 사용해야 할까?

물론 혼자서 자유롭고 편하게 작업하는 것보다는 불편한 점이 많습니다. 삭제하나 마음 편하게 하지 못하니 말이죠. 그러나 이런 불편보다도 여럿이서 파일을 나누어 작업하다 보면 버전관리가 얼마나 더 어려운지 아실 것입니다.

또, Subversion 서버에 최신 파일이 모두 들어 있기 때문에 심한 경우 작업 파일 모두 잃었다고 하더라도, 빈 폴더 하나 만들어 놓고 체크아웃 한번 호출하면 가장 최신 버전의 파일로 모두 복사해서 복구해 줍니다.

Subversion 서버하고만 네트워크로 연결할 수 있다면 새로 컴퓨터를 들여 놓아도 가장 최신 버전의 작업 파일로 바로 구축할 수 있습니다. 즉, 어느 컴퓨터에서 어느 폴더를 쫒아 다니면서 복사하고 다닐 필요가 없다는 것입니다.

겨우 며칠 사용했기 때문에 앞으로 학습해야 할 것이 많겠습니다만, 예전에 슬쩍 봤던 Subversion의 책이 왜 그렇게 두꺼웠는지 이제서야 이해하게 되었습니다만, 앞으로 도움을 많이 받을 것으로 기대하고 있습니다. 버전관리에 고생하고 계신다면 Subversion을 권하고 싶습니다. 대신에 임시 파일로 충분히 학습하신 후에 실무에 적용하세요. ^^

이 댓글을 비밀 댓글로
    • 알바1호
    • 2008.12.26 11:51
    흠 주인장께서도 subversion의 나락에 빠지셨군요...^^;
    뭐 팁이랄것도 없지만, 참고로 말씀드리자면 작업용 Machine과 일상생활용 Machine을 나누는것이 좋다고 생각합니다.
    저는 개발보다는 테스트때문에 사용을 했는데, 집에서 '테스트만 할껀데 뭐~' 하고 설치하고 사용했다가 낭패를 본적이 있어서.....- -;

    평소에 사용하던 습관하고는 다르게 써야하니깐 익숙하긴 참 어렵더군요.

    다만 현재 작업중인 파일이 테스트가능한 최신버전인지 일일이 물어볼 필요없이 최종 체크아웃된것만 확인해서 업데이트해주면 되니깐 편하더군요.
    • 네, 습관대로 사용하지 못하는 것 때문에 어렵기는 하지만,
      항상 최신 버전을 보장 받을 수 있다는 것은 너무 좋습니다. ^^
  1. 저도 처음에는 무척고생했었죠... 커밋할때 에러나고 그래서요.. ㅎ
    전 주로 Tortoise보다는 이클립스의 서브클립스 위주로 하다보니 탐색기에서 파일을 만져도 F5누르면 서브클립스가 거의 잡아주기는 하는데 되는것과 안되는 것을 몰랐을때는 정말 고생했죠.(사실 아직도 가끔 좀 해매죠..)
    하지만 이해하고 나면 없을땐 어떻게 했나 싶더군요...
    • 네, 정말 커밋 에러가 나면 어찌할 바를 모르겠어요.
      지금도 헤매고 있지만, 그리고 아직 어떤 점에서 좋은지 확실히는 모르지만
      계속 사용하면서 적응하려 합니다. ^^
    • dvcs
    • 2008.12.26 12:09
    분산버전관리 툴들인 git, mercurial, bazaar등이 생각하기 나름이겠지만 오히려 사용이 편하고 실수에 덜 민감할수 있읍니다. 서브버전을 사용하신지 얼마 안 되셨다면 참고해 보세요.
    • 오우~ 다양한 프로그램 소개 감사합니다. ^^
      모두 다 찾아 보고 사용해 봐야 겠습니다.
  2. 잘 보았습니다. export 명령을 쓸 필요가 있군요. 좋은 경험담 감사합니다.
    • June
    • 2008.12.26 21:56
    일선에서 요긴하게 쓰고 있습니다만, 이렇게 또 보게되니 정겹네요~
    • LYK
    • 2008.12.27 10:23
    브렌치는 어떻게 땁니까? 도저히 안된더데요... 혹시 해보신분?
      • eternity74
      • 2008.12.30 13:53
      branch는 따로 그냥 copy 로 하시면 됩니다.
      repository 만들때 보통, trunk, tags, branches 3개의 기본 폴더를 만들고 trunk 에 소스를 넣습니다. 그리고 tag나 branch가 필요한경우 tags, branches 로 copy롤 하면 됩니다.
    • eternity74
    • 2008.12.30 13:51
    subversion은 trac 이라는 툴과 같이 쓰면 더 효율적입니다.
    trac이라는 web 환경으로 issue관리등을 같이 할 수 있습니다.