2014-02-19 7 views
16

Xcode에서 .DS_Store 및 * .xcuserstate가 항상 변경되어 커밋 될 필요가 없음을 발견했습니다..xcuserstate 및 DS_Store 파일을 git에서 제거

.DS_Store 
*.xcuserstate 

다른 항목들 : 그래서, 나는이 들어있는 .gitignore 파일을 썼다. 그럼 내가 사용 :

git rm --cached *xcuserstate 
git rm ---cached .DS_Store 

버전 제어에서 이미 이러한 파일 형식을 제거하려면. 그러나 Xcode를 병합 할 때 커밋해야 할 변경 사항이 있음을 알립니다. 이러한 변경에는 .DS_Store 파일 및 .xcuserstate 파일이 포함됩니다.

그래서,이 시도 : How can I Remove .DS_Store files from a Git repository?

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

와 나는 같은 결과를 얻었다. 소스 제어에서 이러한 파일을 제거하려면 어떻게합니까?

+0

Xcode의 변경 사항을 커밋하고 명령 줄에서 변경했습니다. 어떤 이유로 Xcode가 올바르게 커밋되지 않았습니다. 명시 적으로 커맨드 라인에서 커밋 한 후 마침내 성공했습니다. 내가 병합하고자하는 두 가지 분기를 변경했지만 지금 Xcode는 병합 할 수 없다고 말합니다. "파일 .gitignore에 나무 충돌이있었습니다." –

+0

다시 한 번 명령 줄이 작동했습니다. 명령 줄을 사용하여 병합했는데 모든 것이 잘 작동했습니다. –

답변

20

도움이되는지 확인합니다. 이미했던 것처럼

, 실행

$ git rm --cached path/to/.DS_Store 
$ git rm --cached *.xcuserstate 

주, 당신은 다른 디렉토리에서 일부있을 수 있습니다, 당신은 그들 모두를 얻기 위해 여러 호출을해야 할 수 있도록. 이 시점에서, 당신의 제거 인덱스에 개최되지만, 아직도 할 일이 남아있다 : ​​당신의 .gitignore를 추가하고, 최종 결과 커밋 :

$ git add .gitignore 
$ git commit -m "Remove and ignore .xcuserstate and .DS_Store files." 
이제

그들이에있는 저장소에서 제거하고 무시됩니다를 미래. 참고 : git rm --cached을 로컬로 사용한 경우에도 다른 사람의 파일이 제거됩니다. 불행히도, 이것에 대해 할 수있는 일이별로 없습니다. 또한 파일은 여전히 ​​기록에 남아 있으므로 작업 내용에 따라 다른 브랜치에서 해당 파일을 볼 수 있으며 모든 브랜치는 새로운 커밋이있는 항목을 기반으로합니다.

+2

git rm --cached * .DS_Store를 사용하여 프로젝트의 모든 .DS_Store 파일을 찾아서 제거 할 수도 있습니다. –

+2

아마도 쉘을 확장하여 git이 그 명예를 지키게하려면 따옴표로 묶어야합니다. 게다가, 나는 다른 종류의 시간에 그것을 사용하고 의도하지 않은 파일을 우연히 삭제하려는 유혹을받을 수 있기 때문에 일반적으로 그러한 전술을 피합니다. 그러나주의를 기울이면 유용합니다. – jszakmeister

2

git update-index --assume-unchanged *.xcuserstate .DS_Store을 시도하고 당신은 준비 영역에서 제거 후 변경 사항을 커밋 할 필요가

+0

이것은 무엇을합니까? –

+0

힘내 기는 그들을 변경된 것으로 인식하지 않으며, 커밋을 요구하지 않습니다. – user376507

+0

문제는 Xcode와 OS X가 항상 이러한 파일을 변경하기 때문에 Xcode는 끊임없이 다시 커밋해야한다고 생각합니다. –