2010-07-15 2 views
1

하나의 changeset에는 있지만 그 부모에는없는 버그가 있습니다. 문제가 시작되는 곳을보기 위해 조금씩 "업데이트"할 수있는 몇 가지 기능이 있습니까?Hg : 라인별로 업데이트 하시겠습니까?

예를 들어 diff가 함수 A, B 및 C의 변경 사항 인 경우 문제를 진단하기 위해 변경 사항을 적용한 후에 테스트 스위트를 실행합니다.

+0

양분이이 변경 집합 수준 만의로 아래로 아래로 총에 맞았이야,하지만 난 많은 작은 커밋이 적은 선호하는 점을 지적거야 정확히 때문에 양분 같은 것들 (그리고 일반적으로 병합)은 더 큰 변경 집합으로 인해 더 어려워집니다. –

답변

0

hg diff -r firstrev -r secondrev을 사용하고 해당 기능과 관련된 비트로만 출력을 필터링 한 다음 패치를 차례로 단계별로 실행할 수 있습니다.

또는이 목적으로 설계된 bisect 확장을 사용할 수 있습니다. 특정 기능과 관련된 변경 사항이 아니라 코드베이스의 모든 변경 사항을 제공합니다. 함수를 변경하는 rev 만 추출한 다음 해당 개정에 대해서만 bisection 검색을 수행하면이를 개선 할 수 있습니다.

+0

저는 bisect가 라인 단위가 아닌 changset 레벨에서 작동한다고 생각했습니다. –

+0

bisect는 변경 세트 레벨에서만 작동합니다. – heckj

+0

예, bisect가 변경에 따라 변경된다는 것을 알고 있습니다. 알아. – Borealid

1

대답은 : 그것은 당신이 넣어 기꺼이 얼마나 많은 육체 노동 따라

당신 할이 소매를 걷어 및 대화식 모드에서 다락방 확장자를 사용합니다.. TortoiseHg를 사용하고 있다면 이미 가지고 있고 그냥 hgtk shelve을 실행하면 한 번에 하나의 diff 행크를 중심으로 변경 사항을 이동할 수 있습니다. (덩어리가 일련의 연속적인 diff 파일이 됨)

단일 diff를 제공하는 다른 diff 패치 도구가 많이 있습니다. 자세한 내용이 필요한 경우 알려주십시오.

즐겁게, bisect과 같은 자동화 된 솔루션을 사용할 수 없다는 점에 대해 이야기 해 봅니다. 변경 세트의 절반 만 컴파일해야하는 것은 아니기 때문입니다. 더 나쁜 것은, 만약 그들이 컴파일,하지만 논리 오류가 있습니까? 여기에 큰 커밋, 간단한 최악의 시나리오 ...

void main(){ 
    Foo *x = malloc(128); 
    frobFoo(&x); 
- free(x); //line 4 removed in changeset 
} 

void frobFoo(Foo ** x){ 
+ free(*x); //line 8 added in changeset 
} 
관련 문제