예, 여기에서는 Mercurial을 사용할 수 있습니다. 여기 그것이 작동하는 방법입니다.
현재 복제본이 new-dot-net
이라면 은 새로운 .Net 버전을 지원하므로이 복제본을 new-dot-net
이라고합니다. 당신은 그것의 클론을 만들고 그것을 old-dot-net
또는 이와 비슷한 것으로 부릅니다. 두 클론은 현재 과 같으며 대상은 .Net 3.5입니다.
이제 을 약간 변경하여 .Net 2.0 호환 가능하게 만드십시오. 당신이 변경하면 두 클론 분기가 시작됩니다 :
new-dot-net: ... [a] --- [b]
old-dot-net: ... [a] --- [b] --- [c] --- [d]
은 여기에서 닷넷 2.0 호환성을 추가
[c]
및
[d]
변경 집합을했다.
old-dot-net
클론에 변경 집합이 포함되어있는 이유에 유의하십시오. 이전 버전과의 호환성이 이므로
은 변경되지 않습니다.은
new-dot-net
으로 변경합니다. 계속하시는대로 작업을 계속하시는 것이 중요합니다.
net-dot-net
은 변경 집합의 하위 집합
old-dot-net
에 포함될 것입니다. 변경 사항은
new-dot-net
에서
old-dot-net
으로 변경되지만
이 아닌은 반대 방향으로 변경됩니다.
new-dot-net
에서 새롭게 변경한다고 가정 해 보겠습니다. 당신은 new-dot-net
의 변화 을하고 상황은 지금과 같다 : 당신 변화 old-dot-net
에,
new-dot-net: ... [a] --- [b] --- [x]
old-dot-net: ... [a] --- [b] --- [c] --- [d]
당신은 지금뿐만 아니라 old-dot-net
에 변화를 포트를 백업 할 및 net-dot-net
에서 끌어 :
% cd old-dot-net
% hg pull ../new-dot-net
[x]
/
old-dot-net: ... [a] --- [b] --- [c] --- [d]
:
이것은 new headold-dot-net
에서 생성됩니다
[x]
변경 집합의 부모 변경 집합은 [b]
이므로 이제 에 multiple heads이 있고 수를 줄이기 위해 병합해야합니다. 병합을하면 의 방식 인 새로운 changeset를 만들 수 있습니다. "[x]
과 [d]
을 결합하는 방법"이라고 말합니다.[x]
변경 집합 만 터치하지 않은 코드 (예 : [c]
및 [d]
) 만 병합하면 병합이 작동합니다. 그렇지 않으면 병합 도구로 이 표시되고 충돌을 해결해야합니다. 지금 닷넷 2.0 호환 코드로 [x]
변화를 통합 한 -
[x] --------------.
/ \
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e]
하면됩니다 : 당신은 chageset [e]
로 병합을 커밋합니다.
new-dot-net
에 변경 사항이있을 때마다 이것을 반복하십시오. 당신이
[x] --------------.---- [y] --- [z]
/ \
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e]
을 얻을 old-dot-net
로 당겨 후
new-dot-net: ... [a] --- [b] --- [x] --- [y] --- [z]
을 그리고 당신은 지금 [e]
및 [z]
병합 : 의 더 많은 기능이 추가한다고 가정 해 봅시다 기억
[x] --------------.---- [y] --- [z]
/ \ \
old-dot-net: ... [a] --- [b] --- [c] --- [d] --- [e] ----------- [f]
중요한 부분을 다음과 같습니다 :
- 새로운 기능을
new-dot-net
으로 변경하십시오.
old-dot-net
에
- 풀 변화는 결코
new-dot-net
에 old-dot-net
에서을 밀어하지 않습니다.
당신이 어떤 점에서 new-dot-net
에 변화가없는 old-dot-net
필요는 것을 발견 할 경우, 당신은 여전히 에게 그것을 그것을 끌어와 병합 할 필요가있다. 그런 다음 더미 병합을 수행합니다. 헤드가 [w]
및 [g]
, 그리고 당신이 [g]
을 유지하려면, 다음 다음 모든 변경 사항을 되돌리려면,
% HGMERGE=true hg merge -y
% hg revert --all --rev g
% hg commit -m 'Dummy merge with y.'
trick이 결과에 대해 걱정하지 않고 병합을 수행하는 것입니다, 그리고로 변경되지 않은 작업 복사본을 커밋 병합 그렇게하면 세계에 "[w]
과 [g]
의 조합은 [g]
"입니다. 즉, 변경 사항을 [w]
에 버립니다. 새 new-dot-net
이후에 변경된 내용이 [w]
인 경우 처럼 병합 할 수 있습니다.
그래서이 지점을 사용하지 않으시겠습니까? 왜 안돼? – kitsune
아무런 차이가 없습니다. Mercurial에서 (명명 된) 가지와 클론간에 1-1의 관계가 있습니다. 따라서 변경 사항을 뒤로 이식하는 것이 쉽지도 어렵지도 않습니다. 클론을 사용하면 두 개의 클론에서 파일을 비교하는 것이 더 쉬울 수 있으며 (편집기에서 파일을 열어서) 분리하면 위와 같이 쉽게 설명 할 수 있습니다. –
감사합니다. – kitsune