Etc./Git

[Git] .DS_Store를 .gitignore에 등록하여도 삭제되지 않을 때 해결 방법

코드스토리 2022. 7. 1. 22:26

.DS_Store란?

.DS_Store는 Mac OS에서 사용하는 폴더에 대한 메타데이터를 저장한 파일입니다.

보통 .DS_Store를 .gitignore에 등록하면 자동적으로 커밋이 안 되도록 변경 사항에 저장이 안 되지만, 이 글에 검색을 통해 오신 분들은 커밋을 했기에 지워지지 않는 것입니다.

 

이미 커밋한 .DS_Store를 버전관리하지 않는 방법

이미 git으로 버전관리가 되고있는 파일들은 나중에 .gitignore에 등록하더라도 수동으로 제거하지 않으면, 계속 파일에 대한 관리가 이루어집니다.

git rm --cached .DS_Store

루트 바로 밑에 존재하는 .DS_Store의 경우에는 다음 명령어를 통해 제거할 수 있습니다.

 

이미 커밋한 하위 폴더의 모든 .DS_Store를 버전관리하지 않는 방법

루트 경로뿐만이 아닌, 하위 폴더에도 이 .DS_Store가 존재할 수 있습니다.

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

그런 경우에는 이 명령어를 통해 저장소에 있는 .DS_Stores를 모두 제거할 수 있습니다.

 

앞으로 모든 .DS_Store를 버전관리에서 제거하는 방법

일단 현재의 프로젝트는 그렇게 처리를 완료했다고 했을 때 다음으로 실행할 수 있는 좋은 방법이 또 있습니다.

git global rule을 통해 모든 .DS_Store를 버전관리에서 제거하는 방법입니다.

 

어딘가에 파일을 생성 후 버전관리에서 제외할 파일을 설정해줍니다.

echo .DS_Store >> ~/.gitignore_global

다음 명령어를 통해 ~/.gitignore_global 라는 이름의 파일을 생성하여 파일 내용으로 .DS_Store를 넣어줄 수 있습니다.

 

이후 git의 명령어를 통해 설정으로 추가해줍니다.

git config --global core.excludesfile ~/.gitignore_global

다음 명령어를 통해 해당 파일로 전역적인 .gitignore와 같은 설정으로 적용할 수 있습니다.

 

앞으로 모든 새로운 프로젝트마다 .gitignore를 만들고 .DS_Store를 추가하는 일이 없어질 것입니다.