.gitignore 모든 폴더와 하위 폴더에있는 모든 .DS_Store 파일


560

.gitignore 파일에 .DS_Store를 추가했지만 모든 폴더와 하위 폴더가 아닌 루트 디렉토리의 .DS_Store 만 무시하는 것 같습니다.

이 문제를 어떻게 해결합니까?



.gitignore에 정확히 어떻게 추가 했습니까? 모든 디렉토리에서 작동해야합니다 (나를 위해).
Thilo

그것은 나를 위해 일하고 있습니다. 또한 파일 끝에서 (플랫폼 특정) 줄 바꿈이 있어야하지만 계층 구조의 일부에서 .DS_Store 디렉토리를 변경하지 않은 경우 시도했지만 여전히 무시되었습니다.
enorl76

내가 이해 한 문제는 모든 하위 디렉토리에서 수동 으로이 작업을 수행하지 않고 모든 하위 디렉토리에서 .DS_Store의 모든 발생을 쉽게 무시하는 방법이었습니다. 나는 같은 문제가 있었다. 아래 답변은 해결 방법 (마지막 2 단락)을 보여줍니다.
petrsyn

답변:


646

문제는 이전 커밋에서 실수로 .DS_Store 파일을 리포지토리에 추가 한 것입니다. 물론 파일이 리포지토리에서 추적되면 적용 가능한 .gitignore 파일의 항목과 일치하더라도 계속 추적됩니다.

리포지토리에 추가 된 .DS_Store 파일을 수동으로 제거해야합니다. 사용할 수 있습니다 git rm --cached .DS_Store. 제거되면, 자식은 그것을 무시한다. 루트 .gitignore 파일에는 다음 줄만 있으면됩니다 .DS_Store. 기간을 잊지 마세요!

git rm --cached .DS_Store만 제거 .DS_Store현재 디렉토리에서. 저장소에서 find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch모두 제거 하는 데 사용할 수 있습니다 .DS_Stores.

팁 펠트 : 당신은 아마 된 .DS_Store 파일을 포함하고 싶지는 않을 때문에, 전역 규칙을합니다. 먼저 전역 .gitignore 파일을 어딘가에 만드십시오 (예 :) echo .DS_Store >> ~/.gitignore_global. 이제 git에게 모든 저장소에 사용하도록 지시하십시오 git config --global core.excludesfile ~/.gitignore_global.

이 페이지는 귀하의 질문에 답변하는 데 도움이되었습니다 : https://help.github.com/articles/ignoring-files


41
마지막 2 개의 문단이이 질문에 답합니다. 감사.
petrsyn

70
'git rm --cached .DS_Store'´는 현재 디렉토리에서 하나의 .DS_Store 만 제거합니다. ´´find를 사용하십시오. -name .DS_Store -print0 | REPO에서 모든 .DS_Stores 제거 xargs를 -0 자식 RM --ignore-unmatch''
auco

4
무시하는 다른 일반적인 파일 목록이 편리 할 수도 있습니다
geotheory

14
전역 규칙 IMO를 사용하는 나쁜 생각 : 여러 사용자 / 컴퓨터에서 전역 구성을 유지하려고 시도해도 효과가 없습니다. 저장소 자체의 저장소를 관리하는 규칙을 원합니다. 이에 동의
Yarin

15
나는 당신에 동의하지 않습니다. (나는 그것이 통찰력이 있다고 생각하기 때문에 내가 당신의 코멘트를 upvoted하더라도.) 우리는 세계 할 경우, 모든 맥 사용자가 해당 작업을 수행해야하지만 한 번만. 리포지토리 전체를 수행하는 경우 모든 리포지토리마다이를 수행해야합니다. 나는 당신에 대해 모른다, 그러나 나는 항상 새로운 repos를 만든다. 전 세계적으로 수행함으로써 문제를 한 번에 해결합니다.
Edward Newell

355

추가 **/.DS_Store.gitignore하위 디렉토리를


