맨위로가기 타임라인 바로가기

CVS

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
타임라인 바로가기

1. 개요

CVS는 초기 버전 관리 시스템인 Revision Control System(RCS)을 기반으로 개발된 소스 코드 관리 시스템이다. 1980년대 중반 딕 그룬에 의해 개발되었으며, 브라이언 베를리너와 제프 포크를 비롯한 여러 개발자들이 참여하여 개선되었다. CVS는 클라이언트-서버 구조를 통해 여러 사용자가 동시에 프로젝트를 관리할 수 있도록 지원하며, 1990년대에 널리 사용되었지만, 파일 및 디렉토리 관리의 한계, 유니코드 지원 부족, 원자성 미지원, 분산 버전 관리 미지원 등의 문제로 인해 Subversion, Git과 같은 새로운 도구로 대체되었다.

더 읽어볼만한 페이지

  • 1990년 소프트웨어 - 윈도우 3.0
    1990년 5월 22일에 출시된 윈도우 3.0은 3차원 GUI와 향상된 메모리 관리, 프로그램 관리자 등의 개선된 인터페이스를 제공하여 멀티태스킹을 지원하고 대중적인 인기를 얻었으나, 출시 이후 반독점 논란에 휘말리기도 했다.
  • 1990년 소프트웨어 - 페인트샵 프로
    로버트 보이트가 개발한 페인트샵 프로는 이미지 변환기로 시작하여 다양한 이미지 편집 기능을 추가하며 발전해 왔고, 코렐에 인수된 후에도 기능 개선을 통해 어도비 포토샵과 경쟁하는 대표적인 이미지 편집 프로그램이다.
  • 자유 버전 관리 소프트웨어 - 깃 (소프트웨어)
    깃은 리누스 토르발스가 개발한 분산 버전 관리 시스템으로, 빠른 분기 및 병합, 분산 개발 환경 지원, 대규모 프로젝트 처리 효율성 등의 특징을 가지며, 깃허브, 깃랩 등에서 서비스되며 소프트웨어 개발 분야에서 널리 사용된다.
  • 자유 버전 관리 소프트웨어 - 비트키퍼
    비트키퍼는 래리 맥보이가 설계한 버전 관리 시스템으로, 리눅스 커널 개발 지원을 위해 거론되다 라이선스 정책 변경으로 오픈 소스 커뮤니티와 갈등을 겪었으나, 이후 아파치 라이선스 2.0으로 오픈 소스화되었다.
  • 소프트웨어 공학 - 통합 개발 환경
    통합 개발 환경(IDE)은 코드 편집, 빌드, 디버깅 등 소프트웨어 개발에 필요한 여러 기능을 통합적으로 제공하는 응용 프로그램이다.
  • 소프트웨어 공학 - 소프트웨어 개발
    소프트웨어 개발은 요구사항 분석, 설계, 코딩, 테스트, 배포, 유지보수를 포함하는 컴퓨터 프로그램 및 관련 데이터를 만드는 과정으로, 다양한 방법론과 도구가 사용되며, 개발자 외에도 다양한 전문가들이 참여한다.
CVS - [IT 관련 정보]에 관한 문서
기본 정보
유형버전 관리 시스템
개발자http://savannah.nongnu.org/project/memberlist.php?detailed=1&group=cvs
최초 릴리스1990년 11월 19일
최신 안정화 버전1.11.23
최신 안정화 버전 출시일2008년 5월 8일
최신 미리보기 버전1.12.13
최신 미리보기 버전 출시일2005년 9월 28일
운영 체제유닉스 계열, 윈도우
프로그래밍 언어C
라이선스GNU GPL
웹사이트http://cvs.nongnu.org

2. 역사

CVS는 초기 버전 관리 시스템 중 하나로, 1980년대 중반부터 개발되어 1990년대를 거쳐 널리 사용되었다.

CVS는 네트워크를 통한 사용을 고려한 최초의 소스 코드 관리 시스템이었고, 프리웨어였기 때문에 1990년대에 널리 사용되었다. 그러나 여러 결함이 발견되면서 Subversion, Perforce, Git 등 새로운 도구로 대체되었다.

현재 CVS 코드는 지원자 그룹이 관리하고 있다. CVS의 마이크로소프트 윈도우 판 개발은 CVSNT라는 별도 프로젝트로 분리되어 시스템 특징을 살리는 데 주력하고 있으며, 유닉스 플랫폼도 지원한다.

