브랜치 (Branch)
A branch in Git is simply a lightweight movable pointer to one of these commits.
— 공식 Git 바이블 사양서에서 정의한, 무거운 통복사 방식이 아닌 단순 40글자 해시 포인터 이동만으로 실현하는 경이롭고 가벼운 동적 분기 구조
운영 중인 서버를 정지시키지 않고 내 마음대로 칼춤 추며 소스를 뜯어고칠 수 있게 돕는 디지털 가상 평행우주 통로이자, 결국 마감일에는 한자리로 모여 피 터지게 싸워대며 충돌을 유발하는 화약고. 아주 조용히 나 혼자 기능 구현을 잘 끝마치고, 대망의 메인 기둥으로 브랜치를 덮어씌우는 순간 'Merge Conflict'라는 무서운 경고 창을 마주하게 만드는 깃허브의 주범(...)
1. 개요
동일한 프로젝트 저장소(repository) 내부에서 실제 운영 중인 중심 기둥 소스코드 흐름에 영양가 있는 피해를 주지 않고, 나만의 독립적인 가상 개발 평행우주 선로를 개설하여 마음껏 안전하게 기능 개발을 시험할 수 있도록 가볍게 제공하는 소스코드 이력 분기 포인터선을 일컫는다.
2. 가볍고 빠른 포인터의 혁명
고대 버전 관리 도구에서의 브랜치 생성은 수백 메가바이트짜리 프로젝트 폴더 전체를 디스크 상에 새로 통째로 복사해서 붙여넣는 미련하고 느려터진 물리적 노가다 공정이었다. 하지만 Git은 이 무식한 방식을 비웃으며 혁신적인 포인터(Pointer) 아키텍처를 창조해 냈다. 깃에서 브랜치는 단지 특정 버전(커밋)의 40글자 고유 해시 주소록을 가리키고 있는 '단 41바이트짜리 아주 가벼운 이정표 텍스트 파일 포인터'에 불과하다. 이 덕분에 개발자가 git branch를 갈기는 순간, 디렉토리 복사 오버헤드 없이 단 0.001초 만에 기적 같은 평행우주 브랜치 분기선이 창조되어 전 세계 형상 협업 패러다임이 가속되었다.
3. 공포의 머지 충돌(Merge Conflict)과 영리한 병합
각자의 브랜치 평행우주 속에서 열심히 달리던 소스코드는 결국 하나의 완성된 실제 운영용 중심 기둥 브랜치(주로 main 또는 master)로 병합(Merge)되는 운명을 마주한다. 이때 다른 부분을 고쳤다면 깃의 스마트한 머지 엔진이 알아서 한 장의 문서로 찰떡같이 자동 합성해 준다. 하지만 나와 이웃 자리 동료가 소스 코드의 '완전히 동일한 파일의 동일한 코드 라인'을 각자의 브랜치에서 서로 다르게 칼질 수정했다면, 머지 엔진은 지레 겁을 먹고 동작을 멈춘 뒤 '머지 충돌(Merge Conflict)'이라는 에러 경고등을 전사적으로 터트린다. 개발자는 이 찢겨진 코드의 틈새를 눈으로 노려보며, 누구 소스가 최신 정합 맞는지 수동으로 도려내고 수리해 주어야 정상적인 병합이 수립 완료된다.(...)
4. 관련 밈 및 드립
4.1. 브랜치 머지 폭탄 미루기 눈치싸움
대형 기능 개발 마감 당일 오후, 각자 만든 피처 브랜치(Feature Branch) 수십 개를 메인 기둥 브랜치로 병합해야 한다. 먼저 병합을 끝낸 개발자는 충돌 없이 행복하게 칼퇴근하지만, 가장 마지막 순서에 병합을 누르는 비운의 개발자는 앞서 동료들이 올려둔 모든 수십 개 브랜치 코드와의 무자비한 이중 삼중 머지 충돌 폭탄을 홀로 독차지해 두들겨 맞게 된다.(...) 실무 개발실에서는 마감 한 시간 전부터 '누가 먼저 머지 단추를 누를 것인가' 소리 없는 마우스 딸칵 클릭 눈치 서바이벌 게임이 엄숙히 펼쳐진다.
5. 여담
- 기본 브랜치 이름의 정치적 교체: 오랫동안 전 세계 모든 깃 저장소의 디폴트 뿌리 브랜치 명칭은
master였으며, 이와 대비되는 임시 분기들은 슬레이브(slave) 성격을 지녔다. 하지만 2020년 블랙 라이브스 매터(BLM) 인권 운동의 여파 속에 IT 업계도 유구한 master/slave 차별적 대명사 청산에 나서며, 현재는 전 세계 깃허브 기본 브랜치명이 부드럽고 가치 중립적인main으로 전사 강제 개편 정립되었다. - 브랜치의 수호신, HEAD: 터미널 깃을 조작하다 보면
HEAD라는 기괴한 단어가 대문자로 쏟아져 나온다.HEAD는 다름 아닌 '지금 현재 내 노트북 화면에 켜놓고 작업 중인 진짜 활성화된 브랜치의 끝자락을 가리키는 슈퍼 대포 등대 포인터'이다.git checkout을 갈겨 다른 평행우주 브랜치로 이사 가면, 이 HEAD 등대 포인터가 새 브랜치의 끝으로 순간 이동하며 내 에디터 소스 글자들을 0.1초 만에 물리적으로 바꿔치기해 보여준다. - 브랜치를 지휘하는 규칙, 브랜치 전략: 무질서하게 브랜치를 생성해 난장판을 만드는 참사를 막기 위해, 고수 팀들은 엄격하게 가지치기 규칙을 문서 규정해 두고 협업한다. 메인 운영용, 스테이징 검증용, 기능 개발용, 긴급 핫픽스용 브랜치의 수명과 합치는 경로를 명확히 설계해 둔 프레임워크를 Git 브랜치 전략(예: Git Flow, GitHub Flow)이라 일컫는다.