git 저장소에서 병합 한 후 .orig 파일을 삭제하는 방법은 무엇입니까?


160

병합하는 동안 내 자식 저장소에서 .orig 파일을 확인하는 방법이 수정되었으며 추적되지 않은 섹터에 표시됩니다. 그러나 더 이상 내 저장소 에이 파일을 원하지 않습니다. 그렇게하는 방법.

    modified:   Gemfile.lock.orig
    #   modified:   Gemfile.orig
    #   modified:   app/assets/images/bg_required.png.orig
    #   modified:   app/assets/javascripts/application.js.orig

    etc...

도움을 주시면 감사하겠습니다.



@ziu, 저장소에 이미 존재하고 git merge 또는 다른 개발자가 체크인 한 파일을 제거하고 싶습니다
maximus ツ

1
체크인 파일에 대한 부분을 놓쳤습니다. 그러나 .orig 파일은 mergetool로 작성됩니다. 깨끗하지 않은 충돌 해결로 들립니다.
ziu

전체 기록에서 파일을 완전히 제거해야합니까?
linquize

1
이것을 확인하십시오 stackoverflow.com/questions/872565/…
ziu

답변:


253

이 경우 가장 좋은 해결책은 간단하게 유지하고 git과 독립적으로 해당 파일을 제거하는 것입니다.

cd /your/repo/directory
find . -name '*.orig' -delete 

또는 Windows / PowerShell에서 다음 명령을 실행할 수 있습니다.

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item

14
술어 오류가 발생하면 find를 사용하십시오. -name '* .orig'| xargs rm -f
Neil

경고처럼 'find -delete'를 사용하는 것은 위험 할 수 있습니다. 삭제하려는 항목 만 삭제하도록 디렉토리 (이 경우 '.')가 올바른지 확인하십시오.
kingledion

8
그것을 git clean -df하지 않는 것은 고통이다 . 왜 남은 쓰레기를 수동으로 청소해야합니까?
Sridhar Sarnobat

Windows는 어떻습니까?
Panzercrisis

3
@ Panzercrisis Windows를 사용하는 경우 Git과 인터페이스하는 터미널 에뮬레이터가 이미 있습니다. 나는 일반적으로 필요한 다른 도구와 함께 BASH를 포함하는 "gitforwindows"를 추천한다
TheChymera

151

여기 또는 여기 에서git clean 더 많은 정보를 찾아 보십시오


1
추적되지 않은 파일을 정리할 수 있지만 이미 리포지토리에있는 파일을 제거하는 것은 어떻습니까.
Maximus ツ

먼저 저장소에서 파일을 제거한 git rm <filename>다음 commit.after * .orig 파일을 git ignore에 추가해야합니다.
Amar

4
나는 이것이 답변으로 표시된 것보다 더 나은 해결책이라고 생각합니다.
Orgmir

51
git clean -i정말 좋습니다. 삭제 될 파일 목록을 제공하고 목록을 처리하는 방법에 대한 옵션을 제공합니다 (목록을 필터링하고 목록의 모든 항목을 삭제할 수 있음).
PPPaul

1
패턴과 함께 git clean을 사용하여 * .orig 파일 만 파일을 삭제하는 데 도움을 줄 수 있습니다. git clean -f -e '*.*' -e '!*.orig' 제외 패턴 만 있지만 네거티브 패턴을 약간 지원합니다. 따라서 모든 파일을 제외하고 파일 *.*의 제외를 무효화 할 수 *.orig있습니다.
leorleor


6

.gitignore를 사용하여 파일을 무시할 수 있습니다

여기에 표시된 것처럼 * .orig를 목록에 넣으십시오.

https://help.github.com/articles/ignoring-files

현재 파일을 삭제하려면 다음과 같이 쉘 스크립트를 작성하고 프로젝트 폴더에서 실행할 수 있습니다

for file in `find *.orig -type f -print`
do
   echo "Deleting file $file"
   git rm $file -f       
done

5
그가 확실히 할 수 있지만, 여기서 옳은 것은 아닙니다 :)
Sergio Tulentsev