CVS와 GNU 프로젝트의 관계는 다소 모호했다. GNU 웹사이트는 CVS 프로그램을 배포했지만, 공식적으로 GNU 프로젝트에 속하지는 않았다. CVS 개발은 cvshome.org에서 savannah.nongnu.org로 이전되었으며, FTP 사이트에서는 전통적으로 /non-gnu/ 디렉터리에 저장되었다.

2. 1. 초기 개발 (1980년대 중반)

CVS는 초기에 버전 관리 시스템으로 불렸으며, 각각의 파일을 관리했지만 프로젝트 전체를 관리하지는 않았다. 딕 그룬(Dick Grune)은 자신의 웹사이트에 CVS의 짧은 역사에 대해 다음과 같이 기술했다.

I made CVS to work with the ACK (Amsterdam Compiler Kit) C compiler, together with my students Erik Baalbergen and Maarten Waage. The three of us were pretty much at odds (one student was a regular nine-to-fiver, one was irregular, and I could only work on the project in the evenings). The project ran from June 1984 to August 1985. CVS was initially called cmt, and it was a clear success in allowing us to work on our versions independently.|딕 그룬영어

위의 내용은 다음과 같이 번역될 수 있다.

"나는 내 제자인 에릭 발베르겐(Erik Baalbergen)과 마텐 와지(Maarten Waage)와 함께 ACK(Amsterdam Compiler Kit) C 컴파일러로 작업하기 위해 CVS를 만들었다. 우리 셋은 꽤 엇갈렸다(한 학생은 보통 9-5시에, 한 학생은 규칙적이지 못했다. 그리고 나는 저녁에만 프로젝트를 할 수 있었다). 프로젝트는 1984년 6월부터 1985년 8월까지 진행되었다. CVS는 초기에 cmt로 불렸고, 그것은 우리에게 버전을 독립적으로 진행할 수 있게 하는 뚜렷한 이유가 되었다."

