Mercurial의 작업 디렉토리에서 추적되지 않은 모든 파일을 어떻게 삭제합니까?


207

작업 디렉토리에서 추적되지 않은 모든 파일을 삭제할 수 있습니까? 작업 디렉토리에 많은 파일을 추가하고 'hg add'를 통해 파일을 추가하지 않고 새 파일을 완전히 제거하고 싶다고 가정 해 봅시다.

PowerShell을 사용하고 있지만 Windows를 사용하므로 여기에서 통합 솔루션도 가능합니다.

답변:


286

purge 라는 Mercurial Extension을 추가하십시오 . Mercurial에서 배포합니다.

이 확장 기능은 "purge"명령을 "hg"에 추가하여 Mercurial에 알려지지 않은 파일을 제거합니다. 즉, 추적되지 않은 파일. 그래서 당신의 명령은

hg purge

추가하지 않은 파일을 실수로 제거하지 않도록 기본적으로 활성화되어 있지 않습니다.

이 확장을 설치하려면 수은 설정 파일 (Unix의 경우 .hgrc, Windows의 경우 Mercurial.ini)에 추가하십시오.

[extensions]
purge = 

이 확장을 일시적으로 활성화하려면

hg purge --config extensions.purge= 

26
hg purge --all추적되지 않은 파일과 무시 된 파일을 모두 삭제합니다. 이는 소스 빌드를 정리하는 데 유용합니다
tacaswell

22
ext를 일시적으로 활성화하려면hg purge --config extensions.purge=
Pykler

121

퍼지가없는 올바른 방법은 다음과 같습니다.

hg st -un0 | xargs -0 rm

1
@ simplyharsh이 방법이 더 낫거나 확장 기능을 추가하는 것보다 효과가 적습니까?
Yaakov Kuperman

3
@YaakovKuperman 확장을 추가하는 것이이 명령보다 적은 작업이라고 생각합니다 (한 번만 가능). 2 주일에 한 번도 제거해야하므로 제거 확장을 사용하지 않습니다. 또한 바보라고 부르지만이 명령을 입력하면 '퍼지'와 같은 파괴적인 것을하기 전에 다시 생각할 시간이 충분합니다.
simplyharsh

2
@simplyharsh는 의미가 있지만 모두 똑같이 제거 해야하는 두 가지 이유가 있습니다. 먼저 hg purge --print를 수행하고 제거를 수행하기 전에 제거 할 대상 목록을 확인할 수 있습니다. 둘째, 이렇게하면 리포지토리의 루트에 있어야 작동합니다.
Yaakov Kuperman

1
@ javawizard : 이것은 hg가 어떻게 작동하는지 다시 생각하게 한 좋은 것입니다. rm -rf *그러나을 포함한 도트 파일 및 도트 디렉토리를 건너 뛰기 때문에 작동합니다 .hg/. 같은 토큰으로, 다른 모든 도트 파일 (예 : .evil-settings)도 살아남고 퍼지가 더 좋습니다.
dirkjot

2
'hg st -u'와 'hg purge'가 찾은 것 사이에는 동작에 차이가 있습니다. 'hg st -u'는 추적되지 않은 빈 디렉토리를 찾지 못하고 'hg purge'는 디렉토리를 찾고 제거합니다. 그것은 당신에게 중요하거나 중요하지 않을 수 있습니다.
Michael Kent

19

감사! 이것은 Powershell에서도 나를 위해 일했습니다.

hg st -un | rm

2
xargs는 powershell에서 작동하지 않습니다-이것은 "창 친화적"이라는 상자에서 나오는 유일한 해답입니다
Nikos Athanasiou

합의 ... PowerShell에서 작동하지 xargs를에 두 번째 ... 정화는 여전히 실행 가능한 옵션입니다하지만
beauXjames

나를 위해 일했다 :)
Naveen Kumar V

4
rm $(hg st -u)

...- u는 "추적되지 않은"을 나타내며 다른 상태를 선택할 수도 있습니다.


4

당신이 사용할 수있는

hg purge --all

무시되고 추적되지 않은 파일을 모두 제거

(먼저 답변에 설명 된대로 퍼지 확장을 설치해야합니다)



2

트릭을 수행해야합니다.

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf

2

퍼지를 사용하지 않으려는 경우 :

rm $(hg st | grep ^? | awk '{print $2}')

0

* nix 시스템을 사용한다고 가정하면 다음과 같이 실행할 수 있습니다.

rm `hg st | awk '/\?/ {print $2}'`

수은 저장소의 루트에서

나는 그것을 달성하기위한 표준 수은 명령을 모른다. 그러나 이것을 수행하는 더 많은 명령 행 옵션이 있다고 생각한다. "더 나은"솔루션이 있다고 확신하며 다른 제안을 듣고 싶습니다.

이 명령은 철저히 테스트되지 않았으므로주의해서 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.