회사에서 subversion 쓰시는 분 있나요?

송지석의 이미지

이번에 저희 연구소 소스코드 서버를 새로 장만했는데요.
소장님과 얘기하던 중 subversion 얘기가 나왔는데 덜컥 cvs대신 subversion을 쓰자고 하셔서 새로 subversion으로 서버를 구축해야 되게 생겼습니다.
서버는 당연히 리눅스지만(FC3로 깔았습니다) 클라이언트들은 전부 윈도입니다.
혹시 회사에서 소스코드 관리를 subversion으로 하시는 분 있으신가요?
어떤식으로 구축하셨는지 케이스를 알려주시면 좋겠네요.
cvs는 좀 써봤지만 subversion은 처음이라..
일단 보니까 http,https에 WAD로 쓰는 거랑 svn://와 ssh+svn:// 이렇게 쓸 수 있는 것 같은데 여러가지 프로젝트 관리하고 팀별로 사람들 별로 권한을 주기 쉬운 것은 어떤 게 나을 지..
일단 http쪽은 간단한 샘플로 해보긴했습니다만.. 권한은 htpasswd로 만든 패스워드 파일로 하구요.
여러분들의 사용 경험이나 하우투등을 부탁드립니다.

ssggkim의 이미지

사용자가 5명 이내의 규모라 도움이 되실지는 모르겠지만 써보겠습니다. :wink:

서버의 역할은 file 서버입니다. 그래서 samba와 subverion이 돌아가고요 사용하지 않는 port들은 iptable로 차단되어 있습니다.
사용하는 protocol은 ssh+svn으로 하고 버전관리를 이용하지 않는 사용자의 ssh 접속은 막았습니다.

Repository type은 BD와 fsfs가 있는데 여러 사람이 자주 이용하는 경우 BD는 자주 깨지더군요. ( 지금은 좀 나아졌는지는 잘... ) fsfs로는 근 8개월간 아직 한번도 깨지는 경우를 보지 못했습니다.

저희도 client는 모두 windows인데 tortoisesvn을 써서 편하게 쓰고 있습니다. 사람들 적응도 빠른 편이구요.

송지석의 이미지

다시 질문드리겠습니다.
지금 subversion을 시험삼아 조금씩 사용중인데 이게 전부 change set 개념이라 상관 없는 다른 디렉토리의 내용이 바뀌어도 버전이 바뀌는 건가요?
그럼 다음 같은 상황에선 어떻게 하는 게 정상일 지..

지금 개발할 프로젝트는 스펙 문서와 전에까지 해놨던 소스, 바이너리, 설치 파일등 해서 모두 1GB 가까이 됩니다. (확실히 cvs보다 subversion이 빠르긴 하더군요)
그리고 이제 개발할 내용도 새로 스펙 문서 잡고 프로토콜이랑 기타 문서들도 정리해놔야 하고 소스코드도 여러가지입니다.
유닉스 서버 프로그램도 있고, 윈도 PC용 프로그램, 하위에 회사에서 생산하는 하드웨어 모듈이 있기 때문에 임베디드 OS, 포팅된 패키지, 그 패키지와 함께 컴파일 해야 하는 어플리케이션들, 다운로더등의 유틸리티 등이 있습니다.
cvs로 관리하는 경우라면 각각 디렉토리를 따로 두고

/doc - 문서들
/svr - 서버 프로그램
/firmware/bsp - 포팅
               /common - 공통 펌웨어, 헤더
               /moduleA  모듈들
               /moduleB  
               /io-sim - io 시뮬레이터
/pc - pc 프로그램
              /simulator
              /station-sw

/utilities
              /util1
              ...
/installation
              현장 설치 버전 소프트웨어 릴리즈(인스톨러, 기타 특별 자료)

이런 식으로 관리해두고 모듈중에 공통인 것은 CVSROOT 안에 modules에 등록해서 쓰면 되겠죠.
그런데 subversion으로 하면 이 위처럼 하는 경우 어느 한 디렉토리에서만 수정이 가해지면 모든 모듈이 다 버전이 올라가버리겠죠.
그게 싫다면 각 모듈마다 따로따로 리포지토리를 만들어야 할텐데
그렇게 한다면 공통 모듈이 있는 경우 이걸 어떻게 할 지 난감해집니다.
subversion을 쓸 때는 저런 구조에서 다른 방식으로 접근하는 게 있나요?
아니면 그냥 쓰던 대로 cvs를 써야 할까요?
bugiii의 이미지

cvs modules 의 역할을 subversion 에서는 property 중 externals 라는 것으로 지원하는 것 같습니다.

