꼬부기에서 Tag/ Branch를 누르면 위와 같이 경고를 출력한다.
내가 사용중인 소스(Working copy)에 변경점이 있고, 서버와 버전이 동일하지 않기 때문에
변경점이 손실될수도 있다는 내용이다.

CVS에 비하면 부드러운 메시지이나(CVS는 서버와 workin copy가 동일하지 않으면 tag 자체를 시도할수 없다.)
어떤면에서는 CVS처럼 강인하게 변경점이 있으면 할수 없도록 하는 것도 나쁘진 않다고 생각된다.

하지만, 자유도 측면에서 서버내용을 독립적으로 분기할수 있다는 점은 상당한 매력이다.
신고

'프로그램 사용 > CVS & SVN & GIT & Mercurial' 카테고리의 다른 글

Apache + SVN on Ubuntu 10.04  (0) 2010.11.03
visualSVN  (0) 2010.09.09
TortoiseSVN tag/branch = copy  (2) 2010.04.30
cvs2svn 사용방법 2  (0) 2010.04.23
svn / svnadmin 도움말  (0) 2010.04.23
CVS / SVN 장단점, 차이점 비교  (6) 2010.04.07
Posted by 구차니

댓글을 달아 주세요

  1. svnserve manager
    http://www.pyrasis.com/main/SVNSERVEManager
    쓰시는지? 무척 편하더군요.

    2010.05.11 14:58 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 윈도우에서는 혼자 써서 그냥 TortoiseSVN으로 사용중이고
      리눅스에는 고민중이랍니다 ^^

      좋은정보 감사합니다. 한번 꼭 써봐야겠네요

      2010.05.11 15:02 신고 [ ADDR : EDIT/ DEL ]

cvs와 svn을 사용하면서 느끼는 점은, 우열을 가리긴 모호하다는 것이다.
cvs가 나은점도 있고, svn이 나은점도 있고,
이러한 모호함 때문에 일단 회사 개발소스는 cvs로 유지중이긴 하지만...


거두절미하고, svn은 cvs의 단점을 개선하기 위해 만들어진건데
가장 큰 변경사항은 svn에서 디렉토리 이동이 편해졌다는 점이다.
cvs은 특정 소스의 위치를 변경하거나, 하위 디렉토리의 위치를 변경하기 위해서는
소스를 새로운 곳에 새롭게 Add 하고 기존의 파일을 Delete 해야 해서
이력추적을 할 수 없게 되지만, svn에서는 이력추적이 가능해진다.


일단 사소한 것들을 고고싱 (기준은 CVS)

SVN의 장점

1. 디렉토리 이동이 편리함
    안정화된 프로젝트라면 상관없지만, 프로젝트 초기에는 디렉토리 이동이나 파일 삭제/이름 변경이 빈번한데
    cvs는 이러한 이력을 남길수가 없기 때문에, 초기 프로젝트 셋업시에는 svn이 매우 편리함.
    (이동도 편리하지만, 그에 비해 이력이 따라와서 과거의 변경점이 유지 된다는 부가적인 장점)

2. 오프라인 사용이 용이함
    확실하게 어느정도까지 오프라인 사용이 가능한지는 모호하지만, 최소한 마지막 버전과 Diff가 가능하다.
    cvs에서는 항상 서버와 비교를 하기 때문에 소스 변경사항이 있는건 알아도
    어떤 내용이 서버와 차이가 있는지 알수 없지만, svn 에서는 오프라인에서도 diff가 가능함
    (svn 자체적으로 데이터를 유지하고 있음 = 받는 측 용량 부담 증가)

3. 서버 하드공간이 절약
    cvs을 cvs2svn으로 변환해본 결과 대략 25% 이상의 공간이 절약됨
    초기 업로드는 원본으로 올리지만, diff 내용들을 gzip으로 압축하므로 서버 공간 요구량이 줄어듦
    2009/05/11 - SVN과 CVS 저장소 용량비교(compare Repository Size of CVS & SVN)

4. 커밋마다 revision이 올라감
    하나의 변동사항이나, 복수의 파일을 한번에 commit 하면 revision이 변동되고,
    프로젝트 전반적인 변동사항을 추적하기 편리함.
    cvs는 파일단위 revision이기 때문에 프로젝트 전체의 변동이나
    "어떤 파일이 변경되기 이전 시점"으로 롤백하기 매우 난해하나
    svn에서는 commit 단위로 revision이 붙으므로, 잘못 commit 하더라도 복구가 용이함
    (부가적으로 cvs에 비해서 프로젝트 전반적인 변경의 흐름을 읽기 쉬움)

