programing

디스크에서 이미 삭제된 여러 파일을 Git repo에서 제거

newstyles 2023. 4. 19. 22:35

디스크에서 이미 삭제된 여러 파일을 Git repo에서 제거

repo를 .rm(없음) git rm깃을 들다

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

수동으로 각 파일을 추가하지 않고 Git에서 이러한 파일을 제거하려면 어떻게 해야 합니까?

git rm file1 file2 file3 file4

이상적으로는 같은 방식으로 동작하는 것을 찾고 있습니다.git add .가능하시다면요.

Git 1.x의 경우

$ git add -u

이것은 이전에 추적된 파일의 삭제를 포함하여 추적된 파일을 자동으로 준비하도록 git에게 지시합니다.

Git 2.0의 경우

전체 작업 트리를 스테이징하려면:

$ git add -u :/

현재 경로만 스테이징하려면:

$ git add -u .
git ls-files --deleted -z | xargs -0 git rm 

당신이 찾고 있는 것일 수도 있습니다.나한테는 효과가 있어..

사용할 수 있습니다.

git add -u

삭제된 파일을 준비 영역에 추가한 후 커밋하려면

git commit -m "Deleted files manually"

단순히 실행하는 경우:

git add -u

git은 인덱스를 업데이트하여 삭제한 파일이 실제로 다음 커밋의 일부가 되어야 함을 알 수 있습니다.그런 다음 "git commit"을 실행하여 변경 내용을 체크인할 수 있습니다.

또는 다음을 실행하는 경우:

git commit -a

이러한 변경(및 기타 변경)은 자동으로 수행되고 커밋됩니다.

업데이트: 삭제된 파일만 추가하려면 다음을 수행하십시오.

git ls-files --deleted -z | xargs -0 git rm
git commit

아마 -A:를 찾고 있을 겁니다.

git add -A

것 - git add - u 와와 、 와와u uuuuuu uuu uuuu 。은 대략 hg에 합니다.addremove을 사용하다

삭제된 파일만 스테이징하려면:

for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done

또는 (xargs 방식):

git status | awk '/deleted/ {print $2}' | xargs git rm

나중에 편리하게 사용할 수 있도록 기본 명령 집합에 별칭을 지정할 수 있습니다.

git rm test.txt

실제 파일을 삭제하기 전 또는 삭제한 후.

git-add를 '--all' 또는 '--update' 옵션과 함께 사용하면 원하는 것보다 더 많은 것을 얻을 수 있습니다.새 파일 및/또는 수정된 파일도 색인에 추가됩니다.다른 파일을 건드리지 않고 git에서 삭제된 파일을 삭제하는 경우 bash 에일리어스가 설정되어 있습니다.

alias grma='git ls-files --deleted -z | xargs -0 git rm'

파일 시스템에서 제거된 모든 파일이 삭제된 것으로 인덱스에 추가됩니다.

그게 중요한 건 아니지만, 나는 선택된 대답에 동의하지 않는다.

git add -u 

...는 작업 트리의 해당 파일이 제거된 경우 인덱스에서 파일을 제거하지만 추적된 파일의 수정된 새 내용도 준비합니다.

git rm $(git ls-files --deleted)

한편, 추적된 삭제된 파일만 관리됩니다.

그래서 내 견해로는 후자가 더 나은 선택이다.

변경사항이 이것뿐이라면 간단히 다음 작업을 수행할 수 있습니다.

git commit -a

모든 변경을 커밋합니다.삭제된 파일도 포함됩니다.

git ls-files --deleted | xargs git rm 

삭제된 파일만 추가하는 것이 가장 좋습니다.

여기 몇 가지 다른 옵션이 있습니다.

git add .  => Add all (tracked and modified)/new files in the working tree.

git add -u => Add all modified/removed files which are tracked.

git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.

git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.

git add -u

-u --update 작업 트리가 아닌 인덱스에서 이미 추적된 파일과만 일치합니다.즉, 새 파일은 스테이징하지 않지만 추적된 파일의 수정된 새 내용을 스테이징하고 작업 트리에서 해당 파일이 제거된 경우 인덱스에서 파일을 제거합니다.

no 가 지정되어 있는 경우는, 디폴트로 「」로 합니다.즉, 현재 디렉토리와 그 서브 디렉토리의 모든 추적 대상 파일을 갱신합니다.

이 심플한 솔루션이라면 문제 없습니다.

git rm $(git ls-files --deleted)

를 에 ).gitconfig다음을 수행합니다.

[alias]
  rma = !git ls-files --deleted -z | xargs -0 git rm

이제 실행만 하면 됩니다.

git rma
git rm $(git ls-files -d)

되어 모든 파일을 삭제합니다.git ls-files을 이용하다 또는

git ls-files --deleted -z | xargs -0 git rm --cached