1
백업을 유지하면서 준비된 파일을 방해하지 않는 것이 좋습니다.
akazemis

@akazemis-당신은 그렇게 생각할 것입니다. 그러나 코드를 잡을 때 원하는 결과보다 두 배 많은 검색 결과가 나타납니다 (최신 코드의 내용에 대한 잘못된 인식을 제공합니다). 오리지널 파일이 없을 위험에 처하게되는 경우는 매우 드 rare니다. 정기적으로 커밋하는 것이 좋습니다.
Sridhar Sarnobat

5

불행히도 전역 gitignore 파일에 추가 git clean했기 때문에 작동하지 않으므로 *.orig깨끗 하지 않습니다 . 심지어 실행은 git clean -x내가 원하지 않기 때문에 좋지 않습니다 모든 내 무시 파일 삭제하기. git clean -i도움이 되긴하지만 실제로 모든 파일을 검토하고 싶지는 않습니다.

그러나 제외 패턴을 사용하고 일치를 무효화 할 수 있습니다. 이 명령으로 미리보기 :

git clean -e '!*.orig' --dry-run

그런 다음 확신이있을 때 force플래그를 전달하여 실제로 삭제하십시오.

git clean -e '!*.orig' -f

leorleor의 의견을 바탕으로


3

git rm Gemfile.lock.orig 나머지 파일은 필요하지 않습니다. git commit --amend

해당 얼룩을 완전히 제거하려면 git gc --prune=0 --aggressive


@linquizebut git rm Gemfile.lock.orig의 커밋은 수정을 사용하여 마지막 커밋에 들어갑니다. 그러한 파일을 커밋하지 않는 다른 방법이 있습니까?
막시무스 ツ

2

나를 위해 git clean -f모든 * .oig 파일을 제거했습니다. 그리고 이전에 이미 존재했던 것들을 유지합니다.

이것은 병합 후 (거의) 모습입니다.

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/
    .idea/misc.xml.orig

.idea/codeStyles/추적되지 않은 파일로 병합하기 전에 이미있었습니다. .idea/misc.xml.orig(그리고 훨씬 더) 제거해야했습니다.

=> 사용 git clean -f:

$ git clean -f
Removing .idea/misc.xml.orig

결과 :

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .idea/codeStyles/

0

당신은 단순히 할 수 있습니다 git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

TL; DR;

git status -s 색인과 관련하여 수정되거나 누락 된 모든 파일을 가져올 수 있습니다

grep "\.orig$" ".orig"로 끝을 유지하면서 파일을 필터링

awk '{print $2}' 파일 이름을 나열합니다 (git 정보 건너 뛰기 (예 : A, M, ??))

xargs -n1 -r echo rm 모든 인수에 대한 제거 명령을 인쇄합니다 (-n1 : 한 번에 하나씩 -r : 비어 있으면 건너 뛰기) 제거 할 파일을 두 번 확인하여 명령을 복사하여 붙여 넣습니다.


이것은 저자의 질문에 대답 할 수 있지만, 설명 할 단어 및 / 또는 문서 링크가 부족합니다. 원시 코드 스 니펫은 주변에 문구가 없으면 크게 도움이되지 않습니다. 좋은 답변을 작성하는 방법이 도움 이 될 수도 있습니다. 답을 수정하십시오.
hellow

-4

git rm <file>

http://git-scm.com/docs/git-rm

또한 무시하려는 파일 / 디렉토리를 .gitignore 파일에 추가하십시오.


git rm <file> <file>그냥 나열하십시오.
veritas1

그런 다음 모든 파일을 나열하거나 find와 같은 도구를 사용하여 파일을 git rm에 전달하거나 쉘 글로브를 사용하여 반복해야합니다. Git은이 표준 Unix 명령 행 기능을 복제하지 않습니다.
mabraham

1
오리지널 파일이 저장소에 추가되지 않으므로 사용할 필요가 없습니다 git rm그냥 사용 rm하는 대신
에드 슨 메디나
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.