2009-11-24 4 views
6

파일의 타임 스탬프를 보존하면서 수은 저장소를 백업하는 방법이 있습니까?시간 소인을 보존하면서 수은 저장소 백업

지금은 hg clone을 사용하여 저장소를 스테이징 디렉토리에 복사하고 있으며 백업 프로그램이 여기에서 파일을 선택합니다. 백업이 진행되는 동안 (커밋에서) 변경되지 않기를 원하기 때문에 저장소에 직접 백업 프로그램을 지정하지 않습니다.

hg clone은 모든 파일의 타임 스탬프를 현재 시간으로 변경하므로 모든 사항이 수정 된 것으로 생각되는 백업 프로그램을 변경할 수 있습니다.

답변

5

hg clone 대신 hg pull을 사용하는 것이 좋습니다. 따라서 서버에 저장소의 미러를 유지하고 정기적으로 hg pull으로 업데이트하십시오. 그런 다음 백업 프로그램이 인 의 백업을 사용하게합니다. hg pull을 사용하면 가장 최근의 기록을 전송하고 변경에 의해 실제로 변경된 파일은 .hg/store/data에서 가져옵니다.

여기에 나는 두 개의 파일로 작은 repo를 만들었습니다 : a.txtb.txt. 그런 다음 hg clone --noupdate을 사용하여 "서버에"저장소를 복제했습니다. 따라서 우리는 서버에 작업 복사본이 없도록 보장합니다. 단지 .hg에있는 기록 만 필요합니다.

타임 스탬프는 복제 한 후이 모습 :

 
% ll --time-style=full .hg/store/data 
total 8.0K 
-rw-r--r-- 1 mg mg 76 2009-11-25 20:07:52.000000000 +0100 a.txt.i 
-rw-r--r-- 1 mg mg 69 2009-11-25 20:07:52.000000000 +0100 b.txt.i 

당신이 언급 한 바와 같이 파일이 모든 단지 복제 작업에 의해 생성 된 이후, 그들은 모두 동일합니다. 그런 다음 원래 저장소 (클라이언트의 저장소)를 변경하고 커밋했습니다. a.txt.i에 대한 타임 스탬프가 업데이트되었습니다 방법

 
% ll --time-style=full .hg/store/data 
total 8.0K 
-rw-r--r-- 1 mg mg 159 2009-11-25 20:08:47.000000000 +0100 a.txt.i 
-rw-r--r-- 1 mg mg 69 2009-11-25 20:07:52.000000000 +0100 b.txt.i 

공지 사항 b.txt.i에 대한 타임 스탬프가 혼자하고있는 동안 (I 단지 내 커밋에 a.txt 감동) : 변경 집합을 당기는 후 나는이 타임 스탬프를 얻었다.

백업 소프트웨어가 현명하다면 Mercurial이 데이터를 a.txt.i에만 추가 한 것을 알 수 있습니다. 즉, 새로운 a.txt.i 파일은 이전 시점의 a.txt.i 파일과 동일하므로 백업 프로그램은 파일의 마지막 부분 만 복사해야합니다. Rsync는이를 알 수있는 백업 프로그램의 예입니다.

6

계획 A : 소스 및 대상 디렉토리가 동일한 파일 시스템에있을 때hg clone -U 단순히 타임 스탬프를 변경하지 않고, 저장소에있는 모든 파일을 하드 링크 것이다. 이 방법은 매우 빠르고 안전합니다 (파일이 작성 될 때 파일이 느슨하게 연결 해제됩니다).

필요한 경우 동일한 파일 시스템에서 먼저 복제 한 다음이 새 복제본을 다른 파일 시스템으로 rsync 할 수 있습니다.

플랜 B는 : 그것은 rsync를 또는 다른 파일 기반 동기화 도구를 사용하는 일반적으로 안전합니다. Mercurial은 디스크에 마법 같은 것을 저장하지 않습니다.

rsync가 실행 중일 때이 저장소에 커밋 할 때 경쟁 상태가 발생하지만 복원 할 경우 "hg rollback"이 그러한 불일치를 정리할 수 있기 때문에 무시할 수 있다고 생각합니다. 깨진 백업 참고로, 롤백 은 rsync 창에 여러 개의 개별 트랜잭션 (예 : 여러 "푸시"또는 "커밋"명령)이 있거나 리스터 스, hg strip 및 일부와 같은 기록을 변경하는 파괴적인 작업을 실행하는 경우을 복구 할 수 없습니다. MQ 명령).

+0

그래, 내가 걱정하고있는 경쟁 조건이야. 'hg 롤백 (rollback) '이 필요한시기를 알 수 있습니까? –

+0

'hg verify'는 저장소의 모든 체크섬/개정 해시를 검사하고 오류에 대해 신경을 씁니다. – intgr

+0

덧붙이기를 원할지도 모르겠다 :'hg clone -U'는 클론이 만든 하드 카피가 하드 링크를 가지고 있지 않기 때문에 갈 길이다. 그냥 저장소 않습니다. –