개발 이슈,해결법

[Git] repository에서만 특정 파일 삭제 (.gitignore 사용)

난쏘공돌이 2021. 11. 30. 16:38

1. 문제

git을 사용하다보면 개발폴더 내에 있는 파일이지만 공개적인 코드저장소엔 올리고 싶지 않은 파일이 있다.

예를 들자면, /upload 폴더의 내용이라던가 개발상 필요한 API코드가 들어간 파일이라던가..

혹은 node_modules 과 같은 패키지 설치 폴더라던지.. 

 

API키가 노출되면 자동으로 리셋을 시켜버리는 서비스도 있다. 

칼같이 초기화 시켜버린다..

이런 상황을 피하기 위해 우리는 레포지토리 상에서 민감한 내용은 삭제해야 하며, 더 나아가 커밋을 할때마다 해당 내용은 커밋에서 제외할 수 있어야 한다.

 

필자 역시도 node_module의 폴더가 push되어있어 해당 폴더를 지우려한다. 

.env 역시도 개인적인 내용이 들어가 있어 커밋에서 제외할 예정.

2. 해결 방안

우리는  .gitignore이라는 파일을 사용해서 

우리가 원하는 파일/폴더들을 untracked 시켜줄거다.

 

.gitignore의 사용법은 간단하다.

로컬 레포지토리 폴더에서 .gitignore을 생성한다.

 

 

이후,

이런식으로 적어준다.

 

적어주는 방식은 제외할 파일 및 폴더를 한줄씩 적어주면 적용이 되는데,

문법은 다음과 같다.

#특정파일 제외 (※모든 경로에 적용!)
[파일명].[확장자]

#특정폴더 제외
[폴더명]/

#특정 경로의 파일제외
[폴더명]/[파일명]

#현재 경로의 특정파일 
/[파일명]

#예외처리
![제외하고자 하는 경로 파일]

#확장자 기반 제외
*.[확장자]

3. 문제 발생시 해결

문제가 생길 수 있다. 

.gitignore에 적용을 해도 실제로 레포상에서 삭제가 되지 않는 경우가 있는데,

이 경우는 제외목록을 작성하기 전에 이미 커밋을 해버린 경우다. 

깃상에서 캐시가 남아있기 때문에 제외되지 않는 상황인데  이때는 강제로 캐시를 날려줘야 한다.

 

먼저 관련된 스택오버플로우 링크를 하나 첨부한다.https://stackoverflow.com/questions/11451535/gitignore-is-ignored-by-git

 

.gitignore is ignored by Git

My .gitignore file seems to be being ignored by Git - could the .gitignore file be corrupt? Which file format, locale or culture does Git expect? My .gitignore: # This is a comment debug.log nbpr...

stackoverflow.com

git rm -r --cached .
git add .
git commit -m "fixed untracked files"

해당 명령어는 기존에 tracked되어있던 캐시정보를 싹 지우고,

untracked 상태로 만든다음 새로 .gitignore을 참고해서 tracked 할 파일을 저장한다.

그 이후 커밋후 푸쉬를 하면..

다음과 같이 modules폴더와 .env가 사라진 모습을 볼 수 있다.