저장소가 커지는 원인은 소스 코드보다 캐시, 빌드 결과물, 실수로 들어간 데이터 파일일 때가 많습니다. 처음부터 어떤 파일을 기록할지 정하면 리뷰와 백업이 한결 가벼워져요. Windows와 Linux를 오갈 계획이라면 줄바꿈도 프로젝트 규칙으로 남기는 편이 좋습니다.
이 글은 gitops-demo 저장소에서 진행합니다. .gitignore와 .gitattributes가 이미 있다면 기존 항목을 지우지 말고 필요한 규칙을 합칩니다. 대용량 이력 재작성은 이 편의 기본 실습에 포함하지 않습니다.
Git·GitOps 전체 연재 · 13 / 24
이 글의 목차
추적하지 않을 파일을 정한다
다음은 Python 예제의 시작 규칙입니다. 환경 파일에는 실제 비밀 값이 들어갈 수 있으므로 제외하고, 공유할 설정 항목은 비밀 값이 없는 .env.example로 설명합니다.
__pycache__/
.venv/
dist/
.env
*.agekey
git status --ignored --short
git check-ignore -v .env
check-ignore -v는 어떤 규칙이 파일을 제외했는지 확인할 때 씁니다. .gitignore는 아직 추적하지 않는 파일의 처리 규칙입니다. 이미 커밋한 .env를 나중에 적어도 과거 이력과 현재 추적 상태에서 자동으로 빠지지 않습니다.
# Only if .env was already tracked; leaves the working file in place.
git rm --cached -- .env
git add .gitignore
git diff --staged
git commit -m "Stop tracking local environment settings"
이 명령은 이력에서 비밀 값을 지우지 않습니다. 키가 들어 있었다면 공개 여부를 확인하고 폐기·재발급을 먼저 진행합니다. 검색 캐시, 포크, CI 로그, 배포 환경에도 같은 값이 남았는지 살펴야 합니다.
줄바꿈 정책은 .gitattributes로 공유한다
* text=auto
*.py text eol=lf
*.sh text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.ps1 text eol=crlf
LF와 CRLF는 줄의 끝을 표현하는 방식입니다. 셸 스크립트에 CR 문자가 남으면 Linux에서 실행 경로나 옵션 해석이 실패할 수 있습니다. 파일 종류별 규칙을 저장소에 두면 각 개발자의 전역 설정만 의존하는 상황을 줄일 수 있어요.
기존 프로젝트에 정책을 추가할 때에는 작업 트리를 깨끗하게 만든 뒤 별도 브랜치에서 정규화합니다. 기능 변경과 섞지 않습니다.
git switch -c chore/line-endings
git add .gitattributes
git add --renormalize .
git diff --staged --stat
git diff --staged --check
# Inspect the full diff before committing.
전체 파일이 바뀌어 보이면 기대한 줄바꿈 변환인지 확인합니다. 검토 없이 커밋하거나 모든 환경의 core.autocrlf 값을 일괄 변경하지 않습니다.
큰 바이너리는 다른 저장 경로를 검토한다
Git LFS는 Git 안에 작은 포인터를 기록하고 실제 큰 파일은 LFS 저장소에 보관합니다. 이미지 원본이나 필요한 바이너리 자산에는 유용할 수 있지만, 빌드 결과물과 백업 전체를 무조건 LFS로 옮기는 방식은 적절하지 않을 수 있습니다. 배포 파일은 아티팩트 저장소, 이미지는 컨테이너 레지스트리가 더 맞는 경우가 있어요.
# Requires Git LFS installed on the client and support on the server.
git lfs install
git lfs track "*.psd"
git add .gitattributes
git lfs ls-files
기존 대용량 커밋을 자동으로 제거하는 명령은 아닙니다. 서버의 LFS 지원과 용량 정책, 백업 대상도 함께 확인합니다. clone이 성공해도 LFS 객체를 받지 못하면 실제 파일 대신 포인터만 있을 수 있습니다.
규칙의 동작은 gitignore, gitattributes, 대용량 객체의 구조는 Git LFS 공식 안내를 참고했습니다. 저장소에 무엇을 남길지는 파일 크기와 함께 보관 목적을 기준으로 정합니다.
이전 글 · [Git·GitOps 12] 태그와 릴리스: 배포한 커밋을 찾을 수 있게 만들기 · 다음 글 · [Git·GitOps 14] 로컬 Git 서버 만들기: Rocky·Ubuntu의 bare 저장소와 SSH · 연재 목록과 예제 파일

![[Git·GitOps 24] Git·CI/CD·GitOps 운영 흐름 완성하기: 장애별 판단과 복구](https://blog.maruops.com/wp-content/uploads/2026/10/maruops-git-photo-12-768x510.webp)
![[Git·GitOps 23] 비밀 값 관리: Secret의 base64와 SOPS·age 암호화](https://blog.maruops.com/wp-content/uploads/2026/10/maruops-git-photo-2-768x512.webp)
![[Git·GitOps 22] 변경 감지와 복구: 자동 Sync·selfHeal·prune·Git revert](https://blog.maruops.com/wp-content/uploads/2026/10/maruops-git-photo-10-768x576.webp)
답글 남기기