2010-05-04 3 views
1

신입생 알림!Mercurial 중앙 서버 파일의 불일치 ('diff to local'사용)

좋아, 나는 몇 주 동안 함께 일해 온 중앙 Mercurial 저장소가있다.

정말 기괴한 문제가 발생할 때까지 모든 것이 잘되었습니다. 중앙 서버가 자체 서버와 동기화되지 않는 것 같습니다. 지금은 아웃 오브 싱크 (out-of-sync)로 보이는 파일이 하나 밖에 없지만, 앞으로 일어날 수있는 문제를 방지하기 위해 어떻게 이런 일이 발생했는지 정말로 알아야합니다.

시나리오 :

1) 기존 프로젝트 디렉토리를 사용하여 서버에 의욕 저장소를 만들었습니다. 디렉토리에 'mypage.aspx'파일이 있습니다. 내 워크 스테이션에서

2), 나는

4

을 mypage.aspx을 편집했다

3) 중앙 저장소) HG 커밋, 중앙 서버에 내 워크 스테이션에서 다음 HG 밀어 복제

5) 이제 TortoiseHg의 저장소 탐색기를 사용하여 서버의 저장소에서 mypage.aspx를 보면 mypage.aspx의 변경 내역을 볼 수 있습니다. 초기 체크인과 편집 중 하나입니다. 그러나 'Diff to local'을 선택하면 서버의 디스크에있는 현재 버전이 편집 된 버전이 아니라 원래 버전임을 보여줍니다!

아직 브랜칭을 실험하지 않았으므로 브랜치 문제가 발생하지 않을 것이라고 확신합니다.

서버 또는 클라이언트의 'hg status'는 보류중인 변경 사항을 반환하지 않습니다.

서버 저장소의 복제본을 새 위치에 만들면 예상했던 것과 같은 변경 기록이 표시되지만 디스크의 파일에는 내 편집 내용이 포함되지 않습니다.

그래서, 요약하자면 :

중앙 저장소 = 원본 파일 만 보여줍니다 (나쁜) 업데이트 내역

로컬 저장소 'A'= 업데이트 된 파일에 변화가 개정 역사의 변화를 보여줍니다 (좋은)

로컬 저장소 'B'= 원본 파일은, 그러나 개정 역사의 변화를 보여줍니다 (나쁜)

도와주세요.

감사합니다,

데이비드

답변

3

중앙 repo에서 작업 복사본을보고있는 것처럼 들립니다. 로컬 저장소와 마찬가지로 작업 복사본이 있습니다. hg update (또는 TortoiseHg의 "지점 팁 업데이트")를 실행하면 중앙 repo의 작업 복사본을 최신 버전으로 동기화해야합니다.

+0

hg 요약은 작업 카피 본의 개정판을 보여줍니다; hg 팁은 팁의 개정판을 보여줍니다. –

+0

팁 주셔서 감사. 초기 패닉이 닳아 없어지는 것이 당연합니다! Mercurial FAQ에서 밀어 넣기 후 중앙 저장소에서 자동 업데이트를 수행하는 방법을 보여주는 항목을 발견했습니다. 이는 내가 원했던 것입니다. –

1

서버의 저장소는 두 가지 구성 요소가로 이것은 정상입니다 :합니다 (.hg 하위 디렉토리에) 변경 집합의 실제 저장소를하고, 작업 복사본. 워크 스테이션의 로컬 저장소에서 서버 저장소로 변경 사항을 푸시하면 서버의 저장소 파일 (.hg 서브 디렉토리에 있음)이 갱신되지만 .hg 서브 디렉토리 외부의 작업 사본 파일은 변경되지 않습니다. 작업 사본을 변경하기 위해 서버에서 명시 적 갱신 조작이 필요합니다.

서버 리포지토리가 리포지토리로만 사용되고 있고 실제 작업을 복제본으로 수행하는 경우 서버에서 "베어 리포지토리"를 사용하는 것이 좋습니다 (작업 복사본 파일을 삭제하고 .hg 하위 디렉토리 만 유지하십시오.

+0

또는 'hg update null'을 사용하여 베어 레포를 만들면 잘못된 것을 삭제할 기회가 줄어 듭니다. – tonfa

+0

해명 해 주셔서 감사합니다. 중앙 서버에서 전체 저장소를 계속 사용하여 백업을 수행 할 수 있다고 생각합니다. –

+0

@David - 작업 복사본을 사용하지 않는 경우 톤파의 더 안전한 절차를 사용하여 제거하십시오. 백업은 .hg 하위 디렉토리를 캡처해야합니다. 이것은 현재 스냅 샷뿐만 아니라 전체 히스토리를 제공합니다. –

관련 문제