5. atomic commit
    atomic 은 DB에서 하나의 행동의 묶음이 완결되지 않으면 수행되지 않은것으로 복구가 되는 것을 의미하는데
    cvs에서 아무생각없이 commit에서 변동사항들을 본다고 하다가 commit 눌러 올려서 도중에 cancel 했지만
    몇개는 변경되어 난감한 상황을 겪어봤다면 이 녀석의 유용함을 깨달을 수 있다.



SVN 단점

1. 서버 구성이 괴랄하다
    무슨 svn 제대로 쓰려면 apache까지 깔아야 해?
    로그를 남기기 위해서는 svn 자체적으로는 로그가 안남으므로 apache의 로그나 인증을 이용해야 함.
    관리자 측면에서 로그가 남지않는다는건.. 좀 불안해진다.
    (머...... 사용자는 서버 관리자의 고충은 알바없지?)

2. tag 관리가 밋밋함
   너무 많은 자유는 없는것과 다름 없다지만.. svn의 표준(?) repository는 아래와 같이 구성한다.
   2009/05/11 - SVN repository 구조

   개별 프로젝트 별로 trunk / branches / tag를 관리하고
   tagging을 위해서 전체 프로젝트를 tag 하위 디렉토리로 tag 번호를 붙여 복사해주면 된다.
   어쩌면 매우 간편하지만, cvs의 정말 꼬리표를 붙인다는 작업에 비하면 아쉬운 면이 있다.
   cvs에서는 tagging을 하려면 서버와 local의 내용이 동일해야 하고, tagging시 변동 파일이 하나라도 있으면 붙일수 없어
   업데이트 되지 않는 파일이 있는지 빼먹지 않을수 있는 여지가 있지만, svn은 서버에서 클라이언트를 보지 않고
   작업이 가능해지므로 업데이트 되지 않은(혹은 누구가 그 순간 올린 내용까지) 부분이 빼먹거나 더 들어갈수 있다.
   개인 취향이겠지만, tag는 cvs의 약간은 딱딱하고 붙이는 맛이 있는 것이 좋다고 생각한다.

3. repository 구성의 모호함
   repository는 위와 같이 구성하려면 svn 사용자는 /calc /paint 두개의 repository를 기억해야 한다.
   commit 별로 revision이 증가하는 장점의 역효과로서, 단일 프로젝트레 단일 repository를 보장해주어야 제 힘을 발휘한다.
   서로 연관이 있는 두개의 프로젝트라고 하더라도 되도록이면 프로젝트를 분리하는 것이 좋다.
   (현재까진 상위 디렉토리의 목록을 (= 프로젝트 목록) 얻어내는 법을 모르겠다.)

   /home/svn을 만들고
   /home/svn/calc 에 create repository
   /home/svn/paint 에 create repository 를 하고
   svn에서는 /home/svn/calc , /home/svn/paint가 있음을 외우고 써야한다.
   (/home/svn에 접속하면 리파지터리를 알 수 없으므로 에러가 발생한다.)


신고
Posted by 구차니

댓글을 달아 주세요

  1. 오... CVS/SVN에 대해서 자세하게 알려주셔서 감사합니다. ㅎ
    SVN도 한번 써보도록 노력해봐야 할까봐요. ㅋ

    2010.04.08 09:08 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • "SVN이 좋다/CVS가 나쁘다"라고 말하기는 모호하더라구요.
      아무튼 회사 개발 자료는 cvs 서버에, 개인적인 유틸리티 개발은 svn 로컬에 하고 있답니다

      2010.04.08 19:56 신고 [ ADDR : EDIT/ DEL ]
  2. humbleN

    3번 문제는 svn:externals 속성을 이용하면 어느 정도 해결이 될 듯합니다. 다른 저장소를 마치 서브디렉토리처럼 (ln -s 명령과 유사) 가져올 수 있습니다. 물론 commit 할 때는 별도로 해 줘야 하는 번거로움이 있습니다.

    2011.04.22 01:04 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. 지금은 아실지 모르겠지만.
    아파치는 svn 메뉴얼을 보시면 옵션입니다.
    없어도 사용 가능합니다.

    2011.06.09 10:07 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 물론 svn이나 svn+ssh 등을 지원하지만
      제대로 된 로깅이나 전체 기능을 사용하려면 apache는 기본이 되죠 ^^

      2011.06.09 10:08 신고 [ ADDR : EDIT/ DEL ]

