2012-11-29 2 views
11

나는 Mercurial에 익숙하지 않고 여전히 평가 과정에서 어떻게 든 나왔다. 그래서이 네 가지 개념은 나를 혼란스럽게 만든다. 일부는 Git의 Staging/Index 개념과 동일한 것으로 언급되거나 Git의 Staging보다 우수한 것으로 언급됩니다. 어떻게 hg graft, hg record, hg qrecordhg shelve 네 개의 명령 (이 Graft vs. Transplant에서 설명하고 hg transplant하지만 이미) 서로 비교하고, 어떻게 의 개념과 dirstate? 어떤 유스 케이스가 다른 유스 케이스보다 선택되어 있습니까? 나는 각자를위한 도움 페이지가다는 것을 알고있다, 그러나 VCS가 저를위한 새로운 화제이기 때문에 아직도 각자가하는 무슨을 알아 내게 곤란하다.Mercurial : 이식 대 레코드 vs. qrecord vs. shelve vs. 이식 대 대열 대기열

+0

이식이 개념이 아니다 및 준비/인덱스에 상관하지 않고, 기록은 오히려 지금까지 개념에서 –

+1

(개념 * 기록 뒤에 아이디어 *입니다) 그리고 당신은 ** 보류 **에 "혼란 목록"도 –

+0

감사를 추가 할 수 있습니다 , 나는 "명령들"과 "개념들"을 구별하기 위해 질문을 갱신하고, 목록에 두 가지를 추가했다. – Iodnas

답변

17

Mercurial의 디자인에는 단순히 준비 영역 개념이 포함되어 있지 않습니다. 즉, 로컬 수정과 커밋 간에는 중간 상태가 없습니다.

hg graftgit cherry-pick하는 것과 동일합니다 : 여기

은 당신이 언급 한 각 개념의 개요입니다. 한 지점에서 다른 지점으로 커밋을 복사합니다. 이 기능의 일반적인 사용 사례는 하나의 릴리스 지점에서 다른 릴리스 지점으로 버그 수정을 복사하는 것입니다. 이 명령은 이전의 (현재는 사용되지 않는) hg transplant 확장자를 대체합니다.

hg recordhg qrecordgit add --patch과 유사합니다. 대화 상자를 사용하여 커밋을위한 대화 상자를 선택할 수 있습니다. 따라서 한 파일의 여러 영역을 수정 한 경우 실제로 커밋 할 영역 (즉, hunks)을 선택하고 로컬 수정으로 남겨두고 자하는 영역을 선택할 수 있습니다.

qrecordmq을 사용하는 경우에만 사용할 수 있습니다. 표준 커밋이 아닌 mq 패치로 커밋됩니다.

hg shelvegit stash과 유사합니다. 그것은 당신이 일시적으로 파일 (또는 파일의 덩어리)에 로컬 수정을 따로 설정할 수 있습니다. 이러한 수정 작업은 준비가되었을 때 unshelved이 될 수 있습니다.

dirstate은 Mercurial 소스 코드의 내부 클래스입니다. 사용자에게 노출되지 않습니다.

Mercurial Queues (mq으로도 알려져 있음)은 아마도 Mercurial에서 준비 영역에 가장 근접 할 것입니다. Mercurial 위키의 설명은 다음과 같습니다.

변경 사항은 Mercurial에 적용되는 패치로 유지됩니다. 커밋을 제거하거나 재정렬 할 수 있으며 기본 패치는 작업 디렉토리의 변경 내용을 기반으로 새로 고칩니다 ( ). 패치 디렉토리는 리비전 제어하에 배치 될 수 있으므로 패치에 대한 변경 내역은 개별 기록으로 남겨 둘 수 있습니다.

mq은 로컬에서 테스트 중이지만 공개 위치로 푸시되지 않은 커밋을 연마/재 작업하는 데 자주 사용됩니다. 어떤 사람들은 또한 제 3 자 코드에 대한 일련의 수정을 유지하기 위해 그것을 사용합니다.

+1

이것은 이미 매우 도움이되었습니다. 목록에'qrecord'와'shelve'를 추가했습니다 ... – Iodnas

+0

'shelve'는 향상된'record' 명령입니다. – Iodnas

+0

@lodnas :'transplant','shelve' 및'qrecord'를 포함하도록 답변을 업데이트했습니다. –