기본 콘텐츠로 건너뛰기

[MacOS,Git] ._, .DS_Store 등 숨김파일 정리 및 .gitignore 처리하기

How to remove temporary hidden files like .DS_Store / ._xxxx

Remove ._xxxx files

MacOS에서 여러 작업을 하다보면 ._ 으로 시작하는 파일들이 생성된 것을 확인할 수 있다. (일반적으로 숨김 파일들이라 보이지 않는다) 이런 파일은 다양한 작업 중에 생성되는데 일반적인 상황은 다음과 같다.

  • MacOS HDD/SDD에서 외장 HDD/SDD로 복사했을 때
  • MacOS에서 압축했을 때

더 많은 상황이 있을 수 있지만 결국은 다른 플랫폼 (또는 다른 FileSystem)과 혼용할 경우에 아이콘을 생성하기 위해 파일을 가져오는 과정에서 메타정보 저장용으로 자동 생성된다.

이런 파일의 생성과 제거는 다음과 같은 방법들이 존재한다.

  • 압축하는 경우라면 다른 플랫폼에서 이런 파일들이 유지되지 않도록 COPYFILE_DISABLE 설정을 하면 된다.

    # 압축 명령에서 사용해서 tar가 메타 정보를 추가하지 않도록 설정
    $ COPYFILE_DISABLE=1 tar -cf xxxx.tar file*
  • 매번 이렇게 처리하는 것이 귀찮다면 아예 shell에 설정하는 것도 가능하다.

    # ~/.zshrc 또는 ~/.bash_profile, ....
    ...
    COPYFILE_DISABLE=1; export COPYFILE_DISABLE
    ...
  • 이미 파일이 존재하는 경우라면 일괄 삭제할 수 있다.

    $ find ./ -name ._\* -delete

Git에서 MacOS의 불필요 파일들 제외하기

위에서 설명한 것과 같이 자동 생성되는 파일들을 git 에서 제외하려면 .gitignore 파일을 사용하면 된다.

  • git에 포함되지 않도록 제외하는 경우
    # .gitignore 파일
    ...
    # OS Generated Files #
    ######################
    **/.DS_Store
    **/._*
    ...
  • 이미 git에 포함된 경우
    # git 정보 검색 및 삭제
    $ find . -name .DS_Store -print0 | xargs -0 git rm -f --cached --ignore-unmatch
    # 변경 commit
    $ git commit -m "<commit message>"
    # Push to remote repository
    $ git push orgin master

참고

많은 프로젝트를 운영하는 경우라면 매번 gitignore를 처리하기 힘들 수 있으므로 이런 공통된 규칙을 전역으로 처리할 수도 있다.

# 전역으로 사용할 .gitignore 파일 생성
$ echo .DS_Store >> ~/.gitignore_global

# git에서 사용할 수 있도록 설정
$ git config --global core.excludesfile ~/.gitignore_global

단, 이 방법이 올바른 방법인지를 검증을 해 본 후에 판단해야 할 것 같다.

참고 자료

댓글