Mercurial 리포지토리의 많은 파일들이 단일 커밋으로 이동되었지만,이 파일들은으로 바뀐 으로 표시되지 않았습니다. 설상가상으로, 일부 파일은 동일한 커밋에서 수정되었습니다.커밋 후 Mercurial 리포지토리의 이름 변경하기
변경 사항 및 파일 이동을 유지하면서 변경 집합을 백 아웃하고 이름 변경을 올바르게 감지하려면 어떻게해야합니까?
Mercurial 리포지토리의 많은 파일들이 단일 커밋으로 이동되었지만,이 파일들은으로 바뀐 으로 표시되지 않았습니다. 설상가상으로, 일부 파일은 동일한 커밋에서 수정되었습니다.커밋 후 Mercurial 리포지토리의 이름 변경하기
변경 사항 및 파일 이동을 유지하면서 변경 집합을 백 아웃하고 이름 변경을 올바르게 감지하려면 어떻게해야합니까?
자동 MrFox의 답변 버전의 패치 파일에 "나쁜"변경 집합의
hg addremove -s NN
수입 번들역사 편집 (일명 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
당신의 도구에 따라 수 일한 당신 자신을 설득하려는 경우, 당신은 나와 차이하거나 이름을 바꿀 파일 중 하나를 볼 수 있습니다 : 당신은 다음과 같이 표시되어야합니다 그러나 그 (것)들 사이 다름없이.
커맨드 라인은'hg merge n'이라고하지만 그래프는'n + 1'과의 병합을 나타 냅니까? –
모든 수정 목록을 만들고 변경 전으로 되 돌린 다음 모든 파일을 수동으로 업데이트하는 것이 가장 수동 방법입니다. 좀 더 자동화되고 바보 같은 방법이 필요했습니다. –
Mercurial은 변경 사항이 어떻게 달라야하는지 알지 못합니다. '파일 이름 바꾸기와 이름이 비슷한 삭제되고 추가 된 파일 바꾸기'가 없습니다. 힘내 여기 더 좋을 것입니다, 그것은 내용을보고 파일을 삭제하고 추가하는 것이 아니라 파일 이름 또는 뭔가를 변경하는 것이 좋습니다. – MrFox