2012-02-04 3 views
2

SVN에서 로컬 리비전이 마스터 리포지토리에 최신 상태가 아닌 경우 커밋 할 수 없습니다. Mercurial은 이것을 확인하지 않고 커밋을 허용합니다. 그런 다음 병합을 수행해야합니다.왜 Mercurial은 커밋하기 전에 최신 버전을 확인하지 않습니까?

많은 프로그래머가있는 경우 큰 문제가 발생할 수 있습니다. 이 주위에 어떤 방법이 있습니까?

+2

당신이 암시하는 "큰 문제"는 Mercurial과 Subversion간에 차이가 없습니다. 한 시스템에서'svn update' 할 때 암묵적으로 병합을 수행하고 다른 프로세스에서는'hg pull' 후에'hg merge'를 사용하여 명시 적으로 병합합니다. –

답변

6

Mercurial과 SVN에는 매우 다른 두 가지 작업 방식이 있습니다.

SVN이 중앙 집중화되어 있으므로 커밋 된 모든 것이 다른 모든 사람이 즉시 액세스 할 수 있습니다. 항상 다른 모든 변경 사항들에 항상 의지해야합니다. 그래서 당신은 당신이 한 일이 다른 사람들이 만든 수정 작업을 여전히 수행하고 있는지 확인할 수 있습니다.

Mercurial을 사용하면 커밋 작업 디렉토리가 로컬입니다. push 만 다른 사람에게 배포됩니다. 그것은 각각의 모든 커밋에 대한 체크가없는 이유입니다. (이렇게하면 저장소에 연결하지 않고 오프라인에서도 작업 할 수 있습니다.

변경 사항을 push으로 변경하려고 시도 할 때 Mercurial은 작업중인 지점에 새로운 커밋이 있는지 확인합니다. 그렇다면 밀어 넣기 (강제로 새 머리를 만듭니다) 또는 다른 수정 사항을 병합하여 다른 사람의 작업을 인정할 수 있습니다.

모든 DVCS (D는 배포 용 임) 나는 커밋/푸시를 다루는 것과 같은 방식을 가지고 있음을 알고 있기 때문에 많은 장점 중 하나입니다. 병합이 올바르게 수행되면 문제가 발생하지 않습니다.

각 커밋에서 새로운 변경 집합을 확인하려면 일부 후크를 사용하여이를 수행 할 수 있다고 생각하지만 실제로 이유는 알지 못합니다. 어쩌면 누군가가 그런 것을 제안 할 것입니다.

관련 문제