2011-02-10 3 views
132

나는 수은을 사용하도록 빌드 프로세스를 이동하고 작업 디렉토리를 팁 수정본의 상태로 되 돌리고 싶습니다. 빌드 프로세스를 이전에 실행하면 일부 파일이 수정되고 커밋하고 싶지 않은 파일이 추가되어 로컬 변경 사항과 저장소에 추가되지 않은 파일이 생깁니다.Mercurial - 버전없는 파일을 포함하여 모든 로컬 변경 내용을 취소하는 방법?

모든 것을 삭제하고 최신 개정판이있는 깨끗한 작업 디렉토리를 얻는 가장 쉬운 방법은 무엇입니까?

hg revert --all 
<build command here to delete the contents of the working directory, except the .hg folder.> 
hg pull 
hg update -r MY_BRANCH 

을하지만, 간단한 방법이 있어야처럼 보인다 :

은 현재 내가이 일을하고 있습니다.

나는 repo 삭제, 새로운 복제 작업 및 업데이트와 동일한 작업을 수행하려고합니다. 그러나 repo는 너무 빠르지 만 충분히 빠릅니다.

+1

"revert --all"명령이나 수행하는 단계에 "(내용을 삭제하십시오 ...)"주석이 있습니까? "hg update"는 변경된 파일 만 업데이트하기 때문에 나는 묻습니다. 업데이트하기 전에 다른 파일을 제거하면 널 개정 ('hg update 00')으로 다시 업데이트 한 다음 팁까지 백업하지 않으면 그 파일을 다시 얻을 수 없습니다. 왜''hg revert --all''을 풀어서 업데이트하기 전에 일관된 작업 폴더 상태로 돌아갈 수 없는가? –

+0

그것은 내 빌드 소프트웨어로 수행 된 별도의 단계입니다. (나는 방금 명령 행 삭제를 사용할 수 있었지만하지 않았다.) – Rory

+1

'archive' 명령은 앞으로 유용 할 수 있습니다. 예를 들어,'hg archive ../ newbuild' 할 수 있으며, 마지막'hg update'에서 저장소의 스냅 샷이 배치 될 것입니다. 나는 일반적으로 야간 빌드를 위해 그렇게하므로 내 레포를 어수선하게 만들 위험이 없습니다. 더 이상 필요없는 빌드 디렉토리를 삭제하십시오. –

답변

172

그 단계 까지 단축 할 수 있어야한다 :

hg pull 
hg update -r MY_BRANCH -C 

-C 플래그를 업데이트하기 전에 모든 로컬 변경 사항을 취소 업데이트 명령을 알려줍니다.

그러나 이렇게해도 트래킹되지 않은 파일이 저장소에 남아있을 수 있습니다. 당신이 모든 것을 할 것입니다 수행 할 의욕을 요청할 수있는 하나 하나 개의 명령이없는, 어떤 경우

hg pull 
hg update -r MY_BRANCH -C 
hg purge 

: 당신은뿐만 아니라 그 없애 할 것 같은데, 그래서 나는 그의 purge 확장을 사용 당신은 당신이 할 수 없다고 말하는 "전체 복제"방법으로 프로세스를 변경하는 경우를 제외하고는 여기에서 원합니다.

+5

고마워, 내가 필요로했던 것은 '퍼지'였다. 업데이트 -C는 untracked 파일을 제거하지 않습니다. 이것은 내가 고민하고있는 주요한 것입니다. – Rory

+12

+1 "hg purge --all" –

+4

TortoiseHg를 사용하여 제거 할 수도 있습니다. 워크 벤치의 설정에서 확장 기능을 켜기 만하면됩니다 (또는 mercurial.ini 편집). – Dave

90
hg up -C 

이렇게하면 현재 분기의 모든 변경 사항이 제거되고 최신 헤드로 업데이트됩니다.

그리고 버전없는 파일을 모두 제거하려면 purge extension을 사용할 수 있습니다.

+0

추적되지 않은 파일이 포함되어 있습니까? 노력하고있는 다른 명령에 문제가있었습니다. 나는 그것을 시도해 볼 것입니다 ... – Rory

+6

@Rory : nope,'hg purge'는 버전없는 파일들을위한 것입니다. – zerkms

9

갱신 -r --rev REV 개정

업데이트 -C를 사용하는

hg pull 
hg update -r MY_BRANCH -C 
hg status -un|xargs rm 

을 사용할 수 있습니다 퍼지 확장없이 * nix에서 스크립트에 추적되지 삭제하려면 - 커밋되지 않은 변경 내용을 지우지 않음 (백업 없음)

상태 -u --unknown 알 수 없음 (추적되지 않음) 파일 만 표시

상태 -n --no-상태

3

당신이 쉽게을의 방법을 찾고 있다면, 그때 당신이 시도 할 수 있습니다 숨기기 상태 접두사.

나 자신은 거의 내 모든 도구에 대한 commandlines을 기억하지 수에 대한, 그래서 UI를 사용하여 수행하는 경향이


1. 먼저,

Commit

"커밋"을 선택

2. 무시한 파일을 표시합니다. 커밋되지 않은 변경 사항이 있으면 숨 깁니다. 이제

3.

Show ignored files, 그들 모두를 선택하고 "버전없는 삭제"를 클릭합니다.

Delete them

는 완료. 그것은 명령 행의 것들보다 기억하기 쉬운 절차입니다.

+0

나는 (내가 SourceTree를 사용하고있다.)이 스크린 샷은 TortoiseHg Workbench에서 나온 것으로 보인다. 일반적으로 UI 기반 솔루션이 유용하다고 생각하지만이 대답은 더 나은 라벨링이 필요합니다. 또한 "숨기기"는 다소 모호하게 들립니다. –

2

hg 상태은 모든 새 파일을 표시하고 rm 수 있습니다.

는 일반적으로 난 그렇게 무시하고 버전없는 파일을 제거하려면 : 다음

hg status -iu       # to show 
hg status -iun0 | xargs -r0 rm   # to destroy 

그리고 따라 그와 : 수정에 적합한 상태에있는 모든 버전 파일을 저장

hg update -C -r xxxxx 

xxxx


스택 오버플로 전통을 따라하면 개미가 이것을하기 위해, 나는 종종이 "핵 옵션"이 내가 걱정하는 것을 파괴했다는 것을 알게된다.

올바른 방법은 빌드 프로세스에서 'make clean'옵션을 사용하고 'make reallyclean'과 'make distclean'옵션을 사용하는 것입니다.

관련 문제