Linux/Ubuntu2009.04.30 23:08
1. cvs와 svn을 설치한다.
a. cvs 설치
$ sudo apt-get install cvs
$ sudo apt-get install xinetd
b. svn 설치
$ sudo apt-get install subversion
c. cvs2svn 설치
$ sudo apt-get install cvs2svn
d. htpasswd 설치 (cvs 계정에 사용할 암호 생성용)
$ sudo apt-get install apache2-utils

2. 일단 cvs와 svn을 위해서 계정을 추가한다.
    "시스템 - 관리 - 사용자와 그룹" 을 이용하여 cvssvn사용자를 추가하고 그룹을 사용자 그룹과 동일하게 해준다.
    그리고 보안을 위해서 로그인은 /usr/sbin/nologin으로 해준다. (페도라는 경로가 다르다. /sbin/nologin 에 존재한다.)
a. cvs는 /home/cvs를 생성하고
b. svn은 홈디렉토리를 생성하지 않는다.

3. 그리고 리파지터리를 생성한다.
a. cvs는 $ sudo cvs -d /home/cvs init
b. svn은 $ sudo svnadmin create --fs-type fsfs /home/svn/repos

4. 한번 시험적으로 체크아웃을 해본다. 현재 생성된 내용에는 계정 정보등의 환경설정만 존재한다.
a. cvs는
$ export CVSROOT=/home/cvs
$ sudo cvs co ./
b. svn은
$ svn co file:///home/svn/repos

5. 데몬 구동
a. cvs는 xinetd를 위한 cvs 파일을 생성한뒤, xinetd 서비스를 재시작한다.
    /etc/xinetd.d/cvs 파일의 server_agrs에서 빨간색은 cvs 홈디렉토리이다.
    설치시 cvs -d /home/cvs init 으로 설정한 CVSROOT 위치를 기입해준다.
$ sudo service xinetd restart 혹은
$ sudo /etc/init.d/xinetd start

$ cat /etc/xinetd.d/cvs
service cvspserver
{
     port = 2401
     socket_type = stream
     protocol = tcp
     user = root
     wait = no
     type = UNLISTED
     server = /usr/bin/cvs
     server_args = -f --allow-root /home/cvs pserver
     disable = no
}


b. svn은 svnserve를 기동한다. 데몬 구동시 -r(repo.)의 경로는 create시의
    sudo svnadmin create --fs-type fsfs /home/svn/repos 로 설정된 SVNROOT의 위치를 기입해준다.
$ svnserve -d -r /home/svn

Step 1 - Create your script.
Simply create a new file (I called mine svnserve) and type the command you’d like to run

cd /etc/init.d/ # (thanks Alfonso)
sudo vi svnserve
svnserve -d -r /home/svn/

Step 2 - Save the script in the /etc/init.d/ folder

Step 3 - Make the script executable
sudo chmod +x svnserve

Step 4 - Add the script to the boot sequence
sudo update-rc.d svnserve defaults

