.gitignore — 집들이 전에 안방 문을 닫습니다
Article
집들이를 합니다. 거실은 치웠고 주방도 닦았습니다. 그런데 안방은 빨래를 산처럼 쌓아둔 채입니다.
이때 하는 일은 빨래를 다 개는 게 아닙니다. 안방 문을 닫습니다. 손님에게 보여줄 방과 안 보여줄 방을 나누는 겁니다.
지금 우리 폴더는 문이 전부 열려 있습니다. 이번 시간에 문 닫는 법을 배웁니다.
왜 필요한지 먼저 겪어봅니다
지금까지는 memo.txt 하나뿐이라 문제가 안 됐습니다. 파일을 하나 더 만들어봅니다. 폴더 안에 secret.txt 를 만들고, 남에게 보이면 곤란한 내용이라고 치고 아무 글자나 한 줄 씁니다. 저장합니다.
- $ git status
- On branch master
- Untracked files:
- (use "git add <file>..." to include in what will be committed)
- secret.txt
- nothing added to commit but untracked files present (use "git add" to track)
깃이 알아챘습니다. 폴더에 넣은 이상 깃은 무조건 봅니다. 그리고 여기서 6강에서 미뤄뒀던 문제가 터집니다.
문을 닫는 파일을 만듭니다
깃에는 "이 이름들은 못 본 척해라" 라고 적어두는 파일이 정해져 있습니다. 이름이 .gitignore 입니다. 점으로 시작하는 게 이름의 일부입니다.
.gitignore 만들기- 01
memo.txt가 있는 그 폴더에 새 파일을 만듭니다저장소 맨 위 폴더에 둡니다. 다른 데 두면 그 자리 아래에만 적용됩니다
- 02
이름을
.gitignore로 합니다앞의 점을 빠뜨리지 않습니다. 확장자는 없습니다.
gitignore도.gitignore.txt도 아닙니다 - 03
열어서 제외할 파일 이름을 한 줄에 하나씩 씁니다
secret.txt - 04
저장합니다
그리고
git status를 칩니다
이제 git status 를 칩니다.
- $ git status
- On branch master
- Untracked files:
- (use "git add <file>..." to include in what will be committed)
- .gitignore
- nothing added to commit but untracked files present (use "git add" to track)
secret.txt 가 목록에서 사라졌습니다. 파일은 폴더에 그대로 있습니다. 깃이 못 본 척하는 것뿐입니다. 이제 git add . 를 쳐도 secret.txt 는 안 담깁니다.
- 폴더에서 파일을 발견이름이 뭔지 확인한다
.gitignore에 있나?있으면 여기서 끝. 목록에도 안 띄우고add .에도 안 담는다- 없으면 평소대로
Untracked나modified로 띄운다
.gitignore 자체는 커밋합니다
방금 화면에 .gitignore 가 Untracked 로 떴습니다. 이건 담고 커밋합니다.
이상하게 들립니다. 감추려고 만든 파일을 왜 기록에 남기나 싶습니다. 하지만 감추는 건 secret.txt 지 규칙이 아닙니다. 규칙은 오히려 남들과 공유해야 하는 것입니다. 25강에서 팀으로 작업할 때, 이 파일이 있어야 같이 하는 사람도 같은 파일을 안 올립니다.
.gitignore
커밋한다
- "이런 건 안 올린다"는 약속이다
- 팀원 전체가 같은 규칙을 쓴다
- 안방 문에 붙인 "들어오지 마세요" 쪽지
secret.txt
커밋하지 않는다
- 내 컴퓨터에만 있어야 하는 내용이다
- 올라가면 남이 다 본다
- 안방 안의 빨래 더미
git add .gitignore 하고 git commit -m "제외 규칙 추가" 로 커밋합니다.
이름 말고 다른 방식으로도 씁니다
파일이 늘어나면 하나씩 이름을 적기 어렵습니다. 그래서 몇 가지 표기를 씁니다. 지금 다 외울 필요는 없고, 세 가지만 보면 됩니다.
.gitignore 에 쓰는 세 가지 표기| 이렇게 쓰면 | 이런 뜻 | 예 |
|---|---|---|
secret.txt | 이 이름의 파일 하나 | secret.txt 만 제외된다 |
*.log | 이 확장자를 가진 모든 파일 | error.log · access.log 전부 제외된다 |
temp/ | 이 이름의 폴더 통째로 | temp 폴더 안의 것이 전부 제외된다 |
# 메모 | 설명용 메모 | # 으로 시작하면 규칙이 아니라 그냥 글이다 |
여기서 꼭 걸리는 함정
.gitignore 는 만능이 아닙니다. 안 통하는 경우가 하나 있고, 이게 실무에서 사고로 이어집니다.
- 01
git statussecret.txt가 목록에 없으면 성공입니다 - 02
ls -a파일은 폴더에 그대로 있는지 봅니다. 깃이 안 볼 뿐 지워진 게 아닙니다
- 03
git add .를 쳐봅니다그리고 다시
git status—Changes to be committed에secret.txt가 없어야 합니다 - 04
여전히 뜬다면
파일 이름이
.gitignore.txt가 됐거나, 저장소 맨 위 폴더가 아닌 곳에 있을 가능성이 큽니다
정리하면
- 폴더에 있다고 전부 기록해야 하는 건 아닙니다. 안 올릴 것을 미리 정해둡니다
.gitignore파일에 제외할 이름을 한 줄에 하나씩 적습니다. 저장소 맨 위 폴더에 둡니다- 앞의 점이 이름의 일부입니다. 윈도우에서
.gitignore.txt가 되기 쉬우니ls -a로 확인합니다 - 제외된 파일은 지워지는 게 아니라 깃의 관심에서 빠집니다.
git add .에도 안 담깁니다 .gitignore자체는 커밋합니다. 감추는 건 내용이지 규칙이 아닙니다*.log는 확장자로,temp/는 폴더 통째로 제외합니다- 이미 커밋한 파일에는 안 먹습니다. 파일을 만들자마자 적어두는 게 답입니다
- 이미 올려버린 파일을 빼내는 방법은 26강에서 다룹니다
다음 10강은 명령어를 배우지 않습니다. 대신 커밋 메시지를 어떻게 쓸 것인가를 다룹니다. 수정, ㅁㄴㅇㄹ 라고만 적어둔 커밋이 세 달 뒤에 어떻게 보이는지 직접 봅니다. 일기 제목을 일기 라고만 써두면 나중에 아무 소용이 없는 것과 같습니다. Part 2 의 마지막 강입니다.