소스 버전 관리에서 릴리스 브랜치는 어떤 정책으로 만드시나요?

superkkt의 이미지

저는 패키지 판매 형태가 아닌, 서비스 제공이 주력 사업인 회사에서 개발을 하고 있습니다. 그래서 개발한 프로그램을 내부적으로만 릴리스하고 외부로 배포하는 경우는 없습니다. 사실 내부 릴리스라고 보기도 좀 뭐하고 그냥 버전 올라가면 제가 설치해주곤 합니다. 그래도 개인적으로는 CVS를 사용해서 릴리스 브랜치 관리를 하고 있습니다.

저는 프로젝트의 메인 트렁크는 항상 마지막 릴리스 상태로 유지를 합니다. 그래서 체크아웃할 때 따로 태그나 브랜치를 지정하지 않고 그냥 헤드를 체크아웃 했을 때 stable version을 받을 수 있도록 하고 있습니다. 그리고 새로운 버전 릴리스와 동시에 버전 번호로 릴리스 브랜치를 생성해서 추후 발생하는 수정이나 기능 추가는 모두 해당 브랜치에서만 작업을 합니다. 나중에 어느 정도 변경이 모였을 때 다시 릴리스를 하고, 이 때 릴리스 브랜치의 수정 사항을 메인 트렁크에 병합 시킵니다. 그리고나서 다시 릴리스 버전 번호로 브랜치를 만들고 위 과정을 반복하고요.

그림으로 그리면 간단한데 글로 적으니 좀 복잡하군요. 아무튼 제 방식의 요지는 HEAD를 체크아웃하면 항상 안정 버전을 받을 수 있도록 하는것입니다. 그런데 버전 관리 책을 보니 저와 반대로 운영을 하는게 바람직한 방식이라고 되어 있군요. 메인 트렁크에서 계속 개발을 하고 릴리스 브랜치는 해당 릴리스의 버그 수정만하고 그것을 메인 트렁크에 병합 시키는 방식으로요. 이건 소프트웨어를 외부로 배포하는 기업을 기준으로 설명한거겠죠?

그래서 다른 분들은 어떤 방법으로 릴리스 브랜치를 관리하는지 궁금하네요. 그리고 혹시 제가 사용하는 방법에 문제가 있다면 지적도 부탁드립니다.

litdream의 이미지

CVS 를 사용하지 않은지 오래되었습니다만 :)
HEAD 는 주로 dev 용으로 사용하고, stable 이라는 tag 을 따로 운영했습니다.
그래서, deploy 할때는 항상 stable tag 에 대해서 check out 받도록 하였습니다.
코드를 submit 해서, 테스트를 통과하면 stable tag 을 옮겨주면서 유지했고요.

삽질의 대마왕...

삽질의 대마왕...

ktd2004의 이미지

제가 운영하는 방식(운영하길 바라는 방식)은 다음과 같습니다.
* trunk : 계속해서 수정중인 최신(개발중인) 소스가 있는 곳
* tags : 외부로 릴리즈 된 버전들이 존재하는 곳
* branches : "bug fix"용 버전, "테스트용 코드" 혹은 "기능추가 코드"들이 있는 곳.

예를 들면
* trunk에서 tags/1.5 버전이 릴리즈되었다면
* trunk는 버전 1.6용 개발 버전이 되어 계속해서 수정되게 됩니다.
* branches/1.5_bugfix 디렉토리에서는 trunk에서 수정중에 발견된 bug들이 fix(merge)되어 tags에 1.5.1, 1.5.2, ...등의 릴리즈 버전으로 나오게 됩니다.
* branches/AppendFunc 에서는 새롭게 추가할 기능에 대해 계속해서 개발하게 됩니다. 이 기능이 완료되면 trunk에 merge됩니다.
* trunk에서 작업중인 추가 기능들이 완료되면 tags/1.6 버전으로 릴리즈되고, 1.6 버전에 대해서 위 동작을 반복하게 됩니다.

대부분의 프로젝트가 위와 같이 진행하는 것으로 알고 있습니다.

superkkt의 이미지

곰곰히 생각을 해보니 제가 사용하는 방법이 별로 안좋은것 같네요. 특히 제 방법에서는 릴리스 브랜치에서 개발을 진행하기 때문에 나중에 릴리스 된 특정 버전의 코드를 찾기가 힘든 문제가 있군요.

======================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com

creativeidler의 이미지

둘다 해봤는데 권장하는 바대로 head를 최신 개발버전으로 유지하는 것이 좀더 나은 것 같더군요. 어차피 cvs에서 가장 많이 받는 사람은 개발자인데 개발자에게 가장 편한 건 head니까요. 그리고 릴리스 과정을 자동화해서 릴리스할 때마다 릴리스 날짜/시간을 태그로 남겨두면 그게 자동으로 릴리스 기록이 되고 문제가 생겼을 때 특정 릴리스 시점으로 롤백하기도 쉽죠. 그리고 권장되는 방법이라는 것은 컨벤션이라는 뜻이기도 하기 때문에 나중에 새로 개발자가 들어왔을 때 좀더 쉽게 적응할 확률이 높기도 하구요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.