#version-control
노트 14개
Tools
Git코드의 변경 이력을 기록하고 여러 사람이 동시에 작업할 수 있게 해 주는 분산 버전 관리 시스템.
Tools › Git
대형 저장소에서 Git 빠르게 쓰기: 얕은 클론, refspec, 부분 클론, 희소 체크아웃커밋 이력과 파일이 많은 모노레포에서 clone·checkout·status가 느려지는 원인과 줄이는 방법을 정리했다. 이력을 자르는 얕은 클론, 받을 브랜치를 좁히는 단일 브랜치·refspec, 파일 내용을 나중에 받는 부분 클론, 작업 트리를 일부만 펼치는 희소 체크아웃, 파일 감시와 백그라운드 유지 보수까지 다루고 CI와 개발자 PC에서 각각 무엇을 쓰는지 정리한다.
Tools › Git
모노레포와 폴리레포여러 서비스의 코드를 저장소 하나에 두는 모노레포와 서비스마다 저장소를 나누는 폴리레포(마이크로레포)를 구조·권한·의존성 버전·코드 품질 기준·도구 면에서 비교하고, 폴리레포에서 의존성 버전을 맞추는 방법으로 버전 세트 기반 빌드 시스템(Amazon Brazil)의 구조를 정리했다.
Tools › Git
브랜치 전략: Git Flow, GitHub Flow, 트렁크 기반 개발팀이 브랜치를 어떻게 나누고 언제 합치는지 정한 규칙. 릴리스 주기가 긴 제품에 맞는 Git Flow(main·develop·feature·release·hotfix), 지속 배포에 맞는 GitHub Flow(main + 짧은 기능 브랜치 + PR), 하루 단위로 trunk에 합치는 트렁크 기반 개발을 비교하고 고르는 기준과 git-flow 도구의 현재 상태, 중앙 집중·기능 브랜치·포크 워크플로의 차이를 정리했다.
Tools › Git
자주 쓰는 Git 설정 옵션개발자들이 실제로 켜 두는 git config 옵션을 pull·merge·rebase·diff·전역 설정별로 묶었다. 대부분 기본값의 불편함을 고치는 한 줄 설정이다.
Tools › Git
작업 중인 변경 다루기: stash, worktree, clean커밋하기 애매한 작업을 잠시 치워 두는 stash, 브랜치를 바꾸지 않고 다른 브랜치를 옆 폴더에 펼치는 worktree, 추적하지 않는 파일을 지우는 clean을 정리했다. 잠깐 끼어든 일이면 stash, 오래 병행할 일이면 worktree가 기본이다.
Tools › Git
Git 기본 명령과 파일 상태Git이 분산 버전 관리 시스템으로서 중앙 집중식(SVN)과 다른 점, 저장소를 만들고 add·commit으로 버전을 기록하며, 파일이 untracked·modified·staged·committed 상태를 오가는 흐름, 작업 디렉터리·스테이징·로컬·원격 네 곳 사이에서 명령이 코드를 옮기는 방식. 커밋을 식별하는 해시도 함께 다룬다.
Tools › Git
Git 되돌리기와 이력 다루기reflog로 지나온 상태를 찾아 되돌리는 법과 상황별 복구 레시피(마지막 커밋 고치기, 다른 브랜치에 잘못한 커밋 옮기기, 파일 하나 되돌리기, 원격 상태로 초기화), reset·revert로 커밋을 되돌리고, cherry-pick으로 커밋 하나를 옮기며, 진행 중인 merge·rebase를 --abort로 취소하고, 푸시한 민감 정보·작성자를 filter-repo로 정리하는 방법. 공유된 이력이면 revert, 내 로컬 이력이면 reset이 기본이다.
Tools › Git
Git 브랜치원본에 영향을 주지 않고 독립적으로 작업할 수 있도록 커밋 흐름을 나누는 Git의 핵심 기능.
Tools › Git
Git 브랜치 병합갈라진 브랜치를 하나로 합치는 방법으로, Fast-Forward·3-Way Merge·Merge Conflict 세 가지 상황이 있다.
Tools › Git
Git 이력 검색: log 필터, grep, pickaxe, blame, bisect커밋 이력에서 원하는 것을 찾는 방법을 질문별로 정리했다. 범위 표기(A..B, A...B)와 log 필터(작성자·기간·메시지·파일), 지금 코드에서 찾는 git grep, 코드가 생기거나 사라진 커밋을 찾는 pickaxe(-S, -G)와 log -L, 줄마다 마지막 수정을 보는 blame, 버그를 넣은 커밋을 이진 탐색하는 bisect까지 다룬다.
Tools › Git
Git의 내부 구조: 객체와 인덱스.git 폴더 안의 objects(blob·tree·commit)와 index가 add·commit 때 어떻게 만들어지는지, 내용 기반 해시(체크섬)로 데이터를 관리하고 변경분이 아닌 스냅숏을 저장하는 원리.
Tools › Git
merge·squash·rebase 언제 쓰나PR을 합칠 때 merge 커밋, squash, rebase·인터랙티브 rebase를 상황에 따라 고르는 기준. 기본은 merge 커밋(진짜 이력, 쉬운 되돌리기, 잘게 쪼개진 bisect), 작은 diff에 WIP가 많으면 squash, 큰 diff에 WIP가 많으면 인터랙티브 rebase로 다듬는다.
Tools
유의적 버전(SemVer)MAJOR.MINOR.PATCH 세 숫자로 변경의 성격(호환 깨짐, 기능 추가, 버그 수정)을 알리는 버전 규칙. 각 자리를 올리는 기준과 예시 흐름, 0.x 단계의 의미, 프리릴리스와 빌드 메타데이터, 버전 비교 순서, npm의 ^·~ 범위가 SemVer에 기대는 방식을 정리했다.