저도 현재 samba 를 PDC 로 하고 인증을 pam_smbpass.so 로 하는 subversion 을 구성하고 있습니다. 지석님과 똑같은 고민으로 문서를 보니 비슷한 역할을 하는 것 같습니다.

한번 해보시고 글을 부탁드립니다. ^^;

sh.의 이미지

작년에 작은 프로젝트에서 subversion을 써봤습니다.
(참고로 이전에 버전관리 시스템을 써본적은 없었습니다)
freebsd서버에 subversion 1.0을 설치하고 윈도우즈용 클라이언트인 TortoiseSVN을 사용했습니다. 인증은 svn+ssh로 했는데 TortoiseSVN의 경우 putty에 포함된 plink가 같이 포함되어 이걸 이용하더군요.

그런데 송지석님이 말씀하신

Quote:
그런데 subversion으로 하면 이 위처럼 하는 경우 어느 한 디렉토리에서만 수정이 가해지면 모든 모듈이 다 버전이 올라가버리겠죠.

부분은 정확하게 기억은 잘 안나지만 단 한개의 파일을 수정했을 때라도 전체 리비전이 올라가기는 하지만 수정되지 않은 다른 파일들의 리비전은 올라가지 않던걸로 기억합니다.
a, b, c, d 파일중에 b만 수정하게되면 전체 리비전은 +1 되겠지만 a, c, d의 리비전은 그대로였던걸로 기억합니다.
(확인해보고싶은데 윈도우즈를 새로 설치하는 바람에 --;)
pynoos의 이미지

동시에 관련된 모듈을 체크아웃해야하는 구성은

svn ps svn:externals -F <file> .

를 사용하면 언제든지 현재 디렉토리를 가져올 때 하위로 외부 모듈을 체크아웃할 수 있습니다.

리비전이라는 개념이 CVS에서는 파일단위로 몇 단계로 나뉘어 있지만, svn에서는 repository revision만 있습니다. 따라서, 어떤 파일이 수정이 가해질 때, 몇번째 repository revision에서 일어났는지에 대한 정보가 있는 것입니다.

예를 들어, svn log <file>로 보여지는 것들도 사실은 <file>이 관계된 repository의 리비전 로그를 보는 것으로 생각하시면 됩니다.

송지석의 이미지

에 일단 결국은 좀 써보다가 다시 cvs로 돌아갔습니다.
다음번에 svn을 쓴다는 분들이 좀 더 많아지면 써봐야겠습니다.

xozu의 이미지

bs0048 wrote:
작년에 작은 프로젝트에서 subversion을 써봤습니다.
(참고로 이전에 버전관리 시스템을 써본적은 없었습니다)
freebsd서버에 subversion 1.0을 설치하고 윈도우즈용 클라이언트인 TortoiseSVN을 사용했습니다. 인증은 svn+ssh로 했는데 TortoiseSVN의 경우 putty에 포함된 plink가 같이 포함되어 이걸 이용하더군요.

그런데 송지석님이 말씀하신

Quote:
그런데 subversion으로 하면 이 위처럼 하는 경우 어느 한 디렉토리에서만 수정이 가해지면 모든 모듈이 다 버전이 올라가버리겠죠.

부분은 정확하게 기억은 잘 안나지만 단 한개의 파일을 수정했을 때라도 전체 리비전이 올라가기는 하지만 수정되지 않은 다른 파일들의 리비전은 올라가지 않던걸로 기억합니다.
a, b, c, d 파일중에 b만 수정하게되면 전체 리비전은 +1 되겠지만 a, c, d의 리비전은 그대로였던걸로 기억합니다.
(확인해보고싶은데 윈도우즈를 새로 설치하는 바람에 --;)

그냥 개인 백업용으로 쓰고 있습니다. cvs는 써보질 않고 바로 subversion을 쓰고 있구요... 제가 파악하기로는

리비젼은 최종 수정된 것만 리비젼이 올라가구요, 단지 리비젼의 숫자증가가 전체 파일이 공유된다는 것뿐인듯 합니다.

a 1
b 1
c 1
일경우

c 수정 후
a 1
b 1
c 2

b 수정 후
a 1
b 3
c 2

이런식으로요...

tinywolf의 이미지

저희도 연구실에 도입을 고려중입니다.
xozu씨의 말씀처럼 실제로 수정한 부분만 리비전이 올라가는 것이지만..
전체적으로 번호가 올라간다..
즉 특정 폴더 아래의 파일중 가장 높은 리비전이 4라면 폴더도 4가되는..
그런 방식인 것같더군요..
(깔아놓고 한 3일 실험하는동안 이렇게 이해했습니다.)
그리고 5번 리비전으로 업데이트를 한다면..
선택된 것에서 5보다 작거나 같으면서 가장 큰 리비전의 것들을 가져오는 것같았습니다.

