Microsoft MVP성태의 닷넷 이야기
Team Foundation Server: 38. TFS 소스 코드 관리 기능 (4) - Branch [링크 복사], [링크+제목 복사],
조회: 32749
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)
TFS 소스 코드 관리 기능 (4) - Branch


사실, Branch는 그다지 어려운 기능이 아니어서, 별다르게 설명할 것이 없습니다. 그래도 약간의 부연 설명이 있어서 이렇게 내용을 넣어본 것인데요. 거두절미하고, 곧바로 예제로 들어가 볼까요? ^^

실습을 위해 지난번 changeset 55번에 붙여둔 Label에 해당하는 제품을 "A" 업체에 납품했다고 가정해 보겠습니다. 그리고는 개발은 꾸준히 진행되어 changeset 59번까지 왔습니다. 이 시점에서 "A" 업체가 추가 기능을 요구했고, 이 기능은 도저히 changeset 59번에 이어서 개발할 수 없는 기능입니다.

이 때 아래와 같이 55번 label (또는 changeset)에서 소스 코드 분기를 할 수 있습니다. (Branch는 프로젝트 단위에 국한되지 않고, 소스 컨트롤에서 보여지는 폴더 및 파일 단위까지도 가능합니다.)

[그림 1: Branch 메뉴 실행]
tfs_apply_branch_1.png

[그림 2: Branch 대화 상자]
tfs_apply_branch_2.png

[그림 3: Branch 명령 실행 결과]
tfs_apply_branch_3.png

자, 이제부터 소스 코드는 별도로 관리되어지는 것입니다. "TestSolution" 노드와 "TestSolution-for_onlyA" 노드는 개별적으로 체크인/체크아웃 되고 서로 완전히 독립적인 프로젝트 처럼 형상관리가 이뤄집니다.

일단, 위와 같이 분기가 되면 "공통 구현"되는 코드는 2중으로 적용해야 합니다. 즉, TestSolution 원본에서 "화면 프린트"라는 기능을 구현했다면, "TestSoltuion-for_onlyA" 분기에도 동일하게 적용해 주어야 합니다. TFS에서는 이 과정을 "Merge"라는 기능을 통해서 자동화해주려고 노력하고는 있지만, 어쨌든 이 과정은 시간이 갈수록 세심한 주의를 요하는 작업이 될 것입니다.

따라서, "소스 코드 분기"를 할 때는 TFS Branch를 정말 꼭 써야 하는지? 차라리 "전처리기"를 써서 소스 코드를 관리할 것인지? plug-in 방식으로 해결하는 것이 올바른 것이 아닌지...? 심사숙고 후에 결정하시는 것이 좋습니다.




물론, Branch의 활용이 위와 같은 상황에서만 있는 것은 아닙니다.

Visual Studio TFS Branching Guide 2010 
; http://tfsbranchingguideiii.codeplex.com/

위의 PDF 문서는, Branch를 활용한 제품 개발 가이드를 적절하게 제시하고 있습니다.

내용인 즉,
평상 시처럼 팀 프로젝트와 기반 솔루션 프로젝트를 만들고, 그것을 "MAIN"으로 둡니다. 거기에서 "DEV" 브랜치를 하나 따서 모든 개발은 거기서만 합니다. 기능 구현이 완료될 때 마다 "DEV"에서 "MAIN"으로 (통째로) merge하고. 그래서 "MAIN" 솔루션은 언제든 배포가 가능한 노드로써 기능을 하게 됩니다.

위의 가이드는 우리가 보통 겪고 있는 문제를 잘 해결해 줍니다. 예를 들어, changeset만으로는 기능 단위로 정확하게 구현이 안되어서 중간중간 릴리스 가능하지 않은 상태로 솔루션이 머무는 기간이 종종 발생합니다. 예를 들어, "화면 캡처" 기능을 구현하는데 메뉴만 만들어놓고 check-in을 할 수도 있고, 또는 "화면 캡처" 기능 자체는 다 완료하고 check-in을 했는데 테스트 과정 중에 오류가 발생하는 경우도 있습니다.

바로 그런 상황이 빈번한 팀에서는 위와 같이 "MAIN"과 "DEV" 브랜치를 두고 관리를 한다면 모든 복잡함이 제거될 수 있습니다.

"가이드"에 보면 "RELEASE" 브랜치도 "MAIN"에서 파생됩니다. 일단, "RELEASE" 브랜치가 되어 릴리스 버전이 고객에게 전달되었다면, 이후의 기능들은 다음 버전이 되는 것이고 "DEV"에서 역시 모든 개발 코드가 먼저 작업이 되고 그때그때 "MAIN"에 반영되는 것이 가능합니다.

