2010-06-18 3 views
16

나는 롤백의 제한과 care required in its use을 이해하지만, 롤백의 하나 수준이 왜 난 그냥 궁금.왜 Mercurial은 한 수준의 롤백 만 있습니까?

는 디자인 결정 같아요 내 및 롤백의 여러 수준을 처리하기 위해 여러 이전 트랜잭션 상태를 저장하는 번거 로움은 그 가치보다 더 많은 문제가 있음.

+0

, 당신의 생각은 꽤 잘 정확합니다. 수은 방식은 '모든 것이 변경되지 않습니다.'.. 그래서 8 가지 버전을 커밋 한 것을 롤백해야하는 경우 'hg'방식은 새로운 변경 사항을 도입하는 것입니다. –

답변

13

롤백은 실제로 기능으로 의도 된 것이 아니기 때문에 롤백 수준은 하나뿐입니다. 롤백은 존재하지만, 그것은 수은의 커밋/푸시/풀 트랜잭션 시스템에서 성장했기 때문에 이상한 이름입니다.

네트워크 푸시가 오는 경우 그것은 99 % 완료 한 후 저장소를 분실 연결이 일치하지 않는 상태로 남아해서는 안 가져옵니다. 불완전한 변경이 폐기 될 수 있는지 확인하기 위해 쓰기가 완료되기 전에 "아무 일도 일어나지 않습니다"포인터가 생성되고 변경이 중단되면 모든 항목이 해당 상태로 다시 설정됩니다.

rollback 명령은 정말 그냥 "실패"입니다은 이전 작업이 성공적으로 완료 한 후.

controlling hook과 같은 것을 사용할 때 푸시 또는 커밋을 성공적으로 완료하기 위해 전달해야하는 검사/테스트를 정의 할 수 있습니다. 성공적으로 완료하지 못하게하려면 진행중인 커밋을 실행 취소 할 수 있어야하지만 여러 수준이 필요하지는 않습니다.

VonC는 롤백이 매우 위험 할 수 있음을 잘 알고 있습니다. 많은 사람들이 이미 밀어 넣은 변경 사항을 롤백 한 다음 다른 변경 사항이 다시 가져올 때 매우 혼란스러워집니다. hg backout 명령은 거의 항상 좋은 아이디어입니다. 이 작업을 수행하여 쉽게 원하는 시점으로 롤백을 시뮬레이션 할 수도

참고 : 나의 이해에서

hg clone -r last_revision_I_want repo_with_things_I_do_not_want new_repo_with_only_good_stuff 
5

트릭은 다음과 같습니다. hg rollback 일부 커밋 만 재설정하는 것이 아니라 저장소와 관련된 모든 데이터와 메타 데이터를 재설정합니다.
실제로는 no equivalent in Git이며 매우 위험한 메커니즘입니다.
기록을 다시 설정하여 기록을 다시 쓰는 방법으로 잘못 사용 된 것일 수도 있고, 그 이유는 can "reset" more than you wanted입니다.
하나 이상의 레벨에서 이것을 허용하는 것은 너무 위험합니다.

resetting/rewriting changeset (의도적으로 변경 불가능 함)에만 해당되는 경우 extensions like MQ이 더 적합합니다.

+0

동의합니다 - 확실히 피할 수있는 뭔가 - 저는 MQ를 사용하므로 결코 사용하도록 부탁받은 적이 없습니다. 이상한 한계가있는 것 같습니다. 롤백을 한 단계 이상 허용하지 않는 이유가 있습니다. –

관련 문제