Git의 숨겨진 마법 파일, 개발 효율을 높이다!
`.gitignore` 파일은 추적하지 않을 파일 패턴을 정의하여, 불필요한 파일의 커밋을 방지하고 저장소(Repository) 관리 효율성을 높임.
`.gitattributes` 파일은 파일별 처리 방식을 설정하며, 라인 엔딩(Line Ending) 정규화, LFS(Large File Storage) 필터 등을 정의하여 코드 일관성을 유지함.
`.lfsconfig` 파일은 Git LFS 설정을 저장하여, 대용량 파일 관리를 용이하게 하고, 팀 내 LFS 설정 동기화(Synchronization)를 지원함.
`.gitmodules` 파일은 서브모듈(Submodule) 설정을 관리하며, 외부 저장소의 종속성을 관리하고, 모노레포(Monorepo) 구조에서 코드 재사용성을 높임.
.gitignore 파일의 활용과 주의사항
`.gitignore` 파일은 버전 관리에서 제외할 파일 패턴을 정의하여, 불필요한 파일의 추적을 막고 저장소의 크기를 줄이는 데 기여한다. 특히, IDE 설정 파일, 빌드 결과물, 로그 파일 등을 지정하여 저장소 오염(Repository Pollution)을 방지한다. 하지만 이미 추적된 파일은 `.gitignore`에 추가해도 관리 대상에서 제외되지 않으므로, `git rm --cached` 명령어를 사용하여 추적을 해제해야 한다.
.gitattributes를 이용한 파일 처리 방식 설정
`.gitattributes` 파일은 파일별로 특정한 처리 방식을 정의하여, 코드의 일관성을 유지하고 다양한 기능을 구현할 수 있도록 돕는다. 예를 들어, 라인 엔딩(Line Ending) 정규화를 통해 운영체제 간의 호환성 문제를 해결하고, LFS(Large File Storage) 필터를 설정하여 대용량 파일 관리를 효율적으로 수행할 수 있다. 또한, GitHub Linguist를 위한 설정을 통해 언어 감지 기능을 커스터마이징할 수 있다.
Git LFS 설정과 .lfsconfig 파일
`.lfsconfig` 파일은 Git LFS(Large File Storage) 설정을 저장하여, 팀 내에서 일관된 LFS 설정을 유지하도록 돕는다. 이 파일을 통해 LFS 엔드포인트 URL, 전송 설정 등을 관리할 수 있으며, LFS 명령 실행 시 자동으로 적용된다. LFS를 처음 적용하거나 파일 패턴을 변경한 경우, `git lfs migrate` 명령어를 사용하여 과거 커밋(Past Commits)까지 소급 적용해야 한다.
서브모듈(.gitmodules)의 이해와 활용
`.gitmodules` 파일은 Git 서브모듈 설정을 관리하며, 외부 저장소를 종속성으로 포함하는 데 사용된다. 서브모듈은 특정 커밋을 추적하므로, 버전 관리(Version Control)에 유연성이 떨어진다는 단점이 있다. 하지만, 모노레포(Monorepo) 구조에서 코드 재사용성을 높이고, 특정 코드베이스의 일부만 가져와 사용할 수 있다는 장점이 있다. `git submodule update --init --recursive` 명령어를 통해 서브모듈을 초기화하고 업데이트할 수 있다.
`.mailmap`과 `.git-blame-ignore-revs` 파일
`.mailmap` 파일은 커밋 작성자 정보를 정규화하여, 여러 이메일 주소나 이름의 변형을 하나의 ID로 통합한다. 이를 통해 기여도(Contribution) 분석의 정확성을 높이고, GitHub 등의 플랫폼에서 일관된 기여도 그래프를 유지할 수 있다. 또한, `.git-blame-ignore-revs` 파일은 특정 커밋을 `git blame` 결과에서 제외하여, 코드 변경의 실제 작성자를 파악하는 데 도움을 준다. 특히, 코드 포맷팅(Code Formatting)과 같은 대규모 변경을 적용한 커밋을 제외하는 데 유용하다.