Git: 리포지토리에서 파일을 삭제하지 않고 인덱스에서 파일을 제거하는 방법
사용할 때
git rm --cached myfile
목표인 로컬 파일 시스템에서 삭제하지 않습니다.그러나 명령을 사용하기 전에 이미 파일을 버전화하고 커밋한 후 중앙 저장소로 밀어넣고 다른 저장소로 끌어넣으면 해당 시스템에서 파일이 삭제됩니다.
파일 시스템에서 파일을 삭제하지 않고 버전 관리에서 제거할 수 있는 방법이 있습니까?
편집: 명확해졌으면 좋겠습니다.
저는 Git 커밋이 "이 파일 추적을 중지하지만 삭제하지 않음"과 같은 의도를 기록할 수 있다고 생각하지 않습니다.
이러한 의도를 제정하려면 Git 외부에서 파일을 삭제하는 커밋을 병합(또는 재배치)하는 리포지토리에 개입해야 합니다.
복사본 저장, 삭제 적용, 복원
아마도 가장 쉬운 방법은 다운스트림 사용자에게 파일 복사본을 저장하고 삭제 내용을 풀한 다음 파일을 복원하라고 말하는 것입니다.기본 재배치를 통해 풀링하고 파일에 대한 수정 사항을 '전달'하는 경우 충돌이 발생합니다.이러한 충돌을 해결하려면 다음을 사용합니다.git rm foo.conf && git rebase --continue) (삭제된 커밋이 변경된 경우)git rebase --skip(충돌하는 커밋이 제거된 파일로만 변경된 경우).
파일을 삭제하는 커밋을 풀링한 후 추적되지 않은 파일로 복원
이미 삭제 커밋을 풀한 경우에도 기트 show를 사용자가 이전 버전의 파일을 복구할 수 있습니다.
git show @{1}:foo.conf >foo.conf
또는 깃 Checkout을 사용하여(William Pursell의 의견에 따라) 인덱스에서 다시 제거해야 합니다.
git checkout @{1} -- foo.conf && git rm --cached foo.conf
삭제를 , (또는 ) 은 또사의로경우수한행용, 다다다과수있니습필할우경음요작업을작, ▁other▁something▁than▁if▁need▁since▁your▁actions▁they▁(다또▁pulling▁may▁have있이 아닌 다른 것이 필요할 수 있습니다.@{1}그들은 사용할 수 있습니다.git log -g그들이 당신의 삭제를 철회하기 직전에 커밋을 찾는 것.
주석에서 "추적을 해제하지만 보관"하려는 파일은 소프트웨어를 실행하는 데 필요한 구성 파일의 일종이라고 언급했습니다(저장소에서 직접).
파일을 '기본값'으로 유지하고 수동/자동으로 활성화
파일의 되지 않는 에는 ( 에서할 수 .foo.conffoo.conf.default그런 다음 사용자에게 다음과 같이 지시합니다.cp foo.conf.default foo.conf사용자가 예: 또는 의 내용으로 프로그램을 :Makefile소프트웨어를 시작/배포하기 위해 기본 메커니즘을 시작/배포 프로세스에 통합할 수 있습니다.
test -f foo.conf || test -f foo.conf.default &&
cp foo.conf.default foo.conf
이러한 기본 메커니즘을 사용하여 사용자는 이름을 변경하는 커밋을 풀 수 있어야 합니다.foo.conffoo.conf.default별도의 일을 하지 않아도 됩니다.또한 나중에 추가 설치/저장소를 만들 경우 구성 파일을 수동으로 복사할 필요가 없습니다.
기록을 다시 작성하려면 수동 작업이 필요합니다.
저장소에 내용을 유지 관리하는 것이 허용되지 않는 경우와 같은 방법으로 기록에서 완전히 제거하기를 원할 수 있습니다.이는 각 분기/리포지토리에 대한 수동 개입이 필요한 기록을 다시 쓰는 것과 같습니다(비트베이스 관리 페이지의 "업스트림 기본 재배치에서 복구" 섹션 참조).구성 파일에 필요한 특수 처리는 다시 쓰기에서 복구하는 동안 수행해야 하는 또 다른 단계일 뿐입니다.
- 구성 파일의 복사본을 저장합니다.
- 다시 쓰기에서 복구합니다.
- 구성 파일을 복원합니다.
재발 방지를 위해 무시
어떤 방법을 사용하든, 당신은 아마도 구성 파일 이름을 포함하고 싶을 것입니다..gitignore을 저장합니다.git add foo.conf하지만 필요합니다.)-f/--force만약 당신이 두 개 이상의 구성 파일을 가지고 있다면, 당신은 그것들을 모두 하나의 디렉토리로 '이동'하고 전체를 무시하는 것을 고려할 수 있습니다('이동'이란 프로그램이 구성 파일을 찾을 것으로 예상되는 위치를 변경하는 것을 의미합니다.또한 사용자(또는 시작/배포 메커니즘)가 파일을 새 위치로 복사/이동하도록 합니다. 무시할 디렉터리에 mv 파일을 저장하는 것은 바람직하지 않습니다.
이번 주에 실수로 커밋한 후 공유 저장소에서 빌드 파일을 제거하려고 했을 때와 동일한 문제가 발생했습니다.
http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html
지금까지 언급되지 않고 잘 작동했습니다.
git update-index --assume-unchanged <file>
원하는 파일을 버전 제어에서 제거하려면 다른 모든 명령을 정상적으로 사용합니다.
git update-index --no-assume-unchanged <file>
만약 당신이 그것을 다시 넣고 싶었더라면.
편집: Chris Johnsen과 KPM의 의견을 참조하십시오. 이는 로컬에서만 작동하며 다른 사용자도 이를 수행하지 않을 경우 해당 파일은 버전 관리 하에 유지됩니다.승인된 답변은 이 문제를 해결하기 위한 보다 완전한/정확한 방법을 제공합니다.또한 이 방법을 사용하는 경우 링크의 일부 참고 사항:
분명히 이것과 관련된 많은 경고들이 있습니다.파일을 직접 추가하면 인덱스에 추가됩니다.이 플래그가 설정된 커밋을 병합하면 병합이 정상적으로 실패하여 수동으로 처리할 수 있습니다.
git rm --cached remove_file- gitignore에 파일 추가
git add .gitignoregit commit -m "Excluding"- 재미있게 놀아요 ;)
인덱스에서 파일을 제거하려면 다음을 사용합니다.
git reset mylife
로컬 복사본이나 다른 사용자의 복사본에는 영향을 미치지 않습니다.
를 한 에.git rm --cached, 추가해 .myfile에▁.gitignore파일(존재하지 않는 경우 파일 만들기).이것은 그것이 무시하도록 지시할 것입니다.myfile.
그.gitignore파일이 버전이 지정되었으므로 이를 커밋하고 원격 저장소에 푸시해야 합니다.
제 해결책은 다른 작업 복사본을 가져와서 다음 작업을 수행하는 것입니다.
git log --pretty="format:" --name-only -n1 | xargs git checkout HEAD^1
최신 댓글에 있는 모든 파일 경로를 가져와서 HEAD의 부모로부터 확인하라는 메시지입니다.됐습니다.
위의 솔루션은 대부분의 경우에 적합합니다.그러나 해당 파일의 모든 추적(예: 암호와 같은 중요한 데이터)도 제거해야 하는 경우 파일을 해당 파일에서 계속 검색할 수 있으므로 전체 커밋 기록에서도 제거해야 합니다.
여기에는 파일이 존재하지 않는 것처럼 전체 커밋 기록에서 파일의 모든 추적을 제거하고 시스템에 파일을 유지하는 솔루션이 있습니다.
https://help.github.com/articles/remove-sensitive-data/
로컬 Git 저장소에 있고 모의 실행을 수행할 필요가 없는 경우 실제로 3단계로 건너뛸 수 있습니다.저의 경우 이미 .gitignore 파일을 생성하고 작업하고자 하는 저장소에 있었기 때문에 3단계와 6단계만 필요했습니다.
변경 내용을 보려면 리포지토리의 GitHub 루트로 이동하여 페이지를 새로 고쳐야 할 수 있습니다.그런 다음 링크를 탐색하여 파일이 있던 이전 커밋으로 이동하여 파일이 제거되었는지 확인합니다.이전 커밋 페이지를 새로 고치는 것만으로는 변경 내용이 표시되지 않았습니다.
처음에는 위협적으로 보였지만, 실제로는 쉽고 매력적으로 작동했습니다! :-)
언급URL : https://stackoverflow.com/questions/2604625/git-how-to-remove-file-from-index-without-deleting-files-from-any-repository
'programing' 카테고리의 다른 글
| "쿼리 내에서 DML 작업을 수행할 수 없음"에 대한 솔루션? (0) | 2023.06.26 |
|---|---|
| 참조된 테이블에 외부 키의 참조 열 목록과 일치하는 기본 키 또는 후보 키가 없습니다. (0) | 2023.06.26 |
| 자바를 이용한 대용량 엑셀 파일 작성 API (0) | 2023.06.21 |
| Spring Boot의 리소스에서 JSON 파일을 읽는 방법 (0) | 2023.06.21 |
| 전체 파일 경로에서 파일 이름 찾기 (0) | 2023.06.21 |