이 코드는 1986년 6월 23일에 mod.sources에 배포되었으며, 구글 그룹스에서 [http://groups.google.com/groups?:mod.sources.*&hl=en&lr=lang_en&ie=UTF-8&c2coff=1&safe=off&selm=122@mirror.UUCP&rnum=2 유즈넷 글 원본]을 확인할 수 있다.

1989년 4월, 브라이언 베를리너(Brian Berliner)가 CVS라는 동일한 버전으로 코드를 발전시켰다. 이후 제프 포크(Jeff Polk)를 비롯한 많은 사람들이 기여했다. 브라이언 베를리너는 CVS 프로그램 개선에 대한 글을 썼는데, 이 글에서는 프로그램이 어떻게 확장되었고, SunOS 커널 작업을 하는 서드 파티 개발자인 프리즈마에서 내부적으로 사용되었으며, GPL을 따르는 커뮤니티를 위해 배포되었는지를 설명했다.

2. 2. 발전 및 공개 (1980년대 후반 ~ 1990년대)

CVS는 초기 버전 관리 시스템인 리비전 관리 시스템(Revision Control System)에서 유래되었다. 리비전 관리 시스템은 각각의 파일은 관리했지만, 프로젝트 전체를 관리하지는 않았다. 딕 그룬(Dick Grune)은 자신의 웹사이트에 CVS의 간략한 역사를 다음과 같이 기술했다.

CVS was created by me for working on the ACK (Amsterdam Compiler Kit) C compiler with my students Erik Baalbergen and Maarten Waage. The three of us were pretty much out of phase (one student was a regular nine-to-fiver, one was erratic, and I could only work on the project in the evenings). The project ran from June 1984 to August 1985. CVS was initially called cmt, and it was a clear success in allowing us to work on our versions independently.영어

딕 그룬은 1986년 6월 23일에 코드를 공개적으로 발표했다.

이후 현재 버전의 CVS로 발전한 코드는 1989년 4월 브라이언 베를리너(Brian Berliner)에 의해 시작되었으며, 이후 제프 폴크(Jeff Polk) 및 다른 많은 기여자들이 참여했다. 브라이언 베를리너는 CVS 프로그램에 대한 자신의 개선 사항을 소개하는 논문을 작성했는데, 이 논문은 SunOS 커널을 작업하는 제3자 개발업체인 Prisma에서 이 도구가 어떻게 확장되어 내부적으로 사용되었는지 설명하며, GPL에 따라 커뮤니티를 위해 공개되었다. 1990년 11월 19일, CVS 버전 1.0이 개발 및 배포를 위해 자유 소프트웨어 재단에 제출되었다.

최신 버전은 2008년 5월 8일에 출시되었다.

2. 3. 한계와 대안 (2000년대 이후)

CVS는 여러 한계점을 가지고 있었고, 2000년대 이후에는 이러한 한계를 극복하기 위한 다양한 대안들이 등장했다.

CVS의 주요 한계점은 다음과 같다.

  • 파일 이름을 변경하거나 제거할 수 없고, 제거 후 다시 추가해야 한다.
  • 디렉터리 이동이나 이름 변경을 허용하지 않는다. 서브 디렉터리의 파일은 모두 지우고 다시 추가해야 한다.[1]
  • 유니코드 파일을 제한적으로 지원한다.[2]
  • 파일명 변경/삭제, 디렉토리명 변경/삭제를 제대로 처리하지 못한다.
  • 서로 다른 문자 코드(JIS/SJIS/EUC)에 대한 지원이 없다.
  • 기본적으로 개별 파일의 히스토리는 알 수 있지만, 리포지토리 전체의 히스토리는 쉽게 알 수 없다.
  • 바이너리 파일 처리가 미숙하여 리포지토리 크기가 증가한다.
  • 분산 리포지토리를 지원하지 않는다.
  • 원자적 커밋을 지원하지 않는다. 여러 파일을 동시에 커밋할 경우, CVS에서는 각 파일을 (아주 짧은 시간 동안) 하나씩 커밋한 것으로 처리하므로 원자성을 만족할 수 없다.


CVS를 만들었던 핵심 개발자들은 이러한 한계를 인식하고, 2004년 초부터 Subversion(SVN)을 배포하여 CVS를 대체하고자 했다.[3] Subversion(SVN)은 CVS의 한계를 일부 수정한 것이다. 또한 [https://web.archive.org/web/20060302144122/http://www.wandisco.com/php/product_detail.php?lname=cvs CVS용 WANdisco] 같은 도구는 커밋의 원자성, 역할 기반의 접근 제어, 멀티 사이트 등이 없는 CVS의 여러 단점을 보완했다.[4]

시간이 지남에 따라 개발자들은 기능을 추가하고, 작동 모델을 변경하며, 개발자의 생산성을 향상시키기 위해 CVS를 기반으로 새로운 버전 관리 시스템을 만들었다. CVS 대체 프로젝트에는 CVSNT와 Subversion이 있다.

3. 특징 및 작동 방식

CVS는 클라이언트-서버 구조를 가지는 버전 관리 시스템이다. 서버는 프로젝트의 현재 버전과 변경 이력을 보관하고, 클라이언트는 서버에 접속하여 프로젝트의 복사본을 가져와 작업한 후 변경 사항을 서버에 반영(체크인)한다.

여러 클라이언트는 동시에 프로젝트를 복사하여 작업할 수 있으며, 변경 사항을 체크인할 때 서버는 이를 통합한다. 만약 두 클라이언트가 동일한 파일의 같은 부분을 수정하여 충돌이 발생하면, 서버는 사용자에게 충돌 사실을 알리고 수동으로 해결하도록 한다. 체크인이 성공하면 파일의 버전 번호가 자동으로 증가하고, 관련 정보가 로그 파일에 기록된다. 클라이언트는 "업데이트" 명령을 통해 서버의 최신 변경 사항만 다운로드받을 수 있어 효율적이다.

CVS는 델타 압축을 사용하여 동일한 파일의 다른 버전을 효율적으로 저장하며, 프로젝트의 여러 "가지"를 관리할 수 있다. 예를 들어, 소프트웨어 배포판은 버그 수정을 위한 가지로, 새로운 기능 개발 버전은 별도의 가지로 관리할 수 있다.

CVS는 관리하는 단일 프로젝트를 ''모듈''로, CVS 서버는 관리하는 모듈을 ''저장소''에 저장한다. 프로그래머는 모듈을 ''체크아웃''하여 사본(작업 사본, 샌드박스, 작업 공간)을 얻는다. 작업 사본의 변경 사항은 ''커밋''하여 저장소에 반영되고, ''업데이트''는 저장소의 변경 사항을 얻거나 ''병합''하여 작업 사본에 반영한다.

CVS는 네트워크 사용을 고려한 초기 소스 코드 관리 시스템 중 하나였으며, 프리웨어였기 때문에 1990년대에 널리 사용되었다. 그러나 여러 결함으로 인해 Subversion, Perforce, Git 등 새로운 도구로 대체되었다.

CVS는 원래 단일 파일 버전 관리 도구인 RCS를 기반으로 만들어졌지만, 현재는 RCS에 의존하지 않는다. RCS는 파일을 잠가 동시 편집을 금지하는 반면, CVS는 동시 편집을 허용하고 충돌 발생 시 병합을 통해 해결한다.

3. 1. 클라이언트-서버 구조

CVS는 클라이언트-서버 구조를 사용한다. 서버는 프로젝트의 현재 버전과 변경 이력을 저장하고, 클라이언트는 서버에 접속하여 프로젝트의 전체 복사본을 "체크아웃"하여 로컬에서 작업한 후 변경 사항을 다시 서버에 "체크인"하는 방식이다.

여러 개발자가 동시에 동일한 프로젝트에서 작업할 수 있다. 각 개발자는 프로젝트의 자체 "작업 사본" 내에서 파일을 편집하고 수정 사항을 서버로 전송(체크인)한다. 서버는 파일의 최신 버전에 대한 변경 사항만 허용하여 충돌을 방지한다. 따라서 개발자는 다른 사용자의 변경 사항을 정기적으로 통합하여 작업 사본을 최신 상태로 유지해야 한다. 이 작업은 대부분 CVS 클라이언트에서 자동으로 처리되며, 체크인된 수정 사항과 아직 체크인되지 않은 파일의 로컬 버전 사이에 편집 충돌이 발생할 때만 수동 개입이 필요하다.

클라이언트는 "업데이트" 명령을 사용하여 로컬 사본을 서버의 최신 버전으로 업데이트할 수 있다. 또한 버전을 비교하거나, 변경 사항의 전체 기록을 요청하거나, 프로젝트의 특정 시점의 스냅샷을 체크아웃할 수도 있다. 체크인 작업이 성공하면 관련된 모든 파일의 버전 번호가 자동으로 증가하고, 서버는 사용자가 제공한 설명, 날짜, 작성자 이름을 로그 파일에 기록한다.

CVS 서버는 "익명 읽기 접근"을 허용할 수 있다. 이 경우 클라이언트는 빈 암호나 공개된 암호(예: "anoncvs")를 사용하여 버전을 체크아웃하고 비교할 수 있다. 이러한 방식은 OpenBSD가 처음 도입하였다. 변경 사항을 체크인하려면 개인 계정과 암호가 필요하다.

3. 2. 버전 관리

CVS는 클라이언트-서버 구조를 가진 버전 관리 시스템이다. 서버는 프로젝트의 현재 버전과 변경 이력을 저장하고, 클라이언트는 서버에 접속하여 프로젝트의 복사본을 가져와 작업한 후 변경 사항을 다시 서버에 반영(체크인)한다. 일반적으로 클라이언트와 서버는 네트워크를 통해 연결되지만, 개인 개발 환경에서는 동일한 컴퓨터에서 실행될 수도 있다. 서버는 주로 유닉스 기반 시스템에서 운영되지만, 윈도우 NT용 서버도 존재한다. 클라이언트는 다양한 운영체제에서 사용할 수 있다.

여러 클라이언트가 동시에 프로젝트를 복사하여 작업할 수 있으며, 변경 사항을 체크인할 때 서버는 이를 통합한다. 만약 두 클라이언트가 동일한 파일의 같은 부분을 수정하여 충돌이 발생하면, 서버는 두 번째 체크인을 거부하고 사용자에게 충돌 사실을 알린다. 이 경우 사용자는 수동으로 충돌을 해결해야 한다. 체크인이 성공하면 파일의 버전 번호가 자동으로 증가하고, 서버는 사용자가 작성한 설명, 날짜, 작성자 이름을 로그 파일에 기록한다.

클라이언트는 다른 버전의 파일을 비교하거나, 변경 이력을 확인하고, 특정 날짜나 버전의 프로젝트 스냅샷을 얻을 수 있다. 많은 오픈 소스 프로젝트는 익명 계정을 통한 읽기 전용 접근을 허용한다. OpenBSD가 이러한 방식을 처음 도입했으며, 클라이언트는 암호 없이 공개 암호(예: "anoncvs")를 사용하여 체크아웃하거나 버전을 비교할 수 있다. 변경 사항을 체크인할 때만 개인 계정과 암호가 필요하다.

클라이언트는 "업데이트(update)" 명령을 사용하여 서버의 최신 변경 사항만 다운로드받을 수 있다. 이를 통해 전체 프로젝트를 매번 다시 받을 필요가 없다.

CVS는 프로젝트의 여러 "가지"를 관리할 수 있다. 예를 들어, 소프트웨어의 배포판은 버그 수정을 위한 가지로, 새로운 기능과 큰 변화가 있는 개발 버전은 별도의 가지로 관리할 수 있다.

CVS는 델타 압축을 사용하여 동일한 파일의 다른 버전을 효율적으로 저장한다. 이는 텍스트 파일처럼 줄 단위 변경이 많은 파일에 적합하다. 하지만 변경 사항이 적은 대용량 텍스트 파일에는 효과적이지만, 바이너리 파일처럼 버전 간 델타 압축이 어려운 경우에는 각 버전을 개별적으로 저장한다.

CVS는 심볼릭 링크를 저장하지 않는데, 이는 보안 위험을 초래할 수 있기 때문이다. 예를 들어, 중요 파일에 대한 심볼릭 링크가 저장소에 저장되면 체크인되지 않은 상태에서도 해당 파일에 접근할 수 있게 된다.

CVS는 관리하는 단일 프로젝트(관련 파일 집합)를 ''모듈''이라고 부른다. CVS 서버는 관리하는 모듈을 ''저장소''에 저장한다. 프로그래머는 모듈을 ''체크아웃''하여 사본을 얻는다. 체크아웃된 파일은 ''작업 사본'', ''샌드박스'', 또는 ''작업 공간''이라고 불린다. 작업 사본의 변경 사항은 ''커밋''을 통해 저장소에 반영된다. ''업데이트''는 저장소의 변경 사항을 가져오거나 ''병합''하여 작업 사본에 반영하는 것이다.

CVS는 클라이언트-서버 구조를 사용한다. 서버는 프로젝트의 현재 버전과 기록을 저장하고, 클라이언트는 서버에 연결하여 프로젝트의 전체 사본을 "체크아웃"하고, 이 사본에서 작업한 다음 나중에 변경 사항을 "체크인"한다. CVS 서버는 "익명 읽기 액세스"를 허용할 수 있으며, 클라이언트는 빈 암호 또는 공개 암호(예: "anoncvs")로 버전을 체크아웃하고 비교할 수 있다. 변경 사항을 체크인하려면 개인 계정과 암호가 필요하다.

여러 개발자가 동시에 동일한 프로젝트에서 작업할 수 있으며, 각 개발자는 자체 "작업 사본" 내에서 파일을 편집하고 수정 사항을 서버로 전송(또는 ''체크인'')한다. 충돌을 방지하기 위해 서버는 파일의 최신 버전에 대한 변경 사항만 허용한다. 따라서 개발자는 다른 사용자의 변경 사항을 정기적으로 통합하여 작업 사본을 최신 상태로 유지해야 한다. 이 작업은 대부분 CVS 클라이언트에서 자동으로 처리되며, 체크인된 수정 사항과 아직 체크인되지 않은 파일의 로컬 버전 사이에 편집 충돌이 발생할 때만 수동 개입이 필요하다.

클라이언트는 "업데이트" 명령을 사용하여 로컬 사본을 서버의 최신 버전으로 업데이트할 수도 있다. 클라이언트는 또한 버전을 비교하고, 변경 사항의 전체 기록을 요청하거나, 프로젝트의 기록 스냅샷(예: 지정된 날짜 기준)을 체크아웃할 수 있다. 체크인 작업이 성공하면 관련된 모든 파일의 버전 번호가 자동으로 증가하고, 서버는 사용자가 제공한 설명 줄, 날짜 및 작성자 이름을 로그 파일에 기록한다. CVS는 또한 각 커밋 후 외부의 사용자가 지정한 로그 처리 스크립트를 실행할 수 있다. 이러한 스크립트는 CVS의 `loginfo` 파일의 항목에 의해 설치되며, 이메일 알림을 트리거하거나 로그 데이터를 웹 기반 형식으로 변환할 수 있다.

CVS는 또한 프로젝트의 여러 "분기"를 유지 관리할 수 있다. 예를 들어, 소프트웨어 프로젝트의 출시된 버전은 버그 수정을 위해 사용되는 한 분기를 형성할 수 있으며, 주요 변경 사항과 새로운 기능이 있는 현재 개발 중인 버전은 별도의 분기를 형성할 수 있다. CVS는 대부분의 작업이 트렁크에서 이루어지며 분기는 일반적으로 단명하거나 기록으로 남아야 한다고 가정한다. 설계대로 사용하면 분기를 쉽게 관리할 수 있으며 분기 작업은 효율적이고 빠르다.

주로 소프트웨어 개발에서의 소스 코드를 비롯한 텍스트 파일의 공유(저장, 꺼내기)에 사용된다. 텍스트 파일의 분기된 버전을 관리할 수 있다.

CVS는 네트워크 사용을 고려한 최초의 소스 코드 관리 시스템 중 하나였으며, 프리웨어였기 때문에 1990년대에 널리 사용되었다. 그러나 여러 결함이 발견되면서 Subversion, Perforce, Git 등과 같은 새로운 도구로 대체되었다.

CVS는 원래 단일 파일을 대상으로 하는 버전 관리 도구인 RCS를 기반으로 만들어졌지만, 현재는 RCS에 의존하지 않는다(저장소 내 데이터 보존은 여전히 RCS와 동일하다). $Id:$ 등의 키워드는 RCS의 흔적이다. RCS는 diff와 같은 UNIX 계열 텍스트 처리 프로그램을 기반으로 만들어졌다.

RCS는 멀티 유저 시스템(여러 덤 터미널이 하나의 컴퓨터에 연결되어 CPU와 파일 시스템을 공유하는 환경)에서 동일한 파일/폴더를 공유하는 환경에서 사용된 반면, CVS는 CVS 서버를 별도의 컴퓨터에 구축할 수 있다.

동일한 파일을 여러 사람이 동시에 편집할 때 발생하는 충돌에 대한 접근 방식도 다르다. RCS는 파일을 잠금으로써 동시 편집을 금지한다. 반면 CVS는 RCS와 같은 강력한 잠금 메커니즘을 갖지 않는다. 즉, 동시 편집을 허용하는 대신 충돌이 발생한 경우 커밋 시 병합 작업이 필요하다.

3. 3. 용어

CVS는 관리하는 단일 프로젝트(관련 파일 집합)를 ''모듈''로 지정한다. CVS 서버는 관리하는 모듈을 ''저장소''에 저장한다. 프로그래머는 모듈을 ''체크아웃''하여 사본을 얻는다. 체크아웃된 파일은 ''작업 사본'', ''샌드박스'' 또는 ''작업 공간'' 역할을 한다. 작업 사본에 대한 변경 사항은 ''커밋''하여 저장소에 반영된다. ''업데이트''는 저장소의 변경 사항을 얻거나 ''병합''하여 작업 사본에 반영하는 것이다.

CVS는 주로 소프트웨어 개발에서 소스 코드를 비롯한 텍스트 파일의 공유(저장, 꺼내기)에 사용된다. 텍스트 파일의 분기된 버전도 관리할 수 있다.

4. 한계

CVS는 몇 가지 한계점을 가지고 있어 사용에 불편함이 있을 수 있다.


  • 기본적으로 개별 파일의 히스토리는 알 수 있지만, 리포지토리 전체의 히스토리는 쉽게 파악하기 어렵다.
  • 분산 리포지토리를 지원하지 않는다.[1]
  • 여러 파일을 동시에 커밋할 경우, CVS에서는 각 파일을 (아주 짧은 시간 동안) 하나씩 커밋한 것으로 처리하므로, 원자성을 만족할 수 없다.[1]


CVS를 만들었던 핵심 개발자들은 이러한 한계를 극복하기 위해 2004년 초부터 Subversion(SVN)을 배포하기 시작했다. 또한 [https://web.archive.org/web/20060302144122/http://www.wandisco.com/php/product_detail.php?lname=cvs CVS용 WANdisco] 같은 도구는 커밋의 원자성, 역할 기반 접근 제어, 멀티 사이트 등이 없는 CVS의 여러 단점을 보완하였다.

4. 1. 파일 및 디렉토리 관리


  • CVS 저장소의 파일들은 이름을 바꿀 수 없다. 제거하고 나서 다시 추가해야 한다.
  • CVS 프로토콜은 디렉터리의 이동이나 이름 변경을 허용하지 않는다. 서브 디렉터리의 파일은 모두 지우고 다시 추가해야 한다.
  • 아스키 코드가 아닌 유니코드 파일 이름을 제한적으로 지원한다.
  • 서로 다른 문자 코드(JIS/SJIS/EUC)에 대한 지원이 없다.
  • 바이너리 파일 처리가 미숙하여 리포지토리 크기 증가로 이어진다.

4. 2. 유니코드 지원

CVS는 아스키 코드로 된 파일 이름이 아닌 유니코드 파일을 제한적으로 지원한다.[1] 또한 서로 다른 문자 코드(JIS/SJIS/EUC)에 대한 지원은 없다.[1]

4. 3. 원자성 부족

CVS 저장소의 파일들은 이름을 바꿀 수 없고, 제거한 후 다시 추가해야 한다.[1] CVS 프로토콜은 디렉터리의 이동이나 이름 변경을 허용하지 않으므로, 서브 디렉터리의 파일은 모두 지우고 다시 추가해야 한다.[1] 아스키 코드가 아닌 유니코드 파일은 제한적으로 지원한다.[1]

CVS는 여러 파일을 동시에 커밋할 때 각 파일을 (아주 짧은 시간 동안) 하나씩 커밋한 것으로 처리하므로, 원자성을 만족할 수 없다.[1]

4. 4. 분산 버전 관리 미지원

CVS는 파일이나 디렉터리의 이름을 변경하거나 이동하는 것을 지원하지 않는다. 파일을 변경하려면 제거 후 다시 추가해야 하며, 디렉터리를 변경하려면 서브 디렉터리의 파일을 모두 지우고 다시 추가해야 한다. 또한 아스키 코드가 아닌 유니코드 파일에 대한 지원이 제한적이다.

CVS는 분산 리포지토리를 지원하지 않으며, 여러 파일을 동시에 커밋할 때 원자성을 보장하지 않는다.

5. 관련 도구

CVS는 주로 소프트웨어 개발에서 소스 코드를 비롯한 텍스트 파일의 공유(저장, 꺼내기)에 사용되며, 텍스트 파일의 분기된 버전을 관리할 수 있다. 1990년대에 널리 이용되었으나, 여러 문제점이 드러나면서 Subversion, Perforce, Git 등의 새로운 도구로 대체되었다.[4]

CVS와 관련된 주요 도구는 다음과 같다.


  • 윈도우: WinCvs, TortoiseCVS (탐색기 확장)[4]
  • 클래식 맥 OS, macOS: MacCvs[4]
  • GNOME: gCvs[4]
  • 이클립스: 클라이언트 기능 내장
  • KDE: GUI 프런트 엔드로 Cervisia 공개
  • ViewVC: CVS 및 Subversion 저장소를 브라우저에서 열람하기 위한 도구. SourceForge.net에서 채택[5]
  • Bonsai: 모질라에서 개발한 CVS 저장소를 브라우저에서 관리하기 위한 도구[6]
  • OpenGrok: 소스 코드를 브라우저에서 검색 및 참조하기 위한 도구. CVS, Subversion, Git, Mercurial, Bazaar 등 다수의 버전 관리 시스템 지원. Java로 작성[7]
  • StatCVS: CVS 저장소에서 정보를 가져와 표나 그래프를 사용한 그래픽 보고서를 작성하는 Java로 작성된 도구[8]

참조

[1] 뉴스 Stable CVS Version 1.11.23 Released! https://savannah.non[...]
[2] 뉴스 CVS Feature Version 1.12.13 Released! * Security Update * https://savannah.non[...]
[3] 웹사이트 Contents of /ccvs/README https://cvs.savannah[...]
[4] 웹사이트 CvsGui http://cvsgui.source[...]
[5] 웹사이트 ViewVC(ViewCVS) http://www.viewvc.or[...]
[6] 웹사이트 Bonsai http://www.mozilla-j[...]
[7] 웹사이트 OpenGrok by OpenGrok https://oracle.githu[...]
[8] 웹사이트 StatCVS - Repository Statistics - Introduction http://statcvs.sourc[...]

관련 사건 타임라인

( 최근 20개의 뉴스만 표기 됩니다. )



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com