2011-01-09 4 views
2

내 설정에는 로컬 변경 사항을 푸시하는 중앙 Hg 레포가 있습니다. 내 로컬 복제본에 일련의 지역 커밋이 있다고 가정하면 변경 사항을 중앙 repo로 푸시하고 싶습니다. 내가 만든 "작은"로컬 커밋을 모두 포함하지 않고 최종 상태 만 밀어 넣을 수 있습니까?Mercurial 커밋 팁만

가끔은 내가 만든 작은 지역의 모든 커밋과 함께 중앙 repo의 역사를 오염시키고 싶지 않기 때문에 나는 이것을 원한다.

+4

Mercurial은 피하려고하는 것을 권장합니다. 도구가 그 일을하게하십시오. – Apalala

답변

6

왜 그렇게하고 싶습니까? 작은 변경 사항을 적용하면 쉽게 되돌릴 수 있습니다. 모든 것을 하나의 커밋으로 수집하면 작은 변화를 되 돌리는 것이 쉽지 않을 수 있습니다.

0

mq 확장자를 사용하여 기록을 다시 쓸 수 있습니다. 접기를 원하는 버전이 5,6,7이고, 7이 팁입니다. 당신은을 통해이 작업을 수행 할 것입니다 :

이제
# Import the revs you want to collapse into mq 
# mq will create patches for each revision from 5:tip, with the name 
# <local rev number>.diff 
hg qimport -r5:tip 
# Goto the first commit 
hg qgoto 5.diff 
# Fold in the other commits successively. Aside from shell magic, there is 
# no command line way to specify multiple patches at once. 
hg qfold 6.diff 
hg qfold 7.diff 
# Commit the new mq patch as a changeset of its own 
hg qfinish 5.diff 

이 저장소는 이전 버전 5, 6 있었는지의 내용으로 만 회전 (5)를 포함하고, 7

2

나는 비요른에 동의 (그리고 난 그의 대답을 upvoting), 당신이하고있는 일은 좋은 생각이 아닙니다. 의미있는 역사는 좋은 것입니다. 만약 당신이 그걸 이야기 할 수 없다면, 당신이하려고하는 것은 단지 마지막 변경 집합을 푸는 것이 아니라 모든 변경 집합을 조합 한 새로운 변경 집합을 푸는 것입니다. 가장 쉬운 방법은 축소 확장 프로그램을 사용하는 것입니다. mq 또는 내보내기/가져 오기로도 가능합니다. 여기서 핵심은 여러 변경 집합을 하나의 집합으로 축소하여 기록을 다시 작성하는 것이며 기존의 변경 집합을 제거하고이를 새로운 조합 된 변경 집합으로 대체한다는 것입니다. 그렇게하면 Mercurial이 가치있는 신뢰를하게하는 역사의 불변성을 위반하게됩니다.

1

확장명을 지정하지 않고이를 수행하는 방법은 mercurial wiki 페이지 ConcatenatingChangesets에서 설명합니다.

해당 페이지는 또한 CollapseExtension과 같은 확장자가 hg 인 몇 가지 대체 방법에 연결됩니다.

관련 문제