본문 바로가기

개발/홈서버 인프라관리

📘 .gitattributes vs .gitignore — 차이점과 사용 상황 정리

반응형

Git을 사용하다 보면 .gitattributes와 .gitignore 파일을 자주 마주치게 됩니다.
이 두 파일은 모두 Git의 동작 방식을 제어하지만, 목적과 역할은 완전히 다릅니다.
이번 글에서는 두 파일의 차이점과 사용 시점을 명확히 정리해보겠습니다.


🔍 1. 기본 개념 비교

구분.gitignore.gitattributes
목적 Git이 추적하지 않을 파일을 지정 **Git이 파일을 다루는 방식(속성)**을 지정
적용 범위 로컬 저장소(파일 무시 설정) 저장소 전체(파일 속성, 처리 방식 설정)
주로 설정하는 항목 빌드 결과물, 캐시 파일, 환경 설정 파일 등 EOL 변환, diff/merge 동작, 언어 인코딩 등
버전 관리 여부 일반적으로 버전 관리 대상임 버전 관리 대상임 (속성은 Git 동작에 직접 반영됨)

🧩 2. .gitignore — 추적 제외 설정

.gitignore는 Git이 관리하지 않아야 할 파일을 지정합니다.
예를 들어 빌드 과정에서 생성되는 파일이나, 개인 로컬 설정 파일 등을 무시할 때 사용합니다.

✅ 예시

 
# 빌드 결과물 무시 /dist /build # 로그 파일 무시 *.log # 환경 설정 파일 무시 .env

📌 사용 시점

  • 프로젝트 빌드나 실행 시 자동으로 생성되는 파일이 있을 때
  • 개발자 개인 설정 파일(예: .vscode/settings.json)을 공유하지 않으려 할 때
  • 특정 폴더 전체를 추적에서 제외하고 싶을 때

⚙️ 3. .gitattributes — Git 동작 방식 제어

.gitattributes는 Git이 파일을 처리하는 방법을 세밀하게 제어합니다.
이 파일은 단순히 "무시"하는 게 아니라, 추적 중인 파일의 속성을 설정합니다.

✅ 예시

 
# 텍스트 파일의 줄바꿈(EOL) 통일 *.txt text eol=lf # 특정 파일은 바이너리로 처리 *.png binary # 언어별 diff 설정 *.md diff=markdown # 특정 파일 병합 전략 지정 *.lock merge=ours

📌 사용 시점

  • 운영체제별 줄바꿈 문제(CRLF/LF) 를 방지하고 싶을 때
  • 이미지나 바이너리 파일은 diff 대상에서 제외하고 싶을 때
  • 특정 파일에 대해 병합 충돌 방지 규칙을 지정하고 싶을 때
  • Git LFS(대용량 파일 관리) 를 적용할 때 → 예:
  •  
    *.zip filter=lfs diff=lfs merge=lfs -text

💡 4. 핵심 차이 요약

항목.gitignore.gitattributes
역할 Git이 무시할 파일 지정 Git이 파일을 다루는 방식 지정
적용 대상 추적 제외할 파일 추적 중인 파일
주요 기능 파일/폴더 무시 줄바꿈, diff, merge, 인코딩, LFS 설정
공통점 둘 다 버전 관리 가능 둘 다 Git 설정 파일

🚀 5. 실제 프로젝트에서의 예시 구성

 
# .gitignore node_modules/ dist/ .env *.log
 
# .gitattributes * text=auto *.sh text eol=lf *.bat text eol=crlf *.png binary

이렇게 두 파일을 함께 사용하면
👉 불필요한 파일은 무시하고,
👉 필요한 파일은 일관된 방식으로 관리할 수 있습니다.


✅ 마무리

정리하자면,

  • .gitignore → "이 파일은 Git이 신경 안 써도 돼!"
  • .gitattributes → "이 파일은 이렇게 다뤄줘!"

두 파일을 적절히 조합하면 협업 시 환경 차이로 인한 문제를 줄이고,
보다 안정적인 버전 관리를 할 수 있습니다. 🚀

반응형