2013-08-27 4 views
9

실수로 git repo에서 작업 영역 구성 파일을 추적했습니다. 문제를 해결하려고 시도하면 해당 파일이 git rm --cached이고 .gitignore 파일에 추가되었습니다.git checkout gitignore에서 파일 삭제

이제 저장소에서 지점을 체크 아웃 할 때마다 해당 저장소가 삭제됩니다. 이것을 피할 수있는 방법이 있습니까?

+1

파일을 삭제했습니다. 그리고 당신은 그들이 삭제 될 것이라고 불평하고 있습니까? 나는 –

+0

을 따르지 않는다. 내가 자식을 변경하기를 원할 때마다 지우지 말고 지울 때마다 지우고 싶다. – aitkiar

+1

은 모든 지점에서 커밋 된 .gitignore입니까? –

답변

10

이 문제는 git rm 당신이 일에 여전히 파일이 포함 된 하나 개의 지점에서 전환 할 때 git rm '에드 자식 제대로이 파일을 제거 할 경우 즉, 모든 일부 지점에 존재하는 커밋에 불과하다. 실제로 수행하고자하는 작업은 this question에 따라 git의 기록에서 파일을 제거한 것입니다. 그러나 이것은 저장소 히스토리를 다시 쓰는 것을 의미한다는 것을 알아야합니다. 따라서 한 가지 경우 나중에 git push --force에해야하고 또 다른 경우에는이 저장소와 함께 작업하는 다른 사람들을 화나게 할 것입니다.

편집해야 재 작성 역사는, 실행 가능하면 모든 분기 기존 git rm --cached 조치를 커밋 확인하지. 그러나 삭제하기 전에 체크 아웃하면 불쾌한 재 삭제가 발생합니다.

요약 :

  • 역사는 다시 할 수없는 경우 각 지점에 .gitignore + git rm --cached를 저지하지만, (태그 등을 통해) 이전 버전을 체크 아웃하는 것은)에 대한 오류를 얻을 것이라는 점을 기억 기존의 untracked 파일을 체크 아웃하고 b) 이전 버전을 자주 체크 아웃 할 가능성이 있거나 (또는 ​​실수로 커밋 된 파일 중 일부가 민감한 데이터를 포함 할 가능성이있는) HEAD
  • 히스토리를 다시 쓸 때 이러한 파일을 삭제할 수 있습니다 , 그러나 이것이 모든 사람을 망칠 것이라는 것을 알아라. 자체의 복제
  • 사실

는 세 번째 가능성이있다 : 각 지점의 경우, 원래 버전 동안하는 일이 (모든 파일을 제거 커밋 추가, 역사를 다시 작성하는 새로운 지점을 만들 무시하는 사람을 제외하고!)에 대해 설명하고, 사용자에게 재 작성된 브랜치로 전환하고 재 작성되지 않은 브랜치의 로컬 사본을 제거하도록 사용자에게 요청하는 매우 눈에 띄는 파일을 추가합니다.


1 그 이유는 하나 이후로 전환 할 것으로 예상되지 당신이 바로 그 시작에서 버전되지 말았어야 이러한 파일의 다른 사용자의 버전을 삭제하지 않으려하고, 이전 버전으로 돌아 가면 "파일이 이미 있습니다."오류가 발생하지 않습니다.

+0

이것은 역사에서 파일을 삭제하는 것이 아니라 나뭇 가지 전체에서'.gitignore'를 일관되게 유지하는 것에 관한 것임을 분명히 밝혀주십시오. –

+0

@YuvalAdam 그것은 히스토리에서 파일을 삭제하는 것에 관한 것입니다. 그들은 처음부터 시작해서'.gitignore'는 브랜치에서 삭제 기능을 수정하지 않을 것입니다 (그러나 각 브랜치에서'git rm' +'.gitignore' 커밋은 가능할 것입니다.), 많은 사용자가 많은 비용을 부담하더라도 선호합니다 더러운 역사의 ...) –

+0

다른 가지에있는 다른 gitignore는 내가 수정 한 첫 번째 것이다. 그러나 그것은 문제를 해결하지 못했습니다. – aitkiar