모두 버리고 최신 개정판을 깨끗하게 받으시겠습니까?


159

수은을 사용하도록 빌드 프로세스를 이동하고 작업 디렉토리를 팁 개정 상태로 되돌리려 고합니다. 빌드 프로세스의 이전 실행은 일부 파일을 수정하고 커밋하지 않으려는 일부 파일을 추가 했으므로 리포지토리에 추가되지 않은 로컬 변경 및 파일이 있습니다.

모든 것을 버리고 최신 개정판을 사용하는 깔끔한 작업 디렉토리를 얻는 가장 쉬운 방법은 무엇입니까?

현재 나는 이것을하고있다 :

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

그러나 더 간단한 방법이 있어야합니다.

리포지토리 삭제, 새로운 복제 및 업데이트와 동일한 작업을 수행하고 싶습니다. 그러나 레포는 너무 빠르기 때문에 너무 빠릅니다.


1
"(컨텐츠 삭제 ...)"가 "revert --all"명령에 대한 주석입니까, 아니면 수행 한 단계입니까? "hg update"는 변경된 파일 만 업데이트하기 때문에 묻습니다. 업데이트하기 전에 다른 파일을 제거하면 null 개정 ( hg update 00)으로 다시 업데이트 한 다음 팁으로 백업하지 않으면 해당 파일을 다시 가져올 수 없습니다 . hg revert --all가져 오기 및 업데이트하기 전에 일관된 작업 폴더 상태로 돌아갈 수 없는 이유는 무엇 입니까?
Lasse V. Karlsen

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

1
당신은 찾을 수있는 archive명령이 미래에 도움이 될 수 있습니다. 예를 들어, 할 수 hg archive ../newbuild있고 마지막에 저장소의 스냅 샷 hg update이 배치됩니다. 나는 일반적으로 야간 빌드를 위해 그렇게하므로 레포를 어지럽 힐 위험이 없습니다. 더 이상 필요없는 빌드 디렉토리를 삭제하십시오.
Tim Post

답변:


212

이러한 단계 다음 과 같이 단축 될 수 있어야합니다.

hg pull
hg update -r MY_BRANCH -C

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

그러나 그래도 저장소에 추적되지 않은 파일이 남아있을 수 있습니다. 그것들을 제거하고 싶은 것처럼 들리므로 purge확장을 사용합니다.

hg pull
hg update -r MY_BRANCH -C
hg purge

어쨌든 Mercurial이 수행 할 수없는 "전체 복제"방법으로 프로세스를 변경하는 경우를 제외하고는 원하는 모든 작업을 수행하도록 Mercurial에 요청할 수있는 명령이 하나도 없습니다.


6
고마워, 내가 필요한 '퍼지'였습니다. 업데이트 -C는 추적하지 않은 파일을 제거하지 않습니다.
Rory

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

18
퍼지 확장이 활성화되지 않은 경우 다음과 같은 명령을 사용할 수도 있습니다. hg --config "extensions.purge=" purge --all
Samuel Delisle

5
@ csharptest.net hg purge --all은 저의 로컬 설정을 지 웠기 때문에 좋은 두통을주었습니다. 예 : 데이터베이스 사용자 / 암호 등 :)
VMC

@SamuelDelisle 감사합니다. 스크립트 에서이 일회성 명령에 대해서만 구성 변경을하고 싶지 않았습니다!
joonas.fi

113
hg up -C

모든 변경 사항이 제거되고 현재 지점의 최신 헤드로 업데이트됩니다.

제거되지 않은 파일도 모두 제거 할 수 있도록 제거 확장 기능 을 켤 수 있습니다.


추적되지 않은 파일이 포함되어 있습니까? 내가 시도한 다른 명령의 문제와 관련하여 문제가있었습니다. 지금 시도해 보도록하겠습니다.
Rory

7
@Rory : nope, hg purge버전없는 파일입니다.
zerkms

10

제거 확장 프로그램없이 * nix에서 추적되지 않은 항목을 삭제하려면

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

어느 것을 사용하고 있습니까

업데이트 -r --rev REV 개정

업데이트 -C-커밋되지 않은 변경 사항을 삭제합니다 (백업 없음).

status -u --unknown 알 수없는 (추적되지 않은) 파일 만 표시

status -n --no-status hide 상태 접두사


4

쉬운 방법을 찾고 있다면 이것을 시도해 볼 수 있습니다.

나는 모든 도구에 대한 명령 줄을 거의 기억할 수 없으므로 UI를 사용하여 수행하는 경향이 있습니다.


1. 먼저 "커밋"을 선택하십시오

범하다

2. 그런 다음 무시 된 파일을 표시하십시오. 커밋되지 않은 변경 사항이 있으면 숨 깁니다.

무시 된 파일 표시

3. 이제 모두 선택하고 "버전없는 버전 삭제"를 클릭하십시오.

그들을 삭제

끝난. 명령 줄보다 기억하기 훨씬 쉬운 절차입니다.


잘 모르겠습니다 (SourceTree를 직접 사용함).이 스크린 샷은 TortoiseHg Workbench의 것으로 보입니다. 일반적으로 UI 기반 솔루션이 도움이된다고 생각하지만이 답변에는 더 나은 라벨링이 필요합니다. 또한 "숨기기"는 약간 모호합니다.
Jon Coombs

3

HG 상태 는 모든 새로운 파일을 보여줍니다, 그리고 당신은 그냥 rm 수 있습니다 그것들을 있습니다.

일반적으로 무시되고 버전이없는 파일을 제거하고 싶습니다.

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

그런 다음 다음을 수행하십시오.

hg update -C -r xxxxx

모든 버전의 파일을 개정 xxxx의 올바른 상태로 만듭니다.


이것을 원하지 않는다는 스택 오버플로 전통을 따르기 위해,이 "핵 옵션"이 내가 관심있는 것을 파괴 한 경우가 종종 있습니다.

이를 수행하는 올바른 방법은 빌드 프로세스에 'make clean'옵션을 사용하는 것입니다.

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