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

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

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

'프로그램 사용 > Version Control' 카테고리의 다른 글

Apache + SVN on Ubuntu 10.04  (0) 2010.11.03
visualSVN  (0) 2010.09.09
cvs2svn 사용방법 2  (0) 2010.04.23
svn / svnadmin 도움말  (0) 2010.04.23
CVS / SVN 장단점, 차이점 비교  (6) 2010.04.07
Posted by 구차니
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에 접속하면 리파지터리를 알 수 없으므로 에러가 발생한다.)


'프로그램 사용 > Version Control' 카테고리의 다른 글

cvs2svn 사용방법 2  (0) 2010.04.23
svn / svnadmin 도움말  (0) 2010.04.23
GIT는 리눅스에서 받으시는걸 추천합니다.  (0) 2010.03.18
TortoiseGIT  (0) 2010.03.18
SVN repository 어떻게 구성하지?  (2) 2010.03.08
Posted by 구차니
Linux/Ubuntu2009. 4. 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 내장 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/]

'프로그램 사용 > Version Control' 카테고리의 다른 글

SVN의 단점  (0) 2009.05.08
svn 저장소의 위치  (0) 2009.05.08
TortoiseSVN 내장 Diff 사용시 주의사항 및 프로그램 소개  (2) 2009.03.10
CVS / SVN 차이점?  (2) 2009.03.06
SVN 사용기  (0) 2009.03.05
Posted by 구차니
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 구차니
[서버 - 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 구차니
2008년 12월 12일 기준 최신 버전은 1.10.9 stable 이다.
간만에 집에 설치하고 사용을 해봤더니 Checkout에서 상당히 다른 부분이 보인다.

1. 버전 정보.


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


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


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


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