[링크 : http://benrobb.com/2007/01/15/howto-start-subversion-at-boot-on-ubuntu/]

6. 사용자 설정
a. cvs는 /home/cvs/CVSROOT/passwd생성해야 한다.

$ htpasswd
Usage:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password

        htpasswd -n[mdps] username
        htpasswd -nb[mdps] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -m  Force MD5 encryption of the password.
 -d  Force CRYPT encryption of the password (default).
 -p  Do not encrypt the password (plaintext).
 -s  Force SHA encryption of the password.
 -b  Use the password from the command line rather than prompting for it.
 -D  Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.

/home/cvs/CVSROOT 에서 다음의 명령어를 수행한다.
$ htpasswd -c passwd [userid]
New password:
Re-type new password:
Adding password for user [userid]

다음 유저 추가시에는 -c를 제외하고 수행한다.
$ htpasswd passwd [userid]


b. svn은 /home/svn/conf/passwd수정해야 한다.

$ more /home/svn/conf/passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
# harry = harryssecret
# sally = sallyssecret
userid = passwd   # 이부분에 사용자 계정과 암호를 추가한다.

svn의 암호는 평문으로 들어가게 되므로 보안에 주의를 해야한다.
이것에 싫다면 svn+ssh나 apache를 이용하여 보안에 신경을 쓰도록 하는 것이 좋다.

2009/01/22 - [프로그램 사용/SVN/CVS] - cvs 서버 설치 / 복원
2009/02/26 - [프로그램 사용/SVN/CVS] - windows에 SVN 서버 설치하기
2009/05/10 - [프로그램 사용/SVN/CVS] - cvs2svn 사용방법

[링크 : https://help.ubuntu.com/8.04/serverguide/C/version-control-system.html]
[링크 : https://help.ubuntu.com/8.04/serverguide/C/cvs-server.html]
[링크 : https://help.ubuntu.com/8.04/serverguide/C/subversion.html]


눈요기용

신고

'Linux > Ubuntu' 카테고리의 다른 글

ubuntu에서 compiz 돌리기  (2) 2009.06.02
우분투에는 iptable 대신 ufw가 있다!  (2) 2009.05.07
ubuntu에 cvs / svn 설치하기  (0) 2009.04.30
ubuntu 내장 VNC 서버 - vino-server  (0) 2009.04.30
삼바 설치하기  (0) 2009.04.29
ubuntu 9.04로 업그레이드  (0) 2009.04.28
Posted by 구차니

댓글을 달아 주세요

cvs2svn 이라는 유틸리티를 사용하면 된다고 한다.

[발견 : http://sam.zoy.org/writings/programming/svn2cvs.html]
[공식 : http://cvs2svn.tigris.org/]
신고
Posted by 구차니

댓글을 달아 주세요

  1. 자, 이제 git 로 ㄱㄱ =3=33

    2009.04.13 05:29 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 아악! 아직 SVN 서버도 설치 제대로 못해봤어요 ㅠ.ㅠ
      세상은 저를 기다려주지 않는다능 ㅠ.ㅠ

      2009.04.13 09:41 신고 [ ADDR : EDIT/ DEL ]

CVS만 2년 정도 사용했다.
물론 branch 까지는 사용해보지 않았고,
주로 사용하던 기능은 history와 tag 뿐이었다.

아무튼 이렇게 CVS만 쓰다가 SVN을 사용해봤는데,
처음 사용할때의 어색함인지, 상당히 다른 느낌이 든다.

일단 CVS는 module 단위였는데 SVN은 그러한 구분이 없다는 사실.
어쩌면 구형 TortoiseCVS를 사용해서 그럴지도 모르겠다는 생각이 든다.
신형 TortoiseCVS의 경우에는 물론 module단위로 만들기는 하지만,
module 목록을 combobox가 아닌 listbox로 보여 주기 때문에, 기존 버전보다는
확연히 구분되어 있다는 느낌이 적게 들었다.

하지만, SVN은 이러한 '프로젝트'의 느낌보다는, 이력이 남는 '파일 저장소'라는 느낌이 강하게 든다.
(아마 파일 이동의 편의성과, checkout시 URL로 입력하는 특성때문일 것이다)


CVS 구버전 UI

CVS 신버전 UI

신고
Posted by 구차니
TAG CVS, svn, 차이점

댓글을 달아 주세요

  1. 뜬금없이 왜 마린의 일꾼이 생각나는거죠?

    2009.03.06 18:23 신고 [ ADDR : EDIT/ DEL : REPLY ]

[서버 - linux]

Fedora Core 6에서 CVS 서버 설치하기
 
step 1. xinetd이 이 없다면 설치 한다 (FC 설치시 옵션에 따라서 xinetd가 설치가 안됨. 기본 값 설치시에는 xinetd 포함)

step 2. cvs 에서 사용하는 프로그램들을 설치 한다 [optional]
        cvs, cvsgraph, cvsweb를 설치해준다

step 3. cvs 유저를 및 cvs 그룹을 만든다
        a. useradd cvs 하여 cvs 유저와 그룹을 만든 다음 passwd에서 cvs의 로그인 쉘을 /sbin/nologin 으로 바꾸어 준다
        b. '사용자 관리자' 에서  cvs  유저와 cvs 그룹을 추가 후 로그인 쉘을 /sbin/nologin으로 바꾸어준다
        c. cvs[user]/cvs[group]가 없을 경우 module이 없다는 엉뚱한 에러 메시지가 발생한다.

step 4. cvs를 저장할 곳을 생성하고 디렉토리의 권한을 설정한다.
        그룹이 같이 사용하기 위해서는  CVS 루트 디렉토리의 권한이 그룹에도 write할 수 있도록 되어야 한다
        a. chmod -R $CVS_HOME 775
        b. $CVSROOT 디렉토리의 그룹/유저 권한이 설정되어 있지 않다면 파일을 읽을 수 없으므로
            module 목록을 받아 올 때 에러가 발생하게 된다.

step 5. cvs 루트 디렉토리를 추가한다
        a. cvs -d $CVSROOT init

step 6. 루트 디렉토리 안에 CVSROOT 라는 디렉토리가 생성되었나 확인한다

step 7. CVS를 사용할 유저들을 CVS 그룹에 넣는다

step 8. CVSROOT 디렉토리로 들어 가서 passwd 파일을 생성한다
        a. htpasswd -c passwd $USERID  // 최초 생성시
        b. htpasswd passwd $USERID    // 유저 추가시

step 9. cvs 클라이언트를 이용해서 cvs를 사용한다

step 10. cvs 클라이언트 접속시 cvs pserver: cannot open /var/cvst/CVSROOT/config: Permission denied 라는
            에러가 뜨면 대부분 SELinux 활성화로 인해 충돌이 일어 나는 것이므로,
        a. # setenforce 0 로 selinux를 해제하거나
        b. selinux 설정에서 cvs 보호를 해제 한다. 조금더 안전한 방법을 찾아 봐야함<-
        c. cvs repository의 permission을 확인해본다. 일반적으로 cvs 그룹에 속해 있지 않거나,
            파일을 추가한 사람의 퍼미션을 따라가면서 others의 권한으로 읽다 보니 이런 경우가 발생함
[참고 : http://blog.naver.com/neutrino37/110011154935 & http://forums.fedoraforum.org/archive/index.php/t-100962.html]

 

 cvsweb을 굳이 설치 해야 할 이유는 없으나, 설치 하지 않을시 Tortoise CVS 에서 아래와 같이 설정을 해주어야 한다.

웹 로그를 설치 하지 않은채 '웹 로그 파싱'을 끄지 않으면 웹 로그 서버를 찾는데 엄청나게 오랜 시간 동안 멈추어 버리므로
웹 로그 설치하지 않았다면 반드시 웹 로그 파싱을 끄도록 한다.

 '빈 폴더 제거'의 경우 기본 설정이지만, 일부 프로그램에서 컴파일 결과용 폴더라던가 내용이 없는 폴더의 경우 이 옵션은 꺼주는 것이 좋다. 그게 아니라면, 없어진 폴더를 일일이 생성을 해야 하는 귀차니즘을 경험하게 될 것이다.
(컴파일시 결과 출력 디렉토리라면 컴파일 시 에러가 발생할 것 이다)
 
'네트워크(원격) 드라이브의 저장소 허용'의 경우 꺼지는 것이 기본 설정이지만,리눅스 서버에서 개발을 하고 소스 수정은
windows에서 하는 경우에는 대부분 samba나 nfs를 사용할텐데, 이경우 cvs가 작동이 되지 않게 되는 원인이 바로 이녀석이다. 이녀석을 체크해주면 원격 드라이브에서도 cvs를 사용할 수 있으므로, 개발 환경 구축이 편해지는 장점이 있다.
<20080619 추가>




2008/12/12 - [프로그램 사용] - TortoiseCVS - CVS client for windows
신고
Posted by 구차니
TAG CVS

댓글을 달아 주세요

  1. 저도 뭔가 설치해야 할텐데.. 요즘엔 리눅스를 사용할 기회가 꽤 적네요.
    usb 리눅스를 다시 시도해야 하나..

    그나저나 페도라6 라니.. 너무 고전적인 거 아닙니까? ㅎ

    2009.01.22 23:02 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • Redhat 9가 아닌걸 다행으로 여겨야죠 ㅋㅋ
      FC8은 한글 입력기를 별도로 설치 해야 해서 귀차니즘으로 인해 FC6을 쓰고 있답니다 ^^;
      FC10은 한글 입력기 내장되어 있나요?

      2009.01.22 23:41 신고 [ ADDR : EDIT/ DEL ]

2008년 12월 12일 기준 최신 버전은 1.10.9 stable 이다.
간만에 집에 설치하고 사용을 해봤더니 Checkout에서 상당히 다른 부분이 보인다.

1. 버전 정보.


2. Checkout 화면이 바뀌었다!!


3. Fetch List를 하면 예전에는 최상위 폴더만 보이던 것이 이제 하위 폴더도 보이게 변경 되었다.


4. 환경설정에서 속썩이던 WebLog 추적 기능이 사라졌다.


이번 버전에서 아쉬운 점은 아직 한글이 지원되지 않는 다는 점
(인스톨러는 한글이 지원되지만 문맥메뉴(Context-menu : 우클릭 메뉴)에서는 한글이 없다)이다.
신고
Posted by 구차니

댓글을 달아 주세요