SVN 모범 사례-팀 작업


98

저는 SVN으로 시작합니다. 나는 기본 명령을 알고 기본 원칙을 이해합니다. 팀 환경에서 Subversion으로 작업하기위한 팁이나 모범 사례가 있는지 궁금합니다.

코드를 커밋 할 때 합리적으로 자세한 메시지를 추가하는 이점을 볼 수 있지만 명심해야 할 다른 사항이 있습니까?

모든 훌륭한 답변에 감사드립니다. 많은 도움을 받았습니다.

답변:


76

빈번한 커밋을 장려하십시오. 버전 관리를 처음 접하는 팀원은 "올바르게 작동"할 때까지 코드를 저장소에 보관해야한다고 생각할 수 있습니다. 모든 사람에게 가능한 한 빨리 문제를 발견하도록 일찍 그리고 자주 수행하도록 가르치십시오. 코드가 작동 할 때까지 유지하는 대신 팀원이 트렁크를 깨뜨릴 수있는 기능에 대한 분기를 생성하도록 제안하십시오. 그게 ...

분기 및 태깅 관행을 확립하십시오. 기능에 대한 분기 외에도 팀원이 큰 버그 수정을 위해 분기를 사용하도록 권장하십시오. 작업 시작과 끝에 주요 버그 수정에 태그를 지정합니다. 프로덕션 / QA 릴리스에 대한 태그 (및 가능한 분기)를 유지합니다.

트렁크에 대한 정책을 수립하고 고수하십시오. 한 가지 예는 "트렁크는 항상 오류없이 빌드되어야합니다."입니다. 또는 "트렁크는 항상 모든 단위 테스트를 통과해야합니다". 아직 트렁크 기준에 맞지 않는 작업은 반드시 지점에서해야합니다.


1
분기 및 병합은 SVN의 고통입니다. 다른 VCS가 더 잘 처리하지만 SVN에 대해 분기가 많은 프로세스를 옹호하지는 않습니다.
Branan

7
@Branan 잘못된. 소스 제어를 올바르게 사용하는 방법을 모르기 때문입니다. 분기 할 때 작업을 수행하고 트렁크에서 분기를 업데이트하고 트렁크에서 분기로 최신 변경 사항을 매일 또는 하루에 여러 번 (사용자가 선택한) 병합하여 결국에는 쌓인 병합 지옥이 있습니다. 내 PC에서 항상 로컬로 4 ~ 5 개의 분기가 진행되고 있는데, 내가 제대로하고 있기 때문에 사람들이이 악몽을 말하는 것은 결코 아닙니다 ... 사람들이 트렁크에 확인하는 변경 사항을 가지도록 자주 업데이트합니다. 작업 및 관련 코드를 추가
PositiveGuy

66

코드 변경으로 서식 변경을 커밋하지 마십시오.

거대한 파일의 공백 ( Control+ K+ D) 을 재구성하려면 괜찮습니다. 실제 논리적 변경과 별도로 서식 변경을 커밋합니다. 파일에서 함수를 이동하려는 경우에도 마찬가지입니다. 실제 편집과는 별도로 이동을 커밋하십시오.


2
그래서 하루 종일 파일을 편집하고 이제 커밋 할 시간입니다. 서식을 어떻게 분리합니까?
Dustin Getz

23
기존 코드로 서식 변경을 수행하려면 먼저 수행하고 커밋 한 다음 새 코드를 추가하고 코드를 편집합니다. 또는 먼저 추가 / 편집하고 커밋 한 다음 서식 변경을 수행합니다. 이렇게하면 추가 / 편집에 대한 차이점이 실제로 의미가 있으며 단순히 "이제 모든 것이 다릅니다!"라고 말하지 않습니다.
lc.

1
+1. 외부 변경은 관련 변경을 검토하는 데 필요한 노력을 증가시킵니다. 또한 병합 / 포트 변경 (다른 분기)을 더 어렵게 만듭니다.
Ates Goral

