2011-03-24 5 views
5

hg mq 플러그인의 목적은 사용자의 불필요한 ADHD로 인한 코드 변경을 혼란스럽게하지 않고 저장소에 완벽한 커밋을 할 수있게하는 것입니다. 예를 들어패치 큐에서 hg mq의 단일 패치 내에 변경 사항이 너무 많으면 어떻게해야합니까?

.... 내가 버그 y를 통지하고 대신에 작업을 시작할 때 버그 X 일하고 있어요

. 이 시점에서 저장소에 커밋 된 hg qfinish 일 때 변경 사항을 혼동하지 않도록 패치 큐에 새 패치를 작성해야합니다.

이제 새 패치를 만드는 것을 잊어 버린 채로 hg qrefresh이라는 프로세스가 있다고 가정 해보십시오. 그런 다음 나중에 실수를 깨닫고 하나의 패치에서 변경 사항을 두 개의 패치로 분리하려고합니다.

변경 사항을 별도의 패치로 나뉘고 나중에 커밋하도록 큐에서 패치 파일 (및 새 패치 파일)을 편집하는 것과 관련이 있다는 것을 알고 있습니다. 그러나 나는 아직 diff 패치 파일을 편집하는 데 숙달되지 않았습니다.

어디서 알 수 있습니까? 그리고 이것에 대해 어떻게 하나 가겠습니까?

답변

0

나는 이러한 상황에서만 사용하는 쉘 별칭 viq="vim $(hg root)/.hg/patches/"을 가지고 있습니다!

패치를 실행 한 다음 diff를 직접 편집하고 hunks를 적절하게 다른 패치로 이동합니다.

대화 형 방법보다 대화 형 방법 (예 : git add -i)을 선호합니다. 대화 형 프롬프트에서 내 편집기에서 작업하는 것처럼 안전하지 않기 때문에 (필자는 편집자가 백업을 만들고 사소한 실행 취소 등을합니다 ...)).

+0

필자의 글은 분명하지 않지만, 패치 파일의 위치를 ​​알고 있습니다. 패치 파일을 편집하는 것과 관련해서는별로 좋지 않습니다. – leeand00

+0

아, 죄송합니다 - 나는 그들이 당신이 어디에 있는지 알지 못했다는 뜻은 아닙니다. 나는 내가 알고있는 모든 선택 사항을 감안할 때 이것이 내가하는 것을 선호하는 것이라고 말하고있다. –

+0

또한, [덩어리 레벨] (http://en.wikipedia.org/wiki/Diff#Unified_format)에서 편집하는 한, 정말 쉽습니다. 원한다면 너무 오래 갈 수도 있습니다. 올바른 헤더 (즉,'--- a/foo \ n +++ b/foo')가 이동 된 덩어리 어딘가에 있기 때문입니다. –

3

다른 옵션 (사용자의 플랫폼에서 실행된다고 가정)은 TortoiseHG 버전 2.0입니다. '부적절한'Shelve 유틸리티는 패치 사이 또는 작업 디렉토리로 청크 및 파일을 이동할 수있게합니다. Windows, Linux 및 OSX에서 사용할 수 있습니다.

http://tortoisehg.bitbucket.io/

2

당신은 다음 줄 .hgrc을 추가하는 record extension 활성화 할 수 있습니다 : 당신은

hg qrefresh nothing 

와 현재의 패치를 지울 수 있습니다

[extensions] 
hgext.record = 

을 (주 그 "nothing "는 임의의 문자열입니다. qrefresh에 대한 인수는 현재 파일에 포함되어야하는 파일 목록입니다 패치, 그래서 수정 된 파일의 이름이 아닌 것은 무엇이든 할 것입니다 - 저는 보통 "0"을 사용합니다)

이제 hg qrecord <patchName>을 사용하면 새 패치에서 변경해야하는 내용을 대화식으로 선택할 수 있습니다. 나머지 변경 사항은 qnew 또는 또 다른 qrecord으로 다른 패치에 추가 할 수 있습니다. 마지막으로 qpop, qfold을 사용하거나 .hg/patches/series을 편집하여 패치를 병합하고 순서를 변경할 수 있습니다.

+0

그건 꽤 흥미로운 소리 ... 나는 그것을 봐야 할 것입니다. * cheers! * – leeand00

+1

또한'hg qcrefresh' (crecord extention의 일부분)는 자동 패치가 너무 거칠 경우 개별 라인으로 선택할 수 있습니다. –