파일 무시하기 및 좋은 습관


weather-app이라는 프로젝트를 클론하고 npm install을 실행한 다음 새 저장소의 상태를 확인합니다.
$ git status
Untracked files:
(use "git add <file>..." to include in what will be committed)
node_modules/
dist/
.env추적되지 않은 세 개의 폴더와 파일이 나타나며, 이 중 어느 것도 커밋에 포함되어서는 안 됩니다. node_modules/는 package.json에서 npm install이 몇 초 만에 다시 생성하는 수천 개의 파일입니다. dist/는 소스에서 매번 다시 빌드되는 빌드 출력입니다. 그리고 .env는 API 키를 포함합니다. 이 중 어느 것도 프로젝트의 히스토리에 남아서는 안 되며, 생각 없이 git add .를 입력하는 것이 어떻게 이런 일이 발생하는지입니다.
Git에게 무시할 항목 알려주기
.gitignore 파일은 Git이 절대 추적하지 않아야 할 파일과 폴더의 패턴을 나열합니다. 첫 저장소에서 저장소를 설정할 때 git init을 실행한 프로젝트의 루트에 한 번 만들면, 그 이후로 git status와 git add .는 일치하는 항목을 조용히 건너뜁니다.
# .gitignore
node_modules/
dist/
.env각 줄은 패턴입니다. dist/와 같은 일반 폴더 이름은 프로젝트의 어디에 나타나든 해당 폴더 전체를 무시합니다. .gitignore 파일 자체를 커밋합니다. 파일이 작고, 프로젝트를 클론한 모든 사람에게 유용하며, 소스 코드와 같은 방식으로 히스토리에 속합니다.
$ git status
On branch main
nothing to commit, working tree clean패턴이 준비되면 git status는 조용합니다. 이것이 바로 요점입니다. 커밋하지 않으려는 폴더와 파일이 더 이상 노이즈로 표시되지 않으므로 실제로 중요한 항목들만 표시됩니다.
.gitignore 파일은 Git이 추적하지 않아야 할 항목을 나열합니다. node_modules/, dist/, .env는 거의 모든 프로젝트에서 일반적입니다. .gitignore 파일 자체를 커밋하여 프로젝트를 클론한 모든 사람이 동일한 깔끔한 상태를 얻도록 합니다. 나는 이것을 배우기 전에 실수로 수천 개의 의존성 파일을 스테이징하면서 한 번 오후 전체를 낭비했습니다. 절대 비밀을 커밋하지 마세요
API 키, 데이터베이스 암호 또는 서명 인증서는 절대 커밋에 나타나면 안 됩니다. 이는 개인 저장소에서 공개 저장소만큼 엄격하게 적용되며, 첫 커밋부터 계속 적용됩니다. 비밀을 .env와 같은 파일에 넣고, 첫째 날부터 해당 파일을 .gitignore에 추가하고, 소스 파일에 작성하는 대신 거기에서 앱에 값을 로드합니다.
# .env
WEATHER_API_KEY=sk_live_9f8e7d6c5b4a# .gitignore
.env이 규칙을 자동으로, 매번, 예외 없이 따르세요. 커밋에 있는 키는 저장소에 대한 액세스 권한이 있는 모든 사람이 도달할 수 있으며, 공개 저장소에서는 누구나 도달할 수 있습니다.
.env와 같은 파일에 보관하고 git add를 실행하기 전에 .env를 .gitignore에 추가하세요. 이것이 이 장에서 절대로 취급할 가치가 있는 한 가지 규칙입니다. 추적된 후 파일을 .gitignore에 추가하기
이것은 거의 모든 사람을 최소한 한 번은 함정에 빠뜨리는 문제입니다. 파일을 실수로 커밋하고, 실수를 깨닫고, .gitignore에 추가하고(아래 echo 줄은 경로를 해당 파일에 추가함), Git이 이를 잊을 것으로 예상합니다. 그렇지 않습니다.
$ git add config/settings.json
$ git commit -m "Add app settings"
# 나중에, 이것이 실수였음을 깨닫습니다
$ echo "config/settings.json" >> .gitignore
$ git status
On branch main
nothing to commit, working tree cleangit status는 깔끔한 트리를 표시하지만, config/settings.json은 여전히 추적되고 있으며 향후 모든 git log와 모든 클론에 여전히 표시됩니다. 무시 규칙은 Git이 아직 알지 못하는 파일에만 적용됩니다. 파일이 추가되고 커밋되면 히스토리의 일부이며, .gitignore는 해당 히스토리에 이미 있는 파일에 대해서는 의견이 없습니다.
실제로 앞으로 추적을 중지하려면, Git에게 디스크의 파일을 그대로 두고 추적 중인 파일을 제거하도록 지시합니다.
$ git rm --cached config/settings.json
$ git commit -m "Stop tracking config/settings.json"git rm --cached <file>은 작업 디렉터리에서 삭제하지 않고 Git의 추적에서 파일을 제거합니다. 해당 제거를 커밋하면, 그 시점부터 .gitignore 패턴이 처음부터 원했던 작업을 수행합니다.
.gitignore에 추가해도 해당 파일에는 아무 영향도 미치지 않습니다. 무시 규칙은 Git이 아직 추가하지 않은 파일에만 적용됩니다. 실수로 스며들어온 파일 추적을 중지하려면 git rm --cached <file>을 실행하고 해당 변경을 커밋합니다. 좋은 습관: 작은 커밋과 깔끔한 저장소
깔끔한 .gitignore는 저장소를 가치 있게 만드는 한 가지 절반입니다. 다른 절반은 커밋을 형성하는 방법입니다. 각 커밋을 하나의 집중된 변경으로 만드세요. 버그 수정, 작은 기능 하나, 단일 리팩터링입니다. 오후의 작업이 여러 관련 없는 항목에 닿으면, 하루 끝에 모두 한 번에 떨어뜨리는 대신 여러 커밋으로 나눕니다.
$ git add src/weather-widget.js
$ git commit -m "Fix temperature rounding in weather widget"작은 커밋은 검토하기 더 쉽고, 문제가 발생하면 되돌리기 더 쉽고, 6개월 후에 코드 줄이 왜 존재하는지 기억하려고 할 때 다시 읽기 더 쉽습니다. 커밋 루프는 커밋 메시지를 유용하게 만드는 것을 다룹니다. 이 습관은 변경 자체를 좋은 메시지를 쓸 수 있을 정도로 충분히 작게 유지하는 것에 관한 것입니다.
.gitignore를 추적하지 않아야 할 폴더와 비밀로 커버하세요. 이 두 가지 습관이 저장소를 즐거워하는 것의 대부분입니다. 초기에 형성된 작은 습관은 나중에 많은 정리를 절약합니다. 