ㅡ_ㅡ;

hunkim의 이미지

송지석 wrote:
에 일단 결국은 좀 써보다가 다시 cvs로 돌아갔습니다.
다음번에 svn을 쓴다는 분들이 좀 더 많아지면 써봐야겠습니다.

안타깝군요.

CVS를 사용하신다면 다음의 경우를 생각해 봅시다.

1. 파일 이름을 변경하고 싶을때
2. 디렉토리 이름을 변경하고 싶을때
3. 어떤 파일을 A디렉토리에서 B디렉토리로 옮기고 싶을때
4. 어떤 디렉토리를 삭제하고 싶을때

저희 학교에서는 거의 모든 연구실의 프로젝트, 학과 프로젝트를 SVN을 사용해서 합니다. http://dforge.cse.ucsc.edu 를 참고해보세요. 이전에 저도 CVS를 사용했었는데 SVN을 사용한후 다시 CVS를 사용하려니 (sourceforge와 kldp.net에 프로젝트관계로) 많이 불편하더군요.

참고로 Apache.org의 많은 소스코드들 (Http-1.x, httpd2.x)도 SVN으로 바뀌었습니다.

익명 사용자의 이미지

hunkim wrote:

안타깝군요.

CVS를 사용하신다면 다음의 경우를 생각해 봅시다.

1. 파일 이름을 변경하고 싶을때
2. 디렉토리 이름을 변경하고 싶을때
3. 어떤 파일을 A디렉토리에서 B디렉토리로 옮기고 싶을때
4. 어떤 디렉토리를 삭제하고 싶을때

이런 문제 때문에 subversion 을 써보고 있습니다.

뭐 버전 관리야 제 자체적으로 하니, 상관없더군요.

atie의 이미지

Quote:
The following are the most significant and visible CVS flaws that Subversion rectifies:

* CVS lacks directory versioning. It keeps track of only files, not directories.
* CVS has weak support for the copy, rename, and delete operations on files, a result of the lack of directory versioning.
* CVS lacks atomic commits.

In addition to these highly visible shortcomings, CVS also has the following less obvious shortcomings:

* CVS lacks versioned metadata. It can remember file permissions, but that is about it.
* CVS is hard to extend. There is no API that makes extension an easy process.

Subversion provides the following features that either fix the CVS flaws or improve upon existing CVS features:

* Subversion tracks both files and directories. So when you delete directories, they stay deleted in checkouts—no more specifying the "-dP" option to prune empty directories.
* Subversion handles the copy, rename, and delete operations on files well.
* Subversion performs its commit operations in an atomic fashion. So you will never have an inconsistent code tree as a result of the version control tool. Subversion ensures that either the entire commit or none of it happens. You will never get the situation in which the commit breaks in the middle, leaving some files checked in and others not. Subversion rolls back the whole commit operation, similar to how a relational database operates.
* Subversion provides a well-documented API that allows other applications to embed or extend it.
* Subversion has a uniform method of dealing with all files, both binary and text. It has a binary differencing algorithm that works on text files. You no longer need to tag files as binary or text.
* Subversion has more ways of accessing the repository. While CVS has direct filesystem, pserver, and ssh/rsh remote access, Subversion has direct filesystem, svnserve (analogous to pserver), ssh, and WebDAV. The Subversion API is extensible and makes it easy to add more types of access (for instance, integration with your favorite IDE).
* The powerful API means that Subversion can be extended in ways that CVS cannot (for instance, with new access methods or with new storage backends).


http://www.devx.com/opensource/Article/27884/0/page/1

제 경우는 워낙 eclipse의 cvs 기능이 잘 동작을 하는지라, 위의 subversion의 장점을 읽어보고도 도입을 위한 test를 해볼까 망설이고 있습니다. Subclipse는 잘 동작을 하나요? 쓰는 분이 있으면, 비교 답변 부탁 드립니다.

----
I paint objects as I think them, not as I see them.
atie's minipage

hunkim의 이미지

atie wrote:
Subclipse는 잘 동작을 하나요? 쓰는 분이 있으면, 비교 답변 부탁 드립니다.

처음에 Subclipse가 나왔을때는 많이 불안했는데 지금은 아주 안정적입니다. refactoring 같은거 할때도 자동으로 처리를 해주어 아주 편리합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.