그 외에, 서비스 팩 및 핫픽스를 염두에 둔 브랜치 가이드가 추가되어 있는데 그 부분들은 각자 환경에 맞게 적절하게 선택을 하면 될 것 같습니다.

제 생각에는, 최소한 위에서 설명드렸던 "MAIN", "DEV" 브랜치 정도는 두는 것을 권장하고 싶습니다.

지금까지 4회에 걸쳐 TFS의 기능을 살펴보았는데요. 좀 더 아시게 된 만큼 효율적인 TFS 사용이 되기를 바랍니다.



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/17/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 61  62  63  64  [65]  66  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
12315정성태9/7/202019928개발 환경 구성: 510. Logstash - FileBeat을 이용한 IIS 로그 처리 [2]
12314정성태9/7/202020070오류 유형: 645. IIS HTTPERR - Timer_MinBytesPerSecond, Timer_ConnectionIdle 로그
12313정성태9/6/202019653개발 환경 구성: 509. Logstash - 사용자 정의 grok 패턴 추가를 이용한 IIS 로그 처리
12312정성태9/5/202026516개발 환경 구성: 508. Logstash 기본 사용법 [2]
12311정성태9/4/202019216.NET Framework: 937. C# - 간단하게 만들어 보는 리눅스의 nc(netcat), json_pp 프로그램 [1]
12310정성태9/3/202018523오류 유형: 644. Windows could not start the Elasticsearch 7.9.0 (elasticsearch-service-x64) service on Local Computer.
12309정성태9/3/202017663개발 환경 구성: 507. Elasticsearch 6.6부터 기본 추가된 한글 형태소 분석기 노리(nori) 사용법
12308정성태9/2/202019547개발 환경 구성: 506. Windows - 단일 머신에서 단일 바이너리로 여러 개의 ElasticSearch 노드를 실행하는 방법
12307정성태9/2/202020425오류 유형: 643. curl - json_parse_exception / Invalid UTF-8 start byte
12306정성태9/1/202017620오류 유형: 642. SQL Server 시작 오류 - error code 10013
12305정성태9/1/202019502Windows: 172. "Administered port exclusions"이 아닌 포트 범위 항목을 삭제하는 방법
12304정성태8/31/202017962개발 환경 구성: 505. 윈도우 - (네트워크 어댑터의 우선순위로 인한) 열거되는 IP 주소 순서를 조정하는 방법
12303정성태8/30/202018274개발 환경 구성: 504. ETW - 닷넷 프레임워크 기반의 응용 프로그램을 위한 명령행 도구 etrace 소개
12302정성태8/30/202018366.NET Framework: 936. C# - ETW 관련 Win32 API 사용 예제 코드 (5) - Private Logger파일 다운로드1
12301정성태8/30/202017947오류 유형: 641. error MSB4044: The "Fody.WeavingTask" task was not given a value for the required parameter "IntermediateDir".
12300정성태8/29/202018358.NET Framework: 935. C# - ETW 관련 Win32 API 사용 예제 코드 (4) CLR ETW Consumer파일 다운로드1
12299정성태8/27/202018959.NET Framework: 934. C# - ETW 관련 Win32 API 사용 예제 코드 (3) ETW Consumer 구현파일 다운로드1
12298정성태8/27/202018486오류 유형: 640. livekd - Could not resolve symbols for ntoskrnl.exe: MmPfnDatabase
12297정성태8/25/202018042개발 환경 구성: 503. SHA256 테스트 인증서 생성 방법
12296정성태8/24/202019189.NET Framework: 933. C# - ETW 관련 Win32 API 사용 예제 코드 (2) NT Kernel Logger파일 다운로드1
12295정성태8/24/202017987오류 유형: 639. Bitvise - Address is already in use; bind() in ListeningSocket::StartListening() failed: Windows error 10013: An attempt was made to access a socket ,,,
12293정성태8/24/202018965Windows: 171. "Administered port exclusions" 설명
12292정성태8/20/202021954.NET Framework: 932. C# - ETW 관련 Win32 API 사용 예제 코드 (1)파일 다운로드2
12291정성태8/15/202018894오류 유형: 638. error 1297: Device driver does not install on any devices, use primitive driver if this is intended.
12290정성태8/11/202020143.NET Framework: 931. C# - IP 주소에 따른 국가별 위치 확인 [8]파일 다운로드1
12289정성태8/6/202017076개발 환경 구성: 502. Portainer에 윈도우 컨테이너를 등록하는 방법
... 61  62  63  64  [65]  66  67  68  69  70  71  72  73  74  75  ...