2
이것이 따라야 할 좋은 관행이지만, 누구도 이것을 강제 할 수 없을 것이라고 생각합니다. Jason이 옳습니다. 좋은 개발자라면 좋은 diff 도구 (하나는 tortoise SVN에 내장되어 있음)로 공백을 무시하여 노이즈를 걸러 낼 수 있다는 것을 깨달았습니다.
Ken Sykora

1
이는 코드 검토 및 팀 구성원 교육을 통해 시행 될 수 있습니다. 논리적 변경과 코드 변경을 분리하는 것이 검토 자의 부담이되어서는 안된다고 생각합니다. 구현 자의 책임이어야합니다.
Marquez

43

내가 항상 고수하는 핵심 개념 중 하나는 관련 코드 변경 사항을 함께 커밋하는 것 입니다. 결과적으로 동일한 커밋에서 관련없는 코드 변경 사항을 커밋하지 않습니다 . 즉, 하나의 커밋에서 2 개의 버그를 수정하지 말고 (동일한 수정 사항이 아닌 경우) 2 개의 커밋 각각에서 절반의 버그 수정을 커밋하지 마십시오. 또한 시스템의 관련없는 부분에 새로운 개선 사항을 추가하거나 다른 작업에 필요한 사항을 추가해야하는 경우 개선 사항을 별도로 커밋합니다. 아이디어는 누구나 자체적으로 (또는 자체적으로 롤백하기) 원하는 변경 사항은 별도의 커밋이어야한다는 것입니다. 병합을 수행하거나 손상된 기능을 롤백 할 때 많은 골칫거리를 절약 할 수 있습니다.


4
이것에 +1. 당신이 저질렀을 때 너무 고통스러워 보입니다. 그러나 원자 커밋으로 가득 찬 저장소는 오래된 코드를 검토 할 때 값을 매길 수 없습니다.
Gordon Wilson

2
기능 브랜치의 목적이 아닙니다. 기능 브랜치에서 필요한만큼 커밋을 수행 한 다음 준비가되면 트렁크에 병합합니다. 롤백은 병합 된 커밋을 제거하는 것을 의미합니다. +1 관련 코드를 함께 유지하기 위해 ...
farinspace 2011-09-11

16

이미 많이 언급되었으며 여기에 몇 가지 더 있습니다.

  1. 소스 제어에서 원하지 않는 파일 (예 : 구성, 컴파일 된 파일 등)이있는 경우 무시 목록에 추가합니다 . 이렇게하면 항상 SVN에 알려지지 않은 것으로 표시되는 빈 파일 목록을 예상하여 추가하지 않은 파일을 발견 할 수 있습니다.

  2. 커밋 된 변경 사항 및 이상적으로는 패치와 관련 하여 개발자 메일 링 목록 (또는이 대상에 대한 특정 항목)에 이메일을 보내는 커밋 후 이벤트를 추가 합니다.

  3. 버그 추적기와 통합 하여 커밋에 대한 참조가 차이점에 대한 링크와 함께 버그 / 기능 요청에 표시되도록합니다. MantisBT 와 같은 버그 추적기가 이를 지원합니다.

  4. 지속적인 통합 (예 : CruiseControl.NET ), 빌드 용 NAnt 및 단위 테스트 용 NUnit / VS 와의 통합을 고려하십시오 . 이렇게하면 사용자가 코드를 체크인하거나 예약 된 간격에 따라 코드가 컴파일되고 단위 테스트가 실행되고 개발자는 프로세스에 대한 피드백을받습니다. 이것은 또한 저장소가 고장난 경우 (즉, 빌드하지 않는 경우) 나머지 팀에게 경고합니다.


우리가 사용하는 연습은 모든 구성 파일이 config.php.config와 같은 확장명을 변경했거나 이와 같은 방식으로 구성 파일을 서버에 보관하지만 모든 팀 구성원은 자체적으로 소유한다는 것입니다. svn 버전을 복사하는 것보다 설정 파일에 큰 변화가있을 때 ...
zidane aug

15

