Git 리포지토리에서 .DS_Store 파일을 어떻게 제거합니까?


1257

.DS_StoreGit 저장소에서 성가신 Mac OS X 파일을 어떻게 제거 할 수 있습니까?



Mac OS X뿐만 아니라 많은 MacOS 버전에서도 동일하다고 생각하십시오.
Jim Aho

https://github.com/xiaozhuai/odourless를 확인 하고 .DS_Store를 방지하는 도구를 만들었습니다.
xiaozhuai

답변:


2426

저장소에서 기존 파일을 제거하십시오.

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

라인 추가

.DS_Store

파일 .gitignore은 저장소의 최상위 레벨에서 찾을 수 있습니다 (또는 아직없는 경우 작성). 최상위 디렉토리에서이 명령으로이 작업을 쉽게 수행 할 수 있습니다.

echo .DS_Store >> .gitignore

그때

git add .gitignore
git commit -m '.DS_Store banished!'

13
실제로는 사소한 것이지만 사용 -exec하면 git-rm모든 .DS_Store 파일마다 한 번씩 실행 되지만 xargs모든 경로는 하나의 명령 줄에 배치됩니다. 나는 xargs많은 특수 문자를 이탈하는 것에 대해 걱정할 필요가 없기 때문에 주로 선호 합니다.
벤 자도

8
.gitignore가 아닌 .git / info / exclude를 사용해야합니다. 둘의 차이점에 대한 설명은 stackoverflow.com/questions/1753070/… 을 참조하십시오 .
Andrew Grimm

106
@Andrew : 동의하지 않습니다. .DS_Store 파일을 체크인하는 것은 결코 유용하지 않으므로 각 Mac 사용자가 자신의 컴퓨터에서 설정해야하는 것이 아니라 리포지토리 전체의 모든 사용자 설정으로 사용하는 것이 좋습니다.
benzado 2009

51
추가 .DS_Store.gitignore재귀 적 으로 작동 합니까 ? 즉, 그것도 무시할 some/level/of/folders/.DS_Store것인가?
Charlie Schliesser

70
@CharlieS 예, 패턴에 슬래시가 포함되어 있지 않으면 모든 디렉토리의 파일 이름과 일치합니다.
benzado

239

git rmrepo에없는 파일에서 실패하지 않고으로 업데이트하고 벤 자도와 webmat의 답변을 결합하여 모든 사용자가 일반적으로 붙여 넣을 수있게합니다.

# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore

2
내 홈 디렉토리에서 git repo (일명 "dotfiles"repo)를 사용할 ~/.gitignore때 전역 제외 파일로 사용하는 것이 고통 스럽다는 것을 알았습니다 . 전역 적으로 무시하고 싶지 않은 홈 디렉토리에서 제외하려는 파일이 있습니다 . ~/.gitexcludes대신 동일한 지시문을 통해 사용 합니다.core.excludesfile
AL X

155

이 문제를 해결하는 가장 좋은 해결책은 시스템의 모든 자식 저장소에서 이러한 파일을 전역 적으로 무시하는 것입니다. 다음과 같은 전역 gitignore 파일을 생성하면됩니다 :

vi ~/.gitignore_global

다음과 같은 파일 무시 규칙 추가 :

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

이제이 파일을 전역 git 설정에 추가하십시오 :

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

편집하다:

아이콘은 응용 프로그램 자산으로 커밋해야 할 수 있으므로 제거되었습니다.


리포지토리의 .gitignore에 위의 규칙을 추가 할 수도 있습니다. 프로젝트에 여러 기고자가있는 경우 이러한 파일을 리포지토리 수준으로 유지합니다. 그러나 이러한 경우에 .gitignore는 다른 개발자가 다른 OS를 사용하는 경우 모든 OS의 특정 파일 등을 처리해야합니다. 리눅스, OSX 등에 대한 규칙과 유사
Nerve

각 개발자는 자신의 .global_ignore에서 자신의 .global_ignore에서 자신의 os 특정 파일을 처리하는 것이 좋습니다.
mcfedr

git add .gitignore_global을 실행하여 다른 프로그래머가 로컬 환경에서도 해당 파일을 갖도록해야합니까?
stackdave

58

경우에 따라 일부 파일을 전체적으로 무시할 수도 있습니다. 나에게 .DS_Store는 그중 하나입니다. 방법은 다음과 같습니다.

git config --global core.excludesfile /Users/mat/.gitignore

(또는 원하는 파일)

그런 다음 repo의 .gitignore처럼 파일을 편집하십시오. 절대 경로를 사용해야한다고 생각합니다.


26

파일이 단계별로 변경되어 파일을 제거 할 수없는 경우 :

git rm --cached -f *.DS_Store

19

터미널을 열고 "cd <ProjectPath>"를 입력하십시오.

  1. 기존 파일을 제거하십시오. find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. 이거 추가 해봐 .DS_Store

  4. "ctrl + x"입력

  5. "y"를 입력하십시오

  6. 파일을 저장하려면 입력하십시오

  7. git add .gitignore

  8. git commit -m '.DS_Store removed.'


