IT관련

[Git/소스트리] 브랜치 변경 시 파일이 순식간에 바뀌는 마법 같은 원리

파란하늘999 2026. 3. 16. 14:50

소스트리(SourceTree)를 사용하다 보면 브랜치를 전환(Checkout)할 때 수백 개의 파일과 폴더가 눈 깜짝할 새에 바뀌는 것을 볼 수 있습니다.

 

"이 많은 파일을 언제 다 바꾸는 거지?"라는 궁금증이 생기셨을 텐데요. 그 뒤에 숨겨진 Git의 핵심 원리 3가지를 정리했습니다.


1. Git은 '스냅샷'으로 기억한다

Git은 파일의 변경된 부분(Diff)만 저장하는 방식이 아닙니다. 커밋을 할 때마다 해당 시점의 **전체 파일 상태를 사진 찍듯이 '스냅샷(Snapshot)'**으로 저장합니다.

  • 원리: 각 커밋은 당시 프로젝트의 전체 모습을 담고 있습니다.
  • 속도의 이유: 브랜치를 바꾼다는 건 Git이 바라보는 지점(HEAD)을 다른 사진으로 옮기는 것과 같습니다. 이미 찍어둔 사진을 꺼내 보여주는 것이기에 매우 빠릅니다.

2. 이미 내 컴퓨터(.git)에 다 들어있다

새로운 브랜치로 바꾼다고 해서 서버에서 파일을 새로 다운로드하는 것이 아닙니다.

  • 이미 우리가 fetch나 pull을 받았을 때, 프로젝트의 모든 히스토리와 파일 데이터는 내 컴퓨터 안의 .git이라는 숨겨진 폴더에 압축된 상태로 저장되어 있습니다.
  • 소스트리에서 브랜치를 클릭하면, Git은 .git 폴더 안에 있는 압축 데이터를 **워킹 디렉토리(우리가 실제로 보는 폴더)**에 순식간에 풀어서 배치합니다.

3. 파일 시스템 최적화 (Index & Working Tree)

Git은 똑똑하게 작동합니다. 브랜치를 바꿀 때 모든 파일을 지우고 다시 깔지 않습니다.

  1. 비교: 현재 브랜치와 바꿀 브랜치의 내용을 초고속으로 비교합니다.
  2. 교체: 바뀐 부분만 골라내어, 변경이 없는 파일은 그대로 두고 바뀐 파일만 덮어쓰거나 삭제/생성합니다.
  3. OS 연동: 이 과정은 운영체제의 저수준(Low-level) 파일 시스템 API를 활용하므로, 우리가 윈도우 탐색기에서 복사·붙여넣기를 하는 것보다 압도적으로 빠릅니다.

💡 한 줄 요약

"브랜치 변경은 서버에서 파일을 받는 게 아니라, 내 컴퓨터에 숨겨진 압축 파일들 중 필요한 것을 골라 순식간에 꺼내 놓는 작업이다!"


⚠️ 주의할 점: 워킹 디렉토리의 청결도

파일이 순식간에 바뀌려면 현재 작업 중인 파일들이 **'커밋'**되어 있거나 **'스태시(Stash)'**에 저장되어 있어야 합니다. 수정 중인 파일이 있으면 Git은 데이터 유실을 막기 위해 브랜치 전환을 거부할 수도 있으니, 소스트리의 '스태시' 기능을 적극 활용해 보세요!

반응형