글쎄, 기본 :

  • 버전에 대한 품질 보증을 시작하기 전에 태그 생성
  • 위험한 변경 (예 : 대규모 리팩터링) 전에 태그 생성
  • 코드를 고정하기 위해 릴리스 된 버전에 대한 분기를 만듭니다.
  • 사람들이 코드에 대한 작업을 시작하기 전에 업데이트하고 커밋하기 전에 다시 한 번 업데이트하는 것을 알고 있는지 확인하십시오.
  • SVN을 사용하면 여러 사용자가 동일한 파일을 여러 번 체크 아웃 할 수 있습니다. 모든 사람이 발생할 수있는 갈등을 해결하도록하십시오.
  • 두 명 이상의 사용자에 대해 동일한 SVN 계정을 사용 하지 마십시오 . 끔찍한 일이 발생할 수 있습니다.

7
나는 내 가지와 태그로 반대로한다. 가지는 트렁크의 포크를위한 것이며 결국 트렁크와 병합됩니다. 태그는 코드 동결을위한 것입니다.
steve_c

1
분기는 변경할 수있는 복사본입니다. 태그는 변경해서는 안되는 사본입니다. svnbook.red-bean.com/en/1.2/svn.branchmerge.tags.html
matpie

비슷한 일을합니다. QA 또는 프로덕션에 코드를 릴리스 할 때 태그를 지정하고 분기합니다. 이렇게하면 트렁크에서 발생할 수있는 새로운 기능 개발에 영향을주지 않는 해당 릴리스의 버그 수정을 해결하는 분기와 읽기 전용 마커가 있습니다.
JamesEggers

Svn은 또한 동일한 사용자에 대해 동일한 폴더의 여러 체크 아웃을 허용합니다. 따라서 현재 작업과 관련이없는 변경을해야하는 경우 (예 : 일부 고객이 긴급 수정을 요청하거나 우연히 완전히 관련이없는 버그를 발견 한 경우) 다시 확인하고 별도로 수정하십시오.
PMF

코드 정지에는 "태그"를 사용해야합니다. "태그"브랜치를 변경하려고하면 SVN 클라이언트가 경고합니다.
Danijel

12

사람들이주는 대답은 훌륭합니다. 이것의 대부분은 SVN의 모범 사례에 대한 svn 사용자 문서에 요약되어 있습니다.
반복하려면 :

  1. 저장소 구조 설정 (아래에 트렁크, 브랜치 및 태그가있는 프로젝트 루트가 있어야 함)
  2. 정책 재 분기 (사설 분기, 마일스톤 / 릴리스 / 버그 당 분기 등)를 선택하고이를 고수하십시오. 그보다 적은 분기보다 많은 분기를 권장하지만 사설 분기는 필요하지 않습니다.
  3. 태그 재 지정 정책 선택-태그가 많을수록 좋지만 가장 중요한 것은 태그 명명 규칙을 결정하는 것입니다.
  4. 트렁크에 다시 커밋하는 정책 선택-트렁크를 가능한 한 "깨끗한"상태로 유지합니다. 언제든지 해제 할 수 있어야합니다.

이것은 꽤 오래된 모범 사례이므로 CollabNet이 더 이상 권장하지 않는다고 생각합니다. 새로운 모범 사례가 있습니까? 말씀하신 내용은 SVN 1.0으로 돌아갑니다
mliebelt

1
@mliebelt-아파치 버전에 대한 링크를 업데이트했습니다. 연령에 관계없이 리포지토리 구조, 분기 정책, 태그 지정 정책 및 트렁크 커밋 정책을 선택하는 아이디어는 위의 정말 좋은 답변과 함께 여전히 건전합니다.
hromanko 2011 년

하지만 "Branch-When-Needed system"에 대한 설명은 꽤 이상합니다. 사무실 촬영을위한 레시피처럼 들립니다.
naught101

10

