etc./StackOverFlow

로컬 파일 시스템에서 파일을 삭제하지 않고 Git 리포지토리에서 파일 제거

청렴결백한 만능 재주꾼 2021. 10. 5. 04:43
반응형

질문자 :mveerman


내 초기 커밋에는 일부 로그 파일이 포함되어 있습니다. .gitignore*log 를 추가했으며 이제 저장소에서 로그 파일을 제거하려고 합니다.

 git rm mylogfile.log

저장소에서 파일을 제거하지만 로컬 파일 시스템에서도 제거합니다.

파일의 로컬 복사본을 삭제 하지 않고 저장소에서 이 파일을 제거하려면 어떻게 해야 합니까?



man 파일에서 :

--cached 가 주어지면 준비된 콘텐츠는 분기의 끝 부분이나 디스크의 파일과 일치해야 인덱스에서 파일을 제거할 수 있습니다.

따라서 단일 파일의 경우:

 git rm --cached mylogfile.log

단일 디렉토리의 경우:

 git rm --cached -r mydirectory

bdonlan

리포지토리에서 전체 폴더(예: Resharper 파일)를 제거하려면 다음과 같이 하십시오.

 git rm -r --cached folderName

나는 일부 resharper 파일을 커밋했으며 다른 프로젝트 사용자에게 지속되는 것을 원하지 않았습니다.


Sam Tyson

로컬 파일 시스템에서 파일을 삭제하지 않고 .gitignore를 기반으로 저장소에서 파일을 제거할 수도 있습니다.

 git rm --cached `git ls-files -i -X .gitignore`

또는 Windows Powershell에서:

 git rm --cached $(git ls-files -i -X .gitignore)

null

여기 내 대답에 따라 : https://stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository

로컬이 아닌 git 저장소에서만 폴더/디렉토리 또는 파일을 제거하려면 간단한 3단계를 시도하십시오.


디렉토리를 제거하는 단계

 git rm -r --cached File-or-FolderName git commit -m "Removed folder from repository" git push origin master

다음 커밋에서 해당 폴더를 무시하는 단계

다음 커밋에서 해당 폴더를 무시하려면 루트에 .gitignore 라는 파일 하나를 만들고 해당 폴더 이름을 넣습니다. 원하는만큼 넣을 수 있습니다

.gitignore 파일은 다음과 같습니다.

 /FolderName 

디렉토리 제거


Suresh Karia

또한 민감한 데이터(예: 암호가 포함된 파일)를 커밋한 경우 저장소 기록에서 완전히 삭제해야 합니다. 다음은 이를 수행하는 방법을 설명하는 가이드입니다. http://help.github.com/remove-sensitive-data/


BoD

보다 일반적인 솔루션:

  1. .gitignore 파일을 편집합니다.

    echo mylogfile.log >> .gitignore

  2. 인덱스에서 모든 항목을 제거합니다.

    git rm -r -f --cached .

  3. 인덱스를 다시 작성하십시오.

    git add .

  4. 새 커밋 만들기

    git commit -m "Removed mylogfile.log"


mAsT3RpEE

Git을 사용하면 파일이 변경되지 않은 것으로 가정하여 해당 파일을 무시할 수 있습니다. git update-index --assume-unchanged path/to/file.txt 명령을 실행하여 수행됩니다. 파일을 그렇게 표시하면 git은 해당 파일의 변경 사항을 완전히 무시합니다. git status 또는 git diff를 실행할 때 표시되지 않으며 커밋되지도 않습니다.

