ProgramingTip

Mercurial 작업 트리에서 모든 .orig 파일을 자동으로 제거하는 방법은 무엇입니까?

bestdevel 2021. 1. 10. 22:57
반응형

Mercurial 작업 트리에서 모든 .orig 파일을 자동으로 제거하는 방법은 무엇입니까?


병합하는 동안 수은 해결되지 않은 파일에 대해 .orig 파일을 남깁니다. 그러나 수동으로 문제를 해결하고 파일을 수정 한 후에는 .orig 파일이 삭제되지 않았습니다. 일부 명령으로 자동으로 제거 할 수 있습니까?

Mac에서 작업 할 때 다음과 같은 것을 사용할 수 있습니다.

find . -iname '*.orig' -exec rm '{}' ';'

같은 것을 사용하거나 다른 것을 사용하지만 차라리 hg 정리와 같은 것을 사용하고 싶습니다 ...

최신 정보 :

얼마 후 Purge 확장 은 Mercurial과 함께 많은 비용을 제공합니다.


개인적으로 나는

$ rm **/*.orig

.orig파일 이 지겹다면 . 이 실행 한 후 Zsh 및 Bash 4에서 작동합니다 shopt -s globstar.

그러나 다른 셸을 사용하거나 기본 제공 솔루션을 원할 경우 제거 확장 (링크 업데이트 2016-08-25) 이 마음에들 것 입니다. 이를 통해 추적되지 않은 모든 파일을 제거 할 수 있습니다.

$ hg purge

다음을 사용하여 추적하지 않고 무시한 모든 파일을 제거 할 수 있습니다.

$ hg purge --all

사용의 장점은 hg purge파일을 후 비어있는 디렉토리도 정리한다는 것입니다. rm명령 줄은 디렉토리를 떠날 것이다.


btw. find유틸리티에는 작업이 -delete있으므로 다음 만 입력 할 수 있습니다.

find <path-to-files> -name '*.orig' -delete


.orig 파일을 삭제하고 싶고 Windows 컴퓨터를 사용하는 경우 다음이 잘 작동하는 것입니다.

D:\workspace>hg purge -I **/*.orig --all

이것은 어 .orig 끝나는 추적되지로 않은 모든 파일을 삭제하지만 다른 답변과 마찬가지로 추적 되지 않은 다른 파일 은 삭제하지 않습니다 .

--print플래그 넣어 실행하기 전에 테스트 할 수 있습니다 .


다음은 전체 작업 복사본 계층 구조에서 .orig 파일을 제거하고 공백이 포함 된 경로 작동합니다.

find . -name *.orig | while read -d $'\n' file; do rm -v "$file"; done;

.bash_profile을 사용합니다.

alias clearorig='echo "Removing .orig files..."; find . -name *.orig | \
while read -d $'\''\n'\'' file; do rm -v "$file"; done;'

업데이트 후크 를 사용합니다.

업데이트 : 작업 디렉토리 의 업데이트 또는 병합 이 완료된 후에 실행됩니다.


이 답변을 전에 게시했습니다 . 그러나 이것은 대답에 대한 올바른 장소입니다.

이 배치 파일을 직접 만들었습니다.

IF "%1%" == "d" (
    del /s *.orig
    del /s *.rej
 ) ELSE ( 
    del /s /p *.rej
    del /s /p *.orig
 )

도움말 :이 콘텐츠를 orig.bat 로 저장

  1. orig d없이 한 번 확인에 모든 거부 및 원본 파일 삭제 실행
  2. orig파일을 통해 확인 삭제 실행 [안전 메커니즘]

이것이 도움이되기를 바랍니다.


개인적으로 저장소 루트에서 다음을 사용합니다.

hg purge -p -I **/*.orig | xargs rm -f

포함하려는 특정 파일 형식을 필터링 할 수 있으므로 'hg purge'또는 'hg purge --all'만 사용하는 것보다 약간 낫습니다.

설명 :

  • -p 인수는 제거 할 파일 목록을 인쇄합니다.
  • -I 인수 화이트리스트는 포함 할 파일을 필터링합니다.
  • 결과 목록은 xargs로 파이프되고 rm -f 명령을 사용하여 실행됩니다.

Powershell에서 작업 중이며 여기에 답변이 표시되지 않습니다.

# NOTE: be in the root of your repository
# fetch all .orig files recursively
$orig = (dir *.orig -recurse) ;

# remove each .orig file
foreach ($item in $orig) { del $($item.FullName) ; }

# afterwards I make sure to remove the references to the .orig files in the repo
# then commit & push
hg addremove ; 
hg commit -m "remove .orig" ;
hg push ;

이 방법은 자동으로 제거 방법은 수동으로 실행 간단합니다.

hg st표시 할 수 있습니다 알 수없는 또는 하지 추적 파일을. 이 출력을 시스템 rm명령에 대한 인수로 사용할 수 있습니다 . 방금 수행 한 실제 예는 다음과 가변적입니다.

$ # SHOW ONLY THE CRUFT
$ hg status --unknown
? config/settings.rb.orig
? lib/helpers.rb.orig
? routes/main.rb.orig

$ # THE CRUFT WITHOUT THE "?" PREFIX
$ hg status --unknown --no-status
config/settings.rb.orig
lib/helpers.rb.orig
routes/main.rb.orig

$ # SAFELY REMOVE ALL CRUFT
$ rm -- `hg st -un`

비어있는 디렉토리가 남아있는 경우 -r-d플래그 rm가 도움 될 수 있습니다.

A와 보너스 , hg status --ignored(예를 들어, 빔) 편집기에서 정리에 모든 무시 임시 파일뿐만 아니라 스왑 파일을 사용할 수있다.


정리를 위해 Linux에서 사용하는 명령은 find로 새로운 검색을 수행 할 필요가 없습니다.

Mercurial 프로젝트의 루트 디렉토리에서 실행해야합니다.

hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f

또는 모든 알 수없는 파일을 지우려면.

hg status | cut -d ' ' -f 2- | xargs rm -f


선택한 답변이 마음에 들지 않습니다. 프로젝트의 모든 수준에서 모든 것을 제거하지는 않습니다. 나는 이것을 사용한다 :

for f in `find . | grep .orig$`; do rm "$f"; done

Mac과 * nix 모두에서 작동

참조 URL : https://stackoverflow.com/questions/1067680/how-to-automatically-remove-all-orig-files-in-mercurial-working-tree

반응형