내가 고수하는 모범 사례를 요약하고 싶습니다.

  1. 바이너리를 커밋하지 마십시오 . Nexus , Ivy 또는 Artifactory 와 같은 바이너리에 대한 별도의 저장소가 있어야합니다 .
  2. 저장소 구조 가 있어야합니다 . 개인적으로 다음 저장소 구조를 사용합니다.

    /trunk
    /tags
        /builds
            /PA
            /A
            /B
        /releases
            /AR
            /BR
            /RC
            /ST
    /branches
        /experimental
        /maintenance
            /versions
            /platforms
        /releases
    
  3. 특정 분기 유형 목록을 사용 합니다 . 내 목록은 실험적 , 유지 보수 , 버전 , 플랫폼 , 릴리스 입니다.
  4. 특정 유형의 태그 사용 : PA(사전 알파), A(알파), B(베타), AR(알파 출시), BR(베타 출시), RC(출시 후보), ST(안정).
  5. 병합의 필요성을 최소화합니다 . 병합이 가능하거나 권장되는 경우와 그렇지 않은 경우 규칙이 있어야합니다.
  6. 버전 번호 . 고수 할 확립 된 버전 번호 지정 방식이 있어야합니다. 일반적으로 소프트웨어 구성 관리 계획과 같은 문서에 설명되어 있으며 고급 프로젝트 문서의 일부입니다. 개인적으로 저는 복잡한 버전 번호 지정 방식을 사용합니다. 이 접근 방식에 따르면 버전에는 Nxx (유지 관리 / 지원 분기), NMx (릴리스 분기), NxK (빌드), NMK (릴리스) 패턴이 있습니다.
  7. 가능한 한 자주 커밋하십시오 . (예를 들어, 기능을 구현하고 코드를 컴파일하기 위해 너무 많은 변경이 필요한 경우) 어려운 경향이있는 경우 실험적인 분기를 사용해야합니다.
  8. 트렁크는 최신 개발을 포함해야합니다 . 예를 들어, 트렁크 또는 브랜치 에서 애플리케이션의 새로운 메이저 버전 ( Nxx ) 을 개발할 위치를 선택할 때 항상 trunk 를 선호하는 결정을 내려야합니다 . 이전 버전은 유지 관리 / 지원 분기로 분기해야합니다. 주요 버전 사이에 분명한 차이가 있으며 가능한 한 빨리 세부 사항 (아키텍처, 호환성)이 나타난다 고 가정 합니다 .
  9. 릴리스 브랜치에 대한 엄격한 '빌드 중단 금지'정책 . 그 동안 실험적 개발이나 병합 문제를 해결해야하는 코드베이스가있는 한 트렁크에 대해 반드시 엄격한 것은 아닙니다 .
  10. svn : externals 사용하십시오 . 프로젝트를 모듈화하고, 투명한 릴리스 관리 절차를 설정하고, 다양한 기능을 분할하고 정복 할 수 있습니다.
  11. 문제 추적을 사용합니다 . 커밋 메시지 내에서 문제 참조를 지적 할 수 있습니다.
  12. 빈 커밋 메시지를 비활성화합니다 . 사전 커밋 후크를 사용하여 수행 할 수 있습니다.
  13. 지속적으로 통합 할 분기를 정의합니다 . 예를 들어 트렁크 , 유지 관리릴리스 분기에 지속적인 통합을 사용하는 것을 선호합니다 .
  14. 다양한 유형의 지점에 대한 지속적인 통합 정책 을 설정합니다 . 앞서 지적했듯이 가장 엄격한 "빌드를 중단하지 마십시오"규칙이 릴리스 브랜치에 적용되는 반면 트렁크유지 관리 브랜치는 때때로 중단 될 수 있습니다. 또한 트렁크 / 유지 보수릴리스 브랜치 에서 실행되는 검사 목록간에 차이가 있습니다.

내가 사용하는 소프트웨어 구성 관리 접근 방식의 주요 원칙을 보여주는 다이어그램 형태로 Subversion 모범 사례의 개요를 찾을 수 있습니다 .


