.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.