11/02/2017

SVN 관련 설명 (추후 정리)

1. SVN 이란?  

Subversion 의 약자로 그 이전의 CVS 처럼 Source의 Version을 관리해주는 형상관리 Tool이다.
SVN이 나온지도 오래되었지만, 그 이전의 CVS도 존재하니,  꽤 괜찮은 Version System이라고 해야겠다.

아주 오래전에 개발과 양산을 동시에 할때 Server 관리자 역할까지 한 적이 있었는데, 그때 SVN을 많이 사용했었지만,
현재 다시 SVN을 사용하게 될 줄은 몰랐다. 왜냐하면 요즘 거의 기본으로 GIT로 가는 줄 알았는데, 그리고,
더불어  GIT를 기반으로 하는 repo or yocto 관련 사항으로 되는 것으로 변하게되어 SVN을 안하게 될 줄 았았는데 다시 해야 하니 머리나쁜놈이 잘못이다.
이전에 SVN에 관련명령어도 다 까먹고 해서 이를 관련해서 다시 공부하고자 한다.


1.1 SVN 과 GIT의 비교 

우선 현재 많이 사용되어지고 있는 GIT와 SVN의 기능 관리 방법에 있어 이를 비교 해보자.

  • SVN와  GIT 비교사항 
  1. 공통사항은 SVN과 GIT 도 형상관리 프로그램이기에 소스관리가 목적이다. 
  2. SVN과 GIT 둘다 동일하게 Branch 와 Tag가 가능하며, 이는 메인소스와 다르게 구성 가능하며 배포도 가능하다. 
  3. SVN과 GIT 둘다 형상관리 목적이기에 수정된 소스 or 새로추가한 소스를 Commit를 한다
  4. DevOps와 같이 연동하여 개발이 가능하다 

  • SVN와  GIT 상이사항 
SVN과 GIT의 Commit할때를 구조보면 방식 GIT의 경우는 Local Repository와 Remote Repository을 걸쳐간다.

GIT의 경우는 Client 내부에 Local Repository가 존재하여 속도 및 성능이 좋은 것 같다.

SVN와 GIT와 중간구조를 보면 SVN은 Local Repository 존재하지 않으며 Remote Repository로 Commit 내부로 직접 관리된다.

SVN의 경우 중앙에 SVN Server로 하나를 두고 주로 관리를 하지만 GIT의 경우 분산 GIT Server를 두고 관리가 처리를 진행을 하는 것 같다. 
하지만 SVN도 구성을 보면 기본적으로 가능할 것 같기는 한 것 같다

  • GIT의 기본개념 참조 
  https://ahyuo79.blogspot.com/2014/07/git-for-window_20.html

  • SVN과 GIT의 차이점 
  http://seungzzang.blogspot.kr/2013/04/git-svn-svn-git.html
  http://www.allofsoftware.net/2011/10/svn-git.html
  https://www.slideshare.net/einsub/svn-git-17386752
  https://backlog.com/git-tutorial/kr/reference/git-svn.html

Android를 예를 보면 Repo를 보면 여러 Git Server와 연결하여 소스를 가져온다.  물론 위와 같이 소스를 구성하고 관리하는 것이 힘들 것이다.
왜냐하면 Base Repository를 두고 개발하는 팀이 있고,  특정 모듈을 개발하는 팀들이 존재할 경우, 이 소스를 받아 이를 넣고 페치하는 작업을 하는 것이다.

  https://ahyuo79.blogspot.com/2014/07/repo.html

  아래 내용은 참고만하자 
  http://flowerykeyboard.tistory.com/9


1.2 SVN의 기본구성 

SVN은 위에서 설명했듯이 SVN Server가 존재하며 SVN Client로 존재하게된다.
SVN Client는SVN을 checkout을 하게 될 경우 SVN Server에서 관련 소스를 다운을 받고 이 소스안에는  .svn 저장되어 있다.
.svn 의 역할은 중요하며 소스 수정사항 및 만약 새로 소스를 추가한다면 이곳에서 조절을 하게된다.

1.3  SVN Tools 

  http://tortoisesvn.tigris.org/


2.  SVN 의 명령어 

SVN의 명령어들을 Server에서 사용하는 명령어와 Client에서 사용되는 명령어로 구분해보자

SVN-Server-URL :  HTTP or SVN or SSH를 이용하며 이 주소는 SVN에서 정한다
PATH               :  Local Machine의 Path
[PATH]             :  PATH이지만 옵션

  • Checkout 
주로 SVN Client에서 이를 사용하며 SVN Server에 존재하는 소스를 SVN Client에서 이를 Download하기 사용한다.

svn checkout SVN-Server-URL
svn co  SVN-Server-URL   [PATH] 

svn co  svn://127.0.0.1  ~/test     // 특정 PATH에 checkout을 하여 Client에 저장 
svn co  svn://127.0.0.1            // current directory Client에 저장  


  • Update
주로 SVN Client에서 사용하며, SVN Server에 Commit 하기전에 주로 수행하며, 사용하는 이유는 다음과 같다.
현재 작업 중인 SVN Version과  Remote SVN Version 이 다를 경우 즉 다른 SVN Client 사용자가 commit 하여
Remote SVN Server Version 이 변경될 경우에 대비하는 것이다.

svn update [PATH]
svn up [PATH] 

svn up  // 현재 directory는 SVN Main 이며, 이를 Remote의 최신 Revision으로 Update 
svn up ~/test     // PATH를 지정하여 Remote의 최신 Revision로 Update  
svn up -r1        // 옵션 revision 번호를 지정하여 특정 revision으로 update 가능 



  https://stormaa.tistory.com/122
  http://seedraker.tistory.com/28
  http://tongtongj.tistory.com/22
  http://tongtongj.tistory.com/18?category=607471
  http://okkks.tistory.com/988

  • SVN  admin 명령어



$ svnadmin create 


  • SVN Client 관련 명령어 


svn add xxx.c
 
svb update    // 기존파일  수정

svn ci -m " message "   driectory 설정가능

svn co  svn://xxxxxxxxxx

     http://seedraker.tistory.com/28

svn st -q  // 수정한 파일 보기

  http://zetawiki.com/wiki/Svn_status

~ : Link 파일문제
E145001