그래서, 당신은 팀에서 일합니까? 다른 사람들이 다른 지점을 사용합니까? 갈등을 피하는 방법? 당신은 대답하지 않습니다 팀워크 :(
DataGreed

2
Q : 충돌을 피하는 방법은 무엇입니까? 답변 : 통합의 필요성을 최소화 , 트렁크 최신 개발을 포함해야 , 가능한 한 자주로 커밋 : Q 마 다른 사람들이 서로 다른 가지를 사용을? A : 각 지점은 한 명 이상이 사용할 수 있습니다. 브랜치 유형을 구분하는 것도 중요합니다. 실험, 유지 관리 및 릴리스, 충돌을 피하는 데 도움이됩니다. Q : 답변은 팀워크를 다루지 않습니다. A : 언뜻보기에 보일 수 있습니다. 버전 제어를 사용하면 자동으로 팀워크가 이루어집니다. 나는 더욱 효과적으로 도움을 공동으로 (도로의 규칙으로) 규칙의 집합을 설명
altern을

7

내가 매우 유용하다고 생각한 한 가지는 svn : external 속성으로, 다른 저장소의 디렉터리를 자신의 것으로 참조 할 수 있음을 의미합니다. 코드와 데이터를 구성하는 정말 좋은 방법을 제공합니다. 몇 가지 예는 다음과 같습니다.

  1. 코드에 대한 별도의 저장소가있는 경우 사용중인 모듈 / 라이브러리 및 참조가 다릅니다. 이는 모든 실행 파일에 대한 메타 저장소를 가질 수 있음을 의미합니다. 몇 개의 모듈 만 사용하는 작은 실행 파일 인 경우 전체 트리를 체크 아웃 할 필요가 없습니다. 그 결과 모듈 당 SVN 개정 번호를 얻게됩니다.
  2. 컴파일 된 버전의 라이브러리와 같은 큰 바이너리 데이터를 코드 저장소에 추가하는 것은 일반적으로 나쁜 습관으로 간주되지만 정말 편리 할 수 ​​있습니다. 사용하는 모든 라이브러리의 모든 버전을 다른 저장소에 추가하기 만하면 두 가지 장점을 최대한 활용할 수 있습니다. 코드 저장소에 사용하는 라이브러리 버전을 참조합니다. 코드 저장소를 확인하면 코드와 바이너리도 모두 얻을 수 있습니다. 그러나 바이너리는 소스 코드만큼 엄격하게 백업 할 필요가없는 큰 저장소에 저장되며 소스 코드 저장소는 작게 유지되며 텍스트 만 포함합니다.

1
저는 포인트 2를 좋아합니다. svn : external을 사용할 때 개정 번호를 지정할 수 있는지 여부를 지정할 수 있으므로 일부 라이브러리는 특정 버전에 "고정"하고 다른 라이브러리는 최신 버전을 "추적"할 수 있습니다.
j_random_hacker

"svn : external"을 사용하는 것은 가장 강력한 기능 중 하나이며 SVN의 가장 기본적인 기능을 말합니다. 이것은 필수 불가결 해.
Danijel

5

버그 추적 소프트웨어와의 통합을 사용하십시오. Bugzilla 를 사용하는 경우 댓글이 "Bug XXXX"로 시작하면 SVN 댓글이 해당 수정 버전에 대한 SVN 웹 인터페이스에 대한 링크를 포함하여 주어진 버그에 대한 댓글로 자동 추가되도록 설정할 수 있습니다.


Trac은 버그 추적, 타임 라인, 커밋 차이, 위키 등을위한 좋은 svn 통합을 제공합니다.
Doug Currie

Jira는 문제와 관련된 커밋도 추적합니다.
Dan Soap

4

SVN의 분기 및 병합 도구와 규칙에 대해 알아보십시오.

다른 팀 구성원과 함께 작업하는 가장 좋은 방법은 작업을 완전한 개발 기능 / 수정으로 분할 한 다음 브랜치에서 개별 변경 작업을 수행하는 것입니다. 그런 다음 병합이 완료 / 준비 / 승인되면 변경 사항을 다시 메인 라인 분기 / 트렁크에 병합합니다.

이러한 방식으로 개인은 다른 변경 사항과 충돌하지 않고 공통 목표 (동일한 분기 또는 별도의 분기)를 향해 작업 할 수 있습니다.

귀하의 마일리지는 다를 수 있으며 이는 2 명 정도의 과잉 일 수 있습니다.


3

SVN과 잘 통합되는 좋은 도구를 사용하면 훨씬 더 쉬워집니다. 이를 통해 변경된 사항을 쉽게 확인한 다음 변경 사항의 전부 또는 일부를 커밋하고 작업 복사본을 SVN의 최신 버전으로 자주 업데이트 할 수 있습니다.

Tortoise SVN (Windows를 사용하는 경우)과 Visual SVN (VS를 사용하는 경우 )을 권장 합니다.

또한 변경 사항이 커밋 될 때마다 이메일 또는 유사한 알림을 받도록 설정할 수 있는지 확인하십시오 (일반적으로 커밋 메시지 및 변경된 파일 목록 포함). CVSDude 와 같은 서비스가 이를 제공합니다. 업데이트가 이루어 졌음을 알고 작업 복사본을 업데이트하기 전에 해당 업데이트에 포함 된 내용을 파악하는 것이 도움이됩니다.


3

분기 정책 외. (하나의 크기가 모든 것에 맞지 않는 경우), 좋은 커밋이 있어야합니다.

  • 커밋은 단일가능한 경우 작업 합니다. 버그 수정, 새로운 기능-커밋 한 변경 사항에 '논리'가 있어야합니다.
  • 커밋에는 리포지토리 기록을 검색하는 데 도움이되는 설명 주석이 있어야합니다. 대부분의 사람들은 처음에 전체 커밋과 아래에 더 자세한 설명을 설명하는 단일 문장을 작성하도록 제안합니다.
  • 가능하면 커밋을 버그 추적 시스템에 연결해야합니다. Trac, Redmine et al. 버그에서 커밋으로 또는 그 반대로 링크를 만들 수 있으므로 매우 편리합니다.


2

변경 사항에 대해 팀과상의하거나 병합 충돌을 수정하기 전에 적어도 차이점을주의 깊게 살펴보십시오. 병합에서 추가 한 내용이 손실되지 않았는지 확인하기 위해 병합 된 코드를 직접 검토하도록 요청합니다.


2

깨진 커밋을 줄이는 한 가지는 좋은 사전 커밋 스크립트를 사용하는 것입니다. 예를 들어 변경 사항이 커밋되기 전에 모든 단위 테스트를 실행할 수 있습니다. 이로 인해 커밋이 약간 느려질 수 있지만 누군가의 발끝을 밟고 사과하지 않아도되므로 시간을 절약 할 수 있습니다. 물론 대규모 개발 팀이 있고 커밋이 매우 빈번하면 관리하기가 훨씬 더 어려워집니다.


사전 커밋 스크립트의 경우 +1. 좋은 생각입니다. 실행하지 않고 커밋을 시도하면 git이 손을 때릴 수있는 방법이 있는지 궁금합니다.
naught101

2

버그 추적기 및 커밋 정책 시행과의 통합 예 중 하나는 Trac 의 svn 사전 / 사후 커밋 후크 스크립트 일 수 있습니다.이 스크립트는 커밋 메시지가 버그 추적기에서 티켓을 참조하지 않고 기존에 주석을 추가 할 경우 커밋을 거부 할 수 있습니다. 메시지 내용을 기반으로 한 티켓 (즉, 커밋 메시지에는 "Fixes # 1, # 2 및 # 8"과 같은 내용이 포함될 수 있습니다. 여기서 # 1, # 2, # 8은 티켓 번호입니다).


2

SVN 사용 모범 사례 :

  1. 사무실에 처음 와서 Eclipse 프로젝트를 열었을 때 수행해야 할 첫 번째 단계는 프로젝트를 업데이트하는 것입니다.

  2. 업데이트 후 작업을 시작하십시오. 코딩을 마쳤 으면 애플리케이션이 예외없이 제대로 실행되는지 제대로 확인하십시오. 코드가 제대로 작동하고 있다고 확신하면 코드를 커밋해야합니다.

참고 : 코드를 커밋하는 동안 직접 커밋하지 마십시오. 서버와 동기화하고 커밋해야 할 모든 것이 무엇인지 확인하십시오. 참고 : 전체 폴더를 한 번만 커밋하지 마십시오. 요구 사항에 따라 파일을 일부 변경했거나 로컬 시스템에서 일부 파일을 삭제했을 수 있기 때문입니다. 그러나 설정은 서버에서 다릅니다. 따라서 파일을 개별적으로 확인하고 코드를 커밋하십시오.

  1. 충돌 파일을 직접 커밋 / 업데이트하지 마십시오.

  2. 재정의 및 업데이트는 언제 수행합니까?

    로컬 변경이 필요하지 않고 서버 사본을 완전히 업데이트하고 싶을 때. 재정의 및 업데이트를 한 번 수행하면 로컬 변경 사항이 적용되지 않습니다.

    참고 : 업데이트없이 하루 이상 프로젝트를 보관하지 마십시오. 또한 며칠 동안 커밋하지 않고 코드를 보관하지 마십시오.

  3. 누가 모두 동일한 구성 요소에서 작업하고 있는지 소통하고 매일 변경 한 사항에 대해 논의합니다.

  4. 이유가없는 한 속성 및 구성 파일을 커밋하지 마십시오. 서버와 클라우드에서 설정이 다르기 때문입니다.

  5. 대상 폴더를 SVN에 커밋하지 마십시오. 소스 코드와 리소스 폴더 만 SVN 저장소에서 유지 관리하면됩니다.

  6. 코드를 잃어 버렸을 때 당황하지 마십시오! SVN 기록에서 이전 사본을 다시 가져올 수 있습니다.

  7. 프로젝트를 디스크의 여러 위치로 체크 아웃하지 마십시오. 한 곳에서 확인하고 작업하십시오.



1

SVN 자체는 좋은 시작이며 다른 포스터 중 일부는 모범 사례에 대한 훌륭한 제안을 제공했습니다.

내가 추가 할 유일한 것은 SVN을 CruiseControl 또는 TeamCity와 연결하여 지속적인 통합 프로세스를 추진해야한다는 것입니다. 이렇게하면 빌드 이메일이 발송되고 누군가 빌드를 망가 뜨렸을 때 모든 사람에게 알립니다.

누가 당신의 프로세스를 따르고 있는지, 누가 그렇지 않은지 일찍부터 알려줄 것입니다. 약간의 마찰로 이어질 수 있지만 팀은 장기적으로 더 나아질 것입니다.


1
동의했습니다. CruiseControl은 제 팀을 여러 번 구했습니다.
Gordon Wilson

1
  • 모든 커밋에 대한 정확한 주석

  • (주요) 빌드를 깨지 마십시오!

  • 논리 유닛이 변경되는 즉시 커밋

  • Subversion을 백업 도구로 사용하지 마십시오.

  • 가능한 한 약간의 분기 / 병합

.

자세한 내용은 SVN 모범 사례 에서 확인할 수 있습니다 .


0

브랜치에서 DEV 작업 수행

  1. 브랜치에 대한 빈번한 커밋
  2. 분기에 대한 개별 / 모듈 식 커밋 ( 여기 참조 )
  3. 트렁크에서 자주 업데이트 / 병합합니다. 리베이스없이 나뭇 가지에 앉지 마세요

커뮤니티 트렁크

  1. 항상 구축 / 작동해야 함
  2. 커밋 당 하나의 문제 ( 다시 여기 참조 ) 대부분 사용자 또는 다른 사용자가 한 번에 하나씩 되돌릴 수 있습니다.
  3. 리팩토링 / 공백 변경을 논리적 변경과 혼동 하지 마십시오 . 팀원은 커밋에서 실제로 수행 한 작업 을 추출하는 데 어려움을 겪을 것입니다.

점진적, 모듈 식, 이산 적이며 간결하게 커밋할수록 사용자 (또는 다른 사람들)가 다음 작업을 더 쉽게 수행 할 수 있습니다.

  • 점진적으로 변경 사항 취소
  • 수많은 공백과 변수 이름 변경을 거치지 않고 실제로 수행 한 작업을 시각적으로 인식합니다.
  • 커밋 메시지는 메시지 길이에 대한 작업의 비율이 낮을 때 더 많은 것을 의미합니다.

0

주석 템플릿에 다음을 사용하십시오.

[작업 / 스토리 xxx] [부 / 전공] [댓글] [후속 댓글] [버그 URL]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.