Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

Git에서 특정파일 임시로 커밋내역에서 제외하기

Git의 사용빈도가 늘어가면서 커맨드를 하나씩 배워나가고 있습니다. Git으로 형상관리를 하면서 커밋하지 않을 파일들은 보통 .gitignore파일에 지정해서 git staus에 나오지 않도록 해서 커밋을 하지 않습니다. 바이너리 파일이나 시스템 파일같이 일반적인 파일은 .gitignore를 사용해서 제외하면 되지만 형상관리를 하다보면 임시로 제외하고 싶을 때가 있습니다.

예를 들어 디비정보나 기타 설정파일을 자신에게 맞는 설정으로 변경하거나 특정작업에 대해서 테스트하기 위해서 임시로 파일을 변경한 경우입니다. 이 파일은 커밋은 하지 않을 것이지만 영구적으로 제외할 것은 아니므로 .gitignore에 넣기도 머하고 .gitignore에 임시로 넣으면 어차피 .gitignore를 커밋해야 한다고 나옵니다. 이러한 상황에서는 커밋할 때마다 해당 파일이 추가되지 않도록 조심해서 해야 합니다. 뭐 Git은 실수로 커밋에 포함해도 다시 제외할 수 있는 유연함이 있지만 귀찮은 건 사실입니다.


$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   file-DO-NOT-COMMIT
#    modified:   file1
#    modified:   file2
#
no changes added to commit (use "git add" and/or "git commit -a")

위처럼 3개의 파일이 변경되었고 file-DO-NOT-COMMIT 파일은 커밋하면 안되는 파일입니다. 여기서 git update-index --assume-unchanged 파일명 명령어를 실행하면 GIT이 해당 파일을 변경되지 않은 것으로 인식합니다.

$ git update-index --assume-unchanged file-DO-NOT-COMMIT
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   file1
#    modified:   file2
#
no changes added to commit (use "git add" and/or "git commit -a")

위처럼 file-DO-NOT-COMMIT 파일이 변경된 파일 내역에서 제외된 것을 볼 수 있습니다.

다시 변경내역에 추가하고 싶으면 git update-index --no-assume-unchanged 파일명 명령어를 사용하면 다시 git status에서 변경파일로 나옵니다. 임시로 사용할 때는 좋지만 현재 unchanged로 지정된 파일의 내역을 보는 명령어는 없으므로 너무 장기간 사용해서 --assume-unchanged로 지정된 것을 잊어먹으로 오히려 혼란을 초래할 수도 있어 보입니다. 이럴 경우에는 git update-index --really-refresh 를 사용하면 앞에서 --assume-unchanged로 지정한 내용을 무시하고 워킹트리에 대한 인덱스를 새로 갱신합니다.
2012/08/03 23:14 2012/08/03 23:14