2013-07-30 2 views
6

Mercurial 리포지토리의 많은 파일들이 단일 커밋으로 이동되었지만,이 파일들은으로 바뀐 으로 표시되지 않았습니다. 설상가상으로, 일부 파일은 동일한 커밋에서 수정되었습니다.커밋 후 Mercurial 리포지토리의 이름 변경하기

변경 사항 및 파일 이동을 유지하면서 변경 집합을 백 아웃하고 이름 변경을 올바르게 감지하려면 어떻게해야합니까?

답변

0
  1. 파일에 대한 모든 수정 목록을 만듭니다.
  2. 파일이 이동되지 않은 버전으로 다시 업데이트하십시오.
  3. 파일 이름을 바꿉니다.
  4. 필요한 경우 내부 파일을 수정하십시오.
  5. 커밋.
+0

모든 수정 목록을 만들고 변경 전으로 되 돌린 다음 모든 파일을 수동으로 업데이트하는 것이 가장 수동 방법입니다. 좀 더 자동화되고 바보 같은 방법이 필요했습니다. –

+0

Mercurial은 변경 사항이 어떻게 달라야하는지 알지 못합니다. '파일 이름 바꾸기와 이름이 비슷한 삭제되고 추가 된 파일 바꾸기'가 없습니다. 힘내 여기 더 좋을 것입니다, 그것은 내용을보고 파일을 삭제하고 추가하는 것이 아니라 파일 이름 또는 뭔가를 변경하는 것이 좋습니다. – MrFox

2

자동 MrFox의 답변 버전의 패치 파일에 "나쁜"변경 집합의

  1. 수출 변경 (자식 포맷, 아마) 또는 번들 또는 MQ-패치
  2. 업데이트로 변환 저장
  3. 이 패치를 적용 나쁜 변경 집합의 부모 디렉토리를 작업 | 이름 변경을 감지하기 위해 디렉토리 작업 수정 된에 사용 hg addremove -s NN 수입 번들
  4. , 있습니다 END_STRONG_1을 확인 (NN 손으로 찾을 수 있어야합니다, 모든 이름 변경이 결과에서 검출되어야한다) 올바른 결과가
  5. 새로운 좋은 변경 집합
10

역사 편집 (일명 MQ에서 주변에 일 처리) 고정 이름 변경을위한 대안이있다에게 커밋 수신되지 않습니다 때까지 hg status -C과 추측의 TS는 adremove를 반복합니다. 픽스 레벨 확장이 사용하는 논리로 수동 절차는 here으로 설명되어 있습니다.

수동 프로세스는 다음과 같습니다. 이름이 변경되지 않은 각 개정판 N의 경우 :

$ hg update n-1 
$ hg revert --all --rev n 
$ hg addremove -s 70 
$ hg commit -m "Fix renames from n" 
$ hg merge n 

때때로 유사 플래그는 부수기를 요구합니다. 그 이유는 이름 바꾸기가 거의 절대 이름이 변경되지 않기 때문입니다. 예를 들어, 클래스의 이름을 바꾸려면 파일의 변경과 파일의 변경이 필요합니다. 따라서 그들은 100 % 동일하지 않습니다. addremove가 수행하는 작업을 검토하고 추가 된 파일이 "X (Y에서 이름 변경)"으로 표시되어 있는지 확인해야합니다.

이렇게하면 수작업없이 전체 기록을 복구 할 수 있습니다. 오늘 (fixrenames 확장자를 사용하지 않고)이 작업을 수행해야했고 수정하는 데 약 5 분이 걸렸습니다.

수정할 필요가있는 누적 된 변경 집합이있는 경우에도이 절차를 적용 할 수 있습니다.

변경 집합 그래프는 다음과 같습니다. 변경 집합 A는, B, C & D. B와 D는 잘못된 이름 변경했다 고려해

D 
| 
C 
| 
B 
| 
A 

먼저 우리는 인플레 이스가 B로 복귀 할, A를 업데이트 addremove을하고 그 다음 우리가로 C 병합 E.으로 커밋 E가 F로 잘못 되었기 때문에 C로 E를 써라.이제 우리가 여분의 머리를 닫 병합,

F D 
|\| 
| C 
| | 
E B 
|/ 
A 

지금 우리는 F로 업데이트 D. 위해 동일을 적용 D, addremove에서 복귀와 G. 커밋 :이 같은 것을 볼 수 있습니다.

H 
|\ 
G | 
| | 
F D 
|\| 
| C 
| | 
E B 
|/ 
A 

이 당신이 항상

hg diff -r D -r H 

당신의 도구에 따라 수 일한 당신 자신을 설득하려는 경우, 당신은 나와 차이하거나 이름을 바꿀 파일 중 하나를 볼 수 있습니다 : 당신은 다음과 같이 표시되어야합니다 그러나 그 (것)들 사이 다름없이.

+0

커맨드 라인은'hg merge n'이라고하지만 그래프는'n + 1'과의 병합을 나타 냅니까? –

관련 문제