-
[Git] gitignore란 무엇일까?Github/Git 2020. 11. 19. 17:15728x90반응형
Github에서 Repository를 보다보면 위와 같이 .gitignore 파일을 본적이 있을 것이다. 이번 글에서는 .gitignore가 어떤 역할을 하는지에 대해서 정리해보려 한다.
.gitignore란?
.gitignore파일이란 Git 버전 관리에서 제외할 파일 목록을 지정하는 파일이다. git으로 프로젝트를 관리할 때, 그 프로젝트 안의 특정파일들은 Git으로 관리할 필요가 없는 경우가 있다.
예를들면
- NodeJS-Express로 개발할 때 npm module
- Java 컴파일된(.class) 파일
- AWS 비밀 키, JWT 비밀 키 등등이 있다.
npm 모듈은 용량이 크기도 하고, 프로젝트를 clone 받은 다음에 직접 npm install 해주는 것이 더 효율적이기 때문에 올리지 않는다. 그리고 AWS 키, JWT 비밀 키 같은 것은 Github에 public으로 노출이 되면 악용될 사레가 있기 때문에 올리지 않아야 한다.
.gitignore 설정하기
필자는 Git-Tutorial 디렉토리에서 touch 명령어를 통해 .gitignore 파일을 만들었다. 그리고 ls -al 명령어를 통해서 확인하면 만들어진 것도 확인할 수 있다.
그리고 위와 같이 .gitignore에 Git의 추적(Track)을 받기를 원하지 않는 이름을 적어주면 된다. 위의 경우는 test.md 파일을 적었다.
그리고 이번에는 위와 같이 test.md 파일에 간단한 내용을 작성하고 저장을 하였다.
그러면 test.md 파일은 정말로 Git이 추적하지 않을까?
GitKraken을 이용해서 확인해보면 test.md 파일이 추적받지 않는 것을 볼 수 있다. (새로 만든 .gitignore 파일만이 추적을 받고 있다)
그러면 이번에는 .gitignore에 적지 않고 파일을 하나 만들어보자.
이번에는 study.md 파일을 만든 후에 간단히 내용을 적고 저장을 하였다.
그리고 다시 GitKraken으로 확인해보면 study.md 파일이 Git의 추적을 받지 않는 것을 알 수 있다.
여기까지 .gitignore이 무엇인지는 쉽게 이해할 수 있을 것이다.
Github에 이미 올라가 있는 파일을 삭제하고 .gitignore 적용하기
이미 버전 관리에 포함되어 있는 파일들을 .gitignore 파일에 기록한다고 해서 Git이 알아서 버전 관리에서 제외 하지는 않는다. 즉 Git이 계속해서 해당 파일을 추적(Track)하고 있따는 뜻이다. 예를들어, 자신의 원격저장소에 올라가 있는 파일을 삭제하고 더 이상 추적(Track)을 받고 싶지 않다면 수동으로 해당 파일들을 버전 관리에서 제외시켜줘야 한다.
어떤 말인지는 아래의 실습을 보면서 좀 더 이해해보자.
먼저 위에서 만들었던 study.md 파일을 이미 원격저장소에 올렸다고 생각해보자.
이미 원격저장소에 올라가 Git의 추적을 받고 있는 study.md 파일을 .gitignore에 적용시키려 해보자.
그리고 study.md 파일을 간단하게 수정한 후에 다시 GitKraken을 보면 아래와 같이 .gitignore가 적용이 되지 않은 것을 알 수 있다.
이러한 경우에 수동으로 파일을 제외시켜야 한다는 말이다. 이렇게 예시를 보면 좀 이해가 갈 것이다.
그러면 어떻게 수동으로 파일을 제거할 수 있을까?
git rm -r --cached . (현재 레포지토리의 캐시를 모두 삭제한다.)
git add .
git status
git commit -m "커밋메세지"그러면 위와 같이 deleted: study.md를 볼 수 있다. .gitignore가 적용이 된 것이다.
.gitignore에 알아두면 좋은 사이트
여기를 접속해보면 아래와 같은 화면을 볼 수 있다.
그리고 필자는 macOS, Node를 위와 같이 입력한 후에 생성 버튼을 눌렀다.
그러면 위와 같이 기본적으로 세팅되어 있는 .gitignore에 대한 파일을 만들어준다. 본인이 프로젝트를 하고 있는 환경을 위에다 입력한 후에 사용하면 좋을 것 같다.
반응형'Github > Git' 카테고리의 다른 글
[Git] 브랜치 병합(Merge) & 충돌(Conflict) & 해결(Resolve)에 대하여 (0) 2020.11.19 [Git] pull과 fetch의 차이는 무엇일까? (1) 2020.11.19 [Git] remote: 로컬 저장소와 원격 저장소를 연결하기 (0) 2020.11.19 [Git] clone 과 Fork 의 차이점 (2) 2019.11.22 Git/Github 입문하기 (0) 2019.11.17