nano .gitignore존재하지 않는 경우 파일을 생성하는 경우,이 명령은 프로젝트 루트 폴더에서 실행되어야합니다
Saif

17

최고 투표 답변은 훌륭하지만 나와 같은 신인을 돕는 방법은 다음과 같습니다 .gitignore 파일을 만들고, 편집하고, 저장하고, git에 이미 추가했을 수있는 파일을 제거한 다음 파일을 Github으로 푸시하는 방법이 있습니다.

.gitignore 파일 만들기

.gitignore 파일을 만들려면 touch지정된 이름으로 빈 파일을 만드는 파일 만 있으면됩니다. 다음 명령을 사용할 수 있도록 .gitignore라는 파일을 만들고 싶습니다.

touch .gitignore

파일 무시

이제 git에게 DS Store 파일을 무시하도록 지시하는 행을 .gitignore에 추가해야합니다. nano 편집기를 사용하여이 작업을 수행 할 수 있습니다.

nano .gitignore

Nano는 나가는 방법에 대한 지침이 포함되어 있기 때문에 좋습니다. ( Ctrl- O저장, 종료 Ctrl- X)

Github 요지 의 아이디어 중 일부를 복사하여 붙여 넣으면 무시할 공통 파일이 나열됩니다. 이 질문에 대답하기 위해 가장 중요한 것은 다음과 같습니다.

# OS generated files #
######################
.DS_Store
.DS_Store?

#은 주석이며 파일이 커질수록 파일을 정리하는 데 도움이됩니다.

Github 기사 에는 일반적인 아이디어와 지침이 있습니다.

git에 이미 추가 된 파일을 제거하십시오

마지막으로 디렉토리에서 해당 DS Store 파일을 실제로 제거해야합니다.

최고 투표 답변에서이 훌륭한 명령을 사용하십시오. 이것은 디렉토리의 모든 폴더를 통과하고 git에서 해당 파일을 제거합니다.

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

gitgitore를 Github에 푸시

마지막 단계에서는 실제로 .gitignore 파일을 커밋해야합니다.

git status

git add .gitignore

git commit -m '.DS_Store banished!'


3
단계에서 터치 명령이 필요하지 않습니다 ... nano가 파일을 생성합니다.
Corey Goldberg

1
나는 2 년 후 내 자신의 대답을 찾아서 사용했습니다. 나를 지나친 좋은 일. :)
Joshua Dance '

완벽하게 일했다!! 감사합니다
iUser

15

위의 git-rm을 git rm으로 변경하여 작동시켜야했습니다.

find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print

10

를 사용하여 삭제 git-rm한 다음 .DS_Store를 추가 하여 다시 추가되는 .gitignore것을 중지하십시오. blueharvest 를 사용 하여 모두 함께 생성되는 것을 막을 수도 있습니다


9

모든 폴더와 하위 폴더에서 DS_Store 파일을 제거하려는 경우 :


이미 커밋 된 DS_Store의 경우 :

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

다음과 같이 무시하십시오.

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

8

다음은 저에게 가장 효과적이었습니다. 일치하지 않는 파일 및 로컬로 수정 된 파일을 처리했습니다. 참고로 이것은 git 1.7.4.4를 실행하는 Mac 10.7 시스템에있었습니다.

찾아서 제거하십시오.

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

또한 전역 core.excludes 파일을 설정하여 모든 리포지토리에서 .DS_Store를 무시합니다.

먼저 파일을 만듭니다 (없는 경우).

touch ~/.gitignore

그런 다음 다음 줄을 추가하고 저장하십시오.

.DS_Store

이제 파일을 전체적으로 존중하도록 git을 설정하십시오 :

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

8

기존 파일을 제거하려면이 명령을 사용하십시오.

find . -name '*.DS_Store' -type f -delete

그리고 추가 .DS_Store.gitignore


6

snipplr 의 다음 줄 .DS_Store은 로컬 수정이있는 것을 포함하여 all을 지우는 것이 가장 좋습니다 .

find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print

--cached옵션은 .DS_Store어쨌든 재생산되기 때문에 로컬을 유지합니다 .

위에서 언급 한 것처럼 .DS_Store프로젝트 루트의 .gitignore 파일에 추가 하십시오. 그러면 더 이상 당신의 눈에 보이지 않을 것입니다 (repos).


5

나는 파티에 조금 늦었지만 좋은 대답이 있습니다. .DS_Store 파일을 제거하려면 터미널 창에서 다음 명령을 사용하지만 'find'가있는 파일을 삭제하는 데 매우주의하십시오. -name 옵션과 함께 특정 이름을 사용하는 것이보다 안전한 방법 중 하나입니다.

cd directory/above/affected/workareas
find . -name .DS_Store -delete

이전과 이후에 단순히 나열하려면 "-delete"를 생략 할 수 있습니다. 그들이 사라 졌다는 것을 확신시켜 줄 것입니다.

~ / .gitignore_global 조언과 관련하여 여기에주의하십시오. 멋진 파일을 각 작업 영역의 최상위 레벨 내에서 .gitignore에 배치하고 커밋하여 리포지토리를 복제하는 사람이 사용하면 이점을 얻을 수 있습니다.


