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


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.