2011-05-03 2 views
2

SVN에서 Mercurial로 작업 중입니다. SVN으로 변경 사항을 잃어 버리지 않았습니다. 병합은 매우 지능적이었습니다. Mercurial을 사용하여 로컬 변경 사항을 적용하고 로컬 변경 사항을 덮어 썼을 때 주 repo에서 당기기 만했습니다. 시나리오는 다음과 같습니다.Mercurial 변경 충돌

with file.php 첫 번째 250 줄은 동일합니다. 로컬로 특정 기능을 수행하는 3 가지 기능을 추가했습니다. 나는 나의 변화를 저질렀고 DEV까지 밀어 넣는 것을 잊었다. 그래서 DEV에서 3 가지 새로운 기능을 추가했습니다. 나는 이런 일이 왜 논리적 인 이유를 생각 할 수없는 것

(완전히 다른 존재에도 불구하고) 지역 3 개 기능

난 ... DEV의 3 개 기능에 의해 덮어했다 커맨드 라인이 아닌 TortoiseHG를 사용합니다.

+2

안녕하세요 - 저는 Mercurial을 사용하고 때로는 그렇게 느껴지더라도 커밋 된 변경 사항을 잃어 본 적이 없습니다. 물건을 덮어 쓰게되면 병합되는 지사와 관련이 있다고 말해야합니다. 'hg serve'를 사용하여 http : // localhost : 8000/graph /에있는 브랜치 뷰를 로컬로 얻을 수 있습니다. – faester

답변

3

설명에 단계가 없습니다. 설명에 따르면, DEV는 아마도 잃어버린 기능을 보지 못했습니다. 그것들을 덮어 쓸 수는 없습니다. 그러나 DEV에서 변경 사항을 가져 와서 로컬 분기가 다른 리프 인 동안 DEV와 동일한 작업 브랜치를 가져올 수 있습니다. 이 경우 두 가지 분기를 병합하여 다시 가져올 수 있습니다. 미완성 (병합되지 않음) 분기가 있는지 알아 보려면 hg heads을 사용하십시오. 중요한 작업은 로컬로 커밋 된 작업을 숨기고 (피해는 없지만) hg pull -u 또는 hg update -c과 같은 업데이트입니다. 내가 본 이후

편집 당신은 TortoiseHg 사용

TortoiseHg workbench

은 아주 멋지게 트리를 보여줍니다. 예상했던대로 잡아 당기기가 지점을 만들고 새로운 팁은 내가 별도 저장소에서 가져온 것이 었습니다. 워크 벤치는 현재 작업 디렉토리 (1+와 같은 것)를 보여 주므로 그것이 어떤 출처인지를 알 수 있습니다. 다른 지점을 선택하고 "Merge with local"을 선택하여 모든 변경 사항을 수집하십시오.

Mercurial이 자동으로 병합하지 않는 이유는 기술적 인 것이 아니라 철학적 인 이유입니다. cvs/svn 워크 플로에는 관리 절차를 수행하는 분기가 있으며 분기에 대한 모든 커밋은 중앙 저장소와 함께 최신 상태 여야합니다. 따라서 모든 업데이트가 병합됩니다. 대신 Mercurial과 git은 분기가 쉽다는 접근 방식을 취합니다. 각 분기를 다른 분기에 결합 할시기와시기를 선택할 수 있으며 분기에 이름을 지정하는 작업은 별도의 작업입니다. TortoiseHg의 끌어 오기 대화 상자는 Post Pull 설정 Update 및 Automatically resolve merge conflicts를 사용하여 cvs와 비슷한 동작을 시도 할 수 있습니다.

머큐리얼 위키는 an article on Mercurial workflows입니다. 특히 CvsLikePractice은 아마도 I보다 나은 분기를 설명 할 것입니다.

1

로컬 버전의 행이 누락되었다는 것을 알아 차리기 전에 실행 한 Mercurial 명령은 무엇입니까?

DEV에서 hg pull을 했습니까?

나는 Mercurial이 전에 변경 집합을 잃어 버렸다는 것을 보지 못했지만, 변경 사항이 어딘가에서 파일 기록에 최소한 있다고 말한 것처럼 모든 것을 저 지르면 상상할 수 있습니다.

관련 문제