( https://help.github.com/articles/ignoring-files에서 )

따라서 삭제하지 않고 변경 사항을 영원히 무시합니다. 나는 이것이 로컬에서만 작동한다고 생각하므로 동료는 위와 같은 명령을 실행하지 않는 한 여전히 변경 사항을 볼 수 있습니다. (그래도 이건 확인이 필요합니다.)

참고: 이것은 질문에 직접 답변하는 것이 아니라 다른 답변의 의견에 있는 후속 질문을 기반으로 합니다.


Rystraum

파일을 추적 해제 하고 로컬 및 원격 저장소에서 삭제하지 않으 려면 다음 명령을 사용하십시오.

 git update-index --assume-unchanged file_name_with_path

Afraz Ahmad

위의 답변은 저에게 효과가 없었습니다. 커밋된 모든 파일을 제거하기 위해 filter-branch 를 사용했습니다.

다음을 사용하여 git 저장소에서 파일을 제거합니다.

 git filter-branch --tree-filter 'rm file'

다음을 사용하여 git 저장소에서 폴더를 제거합니다.

 git filter-branch --tree-filter 'rm -rf directory'

이렇게 하면 모든 커밋에서 디렉터리나 파일이 제거됩니다.

다음을 사용하여 커밋을 지정할 수 있습니다.

 git filter-branch --tree-filter 'rm -rf directory' HEAD

또는 범위:

 git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD

모든 것을 원격으로 푸시하려면 다음을 수행할 수 있습니다.

 git push origin master --force

Martijn Mellens

@bdonlan 의 허용되는 답변에 추가하고 싶습니다.


이 답변을 사용하여 원격에 있는 파일을 제거하지 마십시오.

 git rm --cached filename

대답은 무엇을해야합니까?

이전 커밋에서 실수로 커밋한 로컬 스테이지 영역에서 일부 파일을 제거해야 합니다.

  1. 그리고 리모콘으로 밀지 않았습니다.
  2. 그리고 원격으로 푸시하면 다른 사람들은 이러한 변경 사항에 신경 쓰지 않습니다.

추적 되지 않은 상태에서 파일을 이동합니다. 즉, 파일을 삭제 하고 다시 추가합니다.

그래서 git은 더 이상 그들에 대해 알지 못합니다.


무엇이 잘못될 수 있습니까?

원격지에는 , , 와 같은 일이 있으며, 그 결과 혼란이 발생합니다.


왜요?

팀과 공동 작업할 때 원격으로 변경하면 원격에서 해당 변경 사항과 에서 가져오는 모든 팀이 삭제됩니다.

요약 : 스테이징에서 파일을 제거한 다음 푸시하면 협업 팀의 로컬 저장소에서도 파일이 삭제됩니다( , 은 . ).


Zahid Khan

이것은 git에서 '제거'가 의미하는 바에 따라 다릅니다. :)

자세한 내용은 git rm --cached를 사용하여 파일을 언스테이징할 수 있습니다. 무언가를 언스테이징하면 더 이상 추적되지 않지만 이전 커밋에서 파일이 제거되지는 않습니다.

예를 들어 모든 이전 커밋에서 민감한 데이터를 제거하기 위해 파일을 언스테이징하는 것 이상의 작업을 수행하려는 경우 BFG Repo-Cleaner 와 같은 도구를 사용하여 분기 필터링을 살펴보고 싶을 것입니다.


Zach

파일을 무시하고 git에서 파일을 제거하고 git을 업데이트합니다(제거용).

참고: 민감한 정보에 대한 기록은 다루지 않습니다.

이 프로세스는 확실히 git에서 무슨 일이 일어나고 있는지 어느 정도 이해해야 합니다. 시간이 지남에 따라 저는 다음과 같은 프로세스를 수행하는 방법을 배웠습니다.

1) 파일 무시

  • .gitignore 를 추가하거나 업데이트하십시오. 귀하와 같은 많은 경우에 상위 디렉토리(예: log/ 가 사용할 정규식입니다.
  • .gitignore 파일 변경 사항을 커밋하고 푸시합니다(푸시가 필요한지 확실하지 않음, 완료해도 해가 없음).

2) git에서 파일을 제거합니다(전용).

  • git rm --cached some_dir/ 하여 git에서 파일을 제거합니다.
  • 여전히 로컬에 남아 있는지 확인하십시오(그래야 합니다!).

3) 해당 변경 사항을 추가하고 커밋합니다. (본질적으로 이것은 "추가" 명령이 혼란스럽더라도 삭제하는 내용을 "추가"하는 변경 사항입니다!)

  • git add .
  • git commit -m"removal"

Michael Durrant

출처 : 여기를 클릭하세요


출처 : http:www.stackoverflow.com/questions/1143796/remove-a-file-from-a-git-repository-without-deleting-it-from-the-local-filesyste

반응형