.DS_Store이미 커밋 한 경우 :

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

모든 저장소에 무시하려면 (때로는 이름 ._.DS_Store)

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

여전히 내 repo에 업로드 되었습니까?
프레디시다 우룩

@FreddySidauruk git rm --cached your_file먼저 사용
ronald8192

@FreddySidauruk find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch, from : stackoverflow.com/questions/18393498/…
ronald8192

1
-frelavent 폴더에 파일이 열려 있으면 추가 가 필요한 것 같습니다 :find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan

158

.DS_Store가 git 저장소에 추가되지 않은 경우 간단히 .gitignore 파일에 추가하십시오.

없는 경우라는 파일을 만듭니다.

.gitignore

앱의 루트 디렉토리에서 간단히 작성하십시오.

**/.DS_Store

그 안에. 이렇게하면 .DS_Store 파일이 git에 몰래 들어 가지 않습니다.

그러나 이미 있다면 터미널에 작성하십시오.

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

그런 다음 변경 사항을 커밋하고 푸시하여 원격 저장소에서 .DS_Store를 제거하십시오.

git commit -m "Remove .DS_Store from everywhere"

git push origin master

이제 .DS_Store를 .gitignore 파일에 추가 한 다음 두 개의 마지막 코드 조각 (git commit ..., git push ...)으로 다시 커밋하고 푸시하십시오.


3
왜 이중 별표입니까? 그게 무슨 뜻이야?
MilanG

1
@MilanG 기본적으로 '이 디렉토리와 모든 하위 디렉토리에서 검색'을 의미하는 키워드입니다.
lachie_h

1
그것이 이중 별표가 무엇을 의미하는지에 대한 완벽한 설명인지는 확실하지 않습니다. 와일드 카드입니다. 수 *또는 **당신이 달성하려는 작업에 따라 달라집니다. 쉘에게 디렉토리 탐색 방법을 알려주는 방법입니다. 이 stackoverflow 답변은 완전히 stackoverflow.com/a/28199633/4092170
El'Magnifico

** 숨겨진 (./) 디렉토리와 절대 일치하지 않습니다 : facelessuser.github.io/wcmatch/glob
Jonathan

이 실제로 작동 ... 대답으로 표시해야
이치

85

귀하의 .gitignore의 파일은 다음과 같아야합니다 :

# Ignore Mac DS_Store files
.DS_Store

슬래시를 포함하지 않는 한 모든 디렉토리의 파일 이름과 일치합니다. ( 여기에서 )


그것은 여전히 ​​repo에
올랐다

@FreddySidauruk 다음 실행해야합니다git rm --cached path/to/file/here
Sgnl

23

1 단계, 모든 *.DS_store파일을 삭제 하십시오. 하나는 실행할 수 있습니다

git rm -f *.DS_Store

그러나 rm -f오타가 있으면 조금 위험 할 수 있습니다! 2 단계 : 추가

*.DS_Store
.DS_Store

.gitignore에. 이것은 나를 위해 일했다!


13

*.DS_Store.gitignore 파일에 추가 하십시오. 그것은 나를 위해 완벽하게 작동합니다


11

--cachedEdward Newell이 원래 답변에서 언급했듯이 auco의 답변에 플래그를 추가하여 로컬 .DS_store 파일을 유지할 수도 있습니다. 수정 된 명령은 다음과 같습니다. find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch.. cheers and thanks!


5

단계 : 1)이 명령을 사용하여 기존 파일 제거

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

2 단계 : .gitignore 파일에 .DS_Store 추가

단계 : 3) .gitignore git add .gitignore git commit -m "removed .DS_Store"에서 변경 사항을 커밋하십시오.


3
  1. $ git rm ./*.DS_Store -자식에서 모든 .DS_Store를 제거하십시오.
  2. $ echo \.DS_Store >> .gitignore -향후 .DS_Store 무시

커밋 & 푸시

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.