이렇게 하면 이전에 git에 의해 추적된 모든 삭제된 파일이 삭제되고 파일 이름에 공백이 있는 경우도 처리됩니다.

, POSIX 를 사용할 필요가 .xargs -0 -r과 같은 원인이 됩니다.xargs null content는 됩니다.

집::--cached ★★★★★★★★★★★★★★★★★」--deleted플래그는 아직 삭제되지 않은 파일이 실수로 삭제되는 것을 방지하기 위해 동시에 사용됩니다.

전술한 바와 같이

git add -u

는 삭제된 파일을 삭제하기 위해 스테이징하지만 업데이트하기 위해 파일을 수정하기도 합니다.

수정할 수 있는 파일을 분할 해제하려면

git reset HEAD <path>

만약 당신이 당신의 약속을 체계적이고 깨끗하게 유지하길 원한다면요.
이렇게 하면 삭제된 파일을 분할할 수도 있으므로 와일드카드를 사용할 때 주의하십시오.

수정 및 삭제된 파일을 자동으로 준비하도록 명령어를 전달하지만 Git에 알리지 않은 새 파일은 영향을 받지 않습니다.

-a

git add . && git commit -m -a "Your commit"

또는

git add --all && git commit -m "Your commit"

처리할 파일이 많은 경우에도 다음 작업을 수행할 수 있습니다.

git ls-files --deleted | xargs git rm

당신은 아마 코멘트로 커밋하고 싶을 것입니다.

자세한 내용은 유용한 Git 스크립트를 참조하십시오.

★★★★★★를 사용해 .-t가 실제로 되고 있는지 합니다.

방금 Virender의 답변을 수정했습니다.

git ls-files --deleted -z | xargs -t -0 git rm

git-add할 플래그 중 삭제된 파일만 스테이징할 수 있는 것은 없습니다.변경한 것이 삭제된 파일뿐이라면 문제 없습니다.그렇지 않으면 git-status를 실행하여 출력을 해석해야 합니다.

제레미의 대답에 따르면, 내가 얻은 것은 다음과 같다.

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. 파일 상태를 가져옵니다.
  2. 삭제된 파일의 경우 파일 이름을 분리합니다.
  3. #s로 시작하는 모든 행과 "deleted"라는 단어가 포함된 상태 행을 삭제합니다.정확히 어떤 행인지 기억나지 않고 존재하지 않기 때문에 상황에 따라 이 행을 변경해야 할 수 있습니다.표현식의 그룹화는 GNU 고유의 기능이라고 생각하기 때문에 gnutils를 사용하지 않는 경우 여러 개를 추가해야 할 수 있습니다.grep -v줄들.
  4. 파일 전달 대상git rm.

이걸 조개껍데기 가명으로 붙이는 건...

git commit -m 'commit msg' $(git ls-files --deleted)

이미 파일을 삭제한 후에 이 방법이 효과가 있었습니다.

같은 것이 필요해서 git gui "stage changed" 버튼을 사용했습니다.모든 것을 추가합니다.

'스테이지 체인지' 후에 '커밋'을 했는데...

작업 디렉토리가 다시 깨끗해졌습니다.

사용할 수 있습니다.git add -u <filenames>삭제된 파일만 스테이징합니다.

예를 들어 파일을 삭제한 경우templates/*.tpl, 그 후 를 사용합니다.git add -u templates/*.tpl.

-u는 저장소에는 존재하지만 작업 디렉토리에는 존재하지 않는 파일을 참조하기 위해 필요합니다.그 이외의 경우 디폴트는git add작업 디렉토리에서 파일을 찾는 것입니다.삭제된 파일을 지정해도 찾을 수 없습니다.

삭제된 파일을 명령으로 준비하기 위한 시스템 별칭 추가rm-all

UNIXalias rm-all='git rm $(git ls-files --deleted)'

창문들doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

메모

Windows 에서는,bash설치된.

(또 다른 변형)

디스크 파일에서 이미 삭제된 모든 폴더는 삭제하지만 특정 폴더는 삭제하지 않고 다른 폴더는 변경하지 않고 삭제하려고 했습니다.다음과 같은 것이 도움이 되었습니다.

git ls-files --deleted  | grep <folder-name> | xargs git rm

비슷한 것

git status | sed -s "s/^.*deleted: //" | xargs git rm 

할 수 있을 것 같아요.

비주얼 스튜디오 프로젝트용

'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

삭제된 파일 경로에 공간이 있을 때 유용합니다.

간단하게

git add . && git commit -m "the message for commit" && git push

로컬 저장소가 아닌 Repo에서 .log로 끝나는 모든 파일 삭제

git rm --cached $(git ls-files | grep "\.log$")

언급URL : https://stackoverflow.com/questions/492558/removing-multiple-files-from-a-git-repo-that-have-already-been-deleted-from-disk