학습 자료

.gitignore — 집들이 전에 안방 문을 닫습니다


Article

집들이를 합니다. 거실은 치웠고 주방도 닦았습니다. 그런데 안방은 빨래를 산처럼 쌓아둔 채입니다.

이때 하는 일은 빨래를 다 개는 게 아닙니다. 안방 문을 닫습니다. 손님에게 보여줄 방과 안 보여줄 방을 나누는 겁니다.

지금 우리 폴더는 문이 전부 열려 있습니다. 이번 시간에 문 닫는 법을 배웁니다.

왜 필요한지 먼저 겪어봅니다

지금까지는 memo.txt 하나뿐이라 문제가 안 됐습니다. 파일을 하나 더 만들어봅니다. 폴더 안에 secret.txt 를 만들고, 남에게 보이면 곤란한 내용이라고 치고 아무 글자나 한 줄 씁니다. 저장합니다.

Git Bash
  • $ 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 만들기
  1. 01

    memo.txt 가 있는 그 폴더에 새 파일을 만듭니다

    저장소 맨 위 폴더에 둡니다. 다른 데 두면 그 자리 아래에만 적용됩니다

  2. 02

    이름을 .gitignore 로 합니다

    앞의 점을 빠뜨리지 않습니다. 확장자는 없습니다. gitignore.gitignore.txt 도 아닙니다

  3. 03

    열어서 제외할 파일 이름을 한 줄에 하나씩 씁니다

    secret.txt
  4. 04

    저장합니다

    그리고 git status 를 칩니다

이제 git status 를 칩니다.

Git Bash
  • $ 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 는 안 담깁니다.

깃이 파일을 볼 때 거치는 판정
  1. 폴더에서 파일을 발견이름이 뭔지 확인한다
  2. .gitignore 에 있나?있으면 여기서 끝. 목록에도 안 띄우고 add . 에도 안 담는다
  3. 없으면 평소대로Untrackedmodified 로 띄운다
제외된 파일은 삭제되지 않는다. 깃의 관심에서만 빠진다

.gitignore 자체는 커밋합니다

방금 화면에 .gitignoreUntracked 로 떴습니다. 이건 담고 커밋합니다.

이상하게 들립니다. 감추려고 만든 파일을 왜 기록에 남기나 싶습니다. 하지만 감추는 건 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 는 만능이 아닙니다. 안 통하는 경우가 하나 있고, 이게 실무에서 사고로 이어집니다.

제대로 됐는지 확인하는 순서
  1. 01

    git status

    secret.txt 가 목록에 없으면 성공입니다

  2. 02

    ls -a

    파일은 폴더에 그대로 있는지 봅니다. 깃이 안 볼 뿐 지워진 게 아닙니다

  3. 03

    git add . 를 쳐봅니다

    그리고 다시 git statusChanges to be committedsecret.txt없어야 합니다

  4. 04

    여전히 뜬다면

    파일 이름이 .gitignore.txt 가 됐거나, 저장소 맨 위 폴더가 아닌 곳에 있을 가능성이 큽니다

세 번째 단계가 진짜 시험이다. 실수를 재현해보고 안 걸리는 걸 확인한다

정리하면

  • 폴더에 있다고 전부 기록해야 하는 건 아닙니다. 안 올릴 것을 미리 정해둡니다
  • .gitignore 파일에 제외할 이름을 한 줄에 하나씩 적습니다. 저장소 맨 위 폴더에 둡니다
  • 앞의 점이 이름의 일부입니다. 윈도우에서 .gitignore.txt 가 되기 쉬우니 ls -a 로 확인합니다
  • 제외된 파일은 지워지는 게 아니라 깃의 관심에서 빠집니다. git add . 에도 안 담깁니다
  • .gitignore 자체는 커밋합니다. 감추는 건 내용이지 규칙이 아닙니다
  • *.log 는 확장자로, temp/ 는 폴더 통째로 제외합니다
  • 이미 커밋한 파일에는 안 먹습니다. 파일을 만들자마자 적어두는 게 답입니다
  • 이미 올려버린 파일을 빼내는 방법은 26강에서 다룹니다

다음 10강은 명령어를 배우지 않습니다. 대신 커밋 메시지를 어떻게 쓸 것인가를 다룹니다. 수정, ㅁㄴㅇㄹ 라고만 적어둔 커밋이 세 달 뒤에 어떻게 보이는지 직접 봅니다. 일기 제목을 일기 라고만 써두면 나중에 아무 소용이 없는 것과 같습니다. Part 2 의 마지막 강입니다.

.gitignore — 집들이 전에 안방 문을 닫습니다 — 디코드랩(DCODELAB)