4

이것은 작동합니다 :

find . -name "*.DS_Store" -type f -exec git-rm {} \;

.DS_Store포함하여 이름이으로 끝나는 모든 파일을 삭제합니다 ._.DS_Store.


3
별표가 있으면 안됩니다.
아리스토텔레스 Pagaltzis

3
내 Mac 시스템에서 .DS_Store 및 ._. DS_Store 파일을 찾았 기 때문에 별표가 있어야합니다.
MutantMahesh

3
@MutantMahesh. 이 경우 "*.DS_Store"별표가 find쉘에 의해 확장되지 않고 전달되도록해야합니다 .
TRiG

4

어떤 이유로 든 위의 어느 것도 내 Mac에서 작동하지 않았습니다.

내 솔루션은 터미널 실행에서입니다.

rm .DS_Store

그런 다음 다음 명령을 실행하십시오.

git pull origin master

3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force

3

저장소를 초기화 할 때 다음을 포함하는 git 명령을 건너 뛰십시오.

-u

문제가되지 않아야합니다.


1
다른 사람이 저장소를 만들었고 OP가 동기화하는 경우 어떻게 되나요?
jww

3

위의 두 가지 답변을 결합하여 저에게 효과적이었습니다.

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
  • $ git push origin master --force

3

무시 된 파일을 제거하십시오.

(.DS_Store)

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

2

이 문제를 해결하기위한 몇 가지 솔루션이 있습니다. .DS_Store 파일을 작성하지 않으려면 OS X Finder를 사용하여 폴더를 보지 마십시오. 폴더를 보는 다른 방법은 UNIX 명령 줄을 사용하는 것입니다. .DS_Store 파일을 제거하기 위해 DS_Store Terminator라는 타사 제품을 사용할 수 있습니다. 전체 시스템에서 .DS_Store 파일을 삭제하기 위해 UNIX 쉘 명령을 사용할 수 있습니다. 응용 프로그램 : 유틸리티에서 터미널 실행 UNIX 쉘 프롬프트에서 다음 UNIX 명령을 입력하십시오. sudo find / -name ".DS_Store"-depth -exec rm {} \; 암호를 묻는 메시지가 나타나면 Mac OS X 관리자 암호를 입력하십시오.

이 명령은 전체 시스템을 통해 파일 시스템의 루트 (/)에서 시작하여 모든 .DS_Store를 찾아서 제거합니다. 예약 된 작업으로 실행되도록이 명령을 구성하려면 아래 단계를 수행하십시오. 응용 프로그램 : 유틸리티에서 터미널 시작 UNIX 쉘 프롬프트에서 다음 UNIX 명령을 입력하십시오.

sudo crontab -e 암호를 입력하라는 메시지가 표시되면 Mac OS X 관리자 암호를 입력하십시오. vi 편집기에서 키보드의 문자 I을 한 번 누르고 다음을 입력하십시오.

15 1 * * * 루트 찾기 / -name ".DS_Store"-depth -exec rm {} \;

이를 crontab 항목이라고하며 다음 형식을 갖습니다.

분 시간 DayOfMonth 월 DayOfWeek 사용자 명령.

crontab 항목은 매일 오전 1시 15 분에 root라는 계정으로 시스템에서 명령이 자동으로 실행됨을 의미합니다.

이 명령은 find에서 끝까지 시작합니다. 시스템이 실행되고 있지 않으면이 명령이 실행되지 않습니다.

항목을 저장하려면 Esc 키를 한 번 누른 다음 Shift + z + z를 동시에 누르십시오.

참고 : 4 단계의 정보는 vi 편집기 전용입니다.


2

이것을 파일에 추가하십시오.

#Ignore folder mac
.DS_Store

이것을 저장하고 커밋하십시오.

git add -A
git commit -m "ignore .DS_Store"

그리고 지금 당신은 모든 커밋에 대해 이것을 무시합니다.


2

.gitignore명령을 사용하여 파일 작성touch .gitignore

그 안에 다음 줄을 추가하십시오

.DS_Store

.gitignore파일을 저장하고 git repo에 밀어 넣으십시오.


2

이 파일을 영원히 제거하고 다시 걱정할 필요가없는 가장 좋은 방법은

전역 .gitignore 파일을 만듭니다.

echo .DS_Store >> ~ / .gitignore_global

그리고 git에게 모든 저장소 에이 파일을 사용하고 싶다고 알려주십시오.

git config --global core.excludesfile ~ / .gitignore_global 그리고 그게 다야! .DS_Store가 나왔습니다.


1

.DS_STORE로컬 로 제거 할 필요가 없습니다

그냥 .gitignore파일에 추가 하십시오

.gitignore 파일은 Git에게 프로젝트에서 무시할 파일이나 폴더를 알려주는 텍스트 파일 일뿐입니다.

명령

  • nano .gitignore
  • 쓰기 .DS_Store그런 다음 클릭CTRL+X > y > Hit Return
  • git status 변경 사항을 마지막으로 보려면
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.