2012-08-31 5 views
8

예를 들어, 수은 저장소가있는 경우 https://code.google.com/p/potentiallyLarge 거기에 복제하기 전에 크기를 알아낼 수있는 명령이 있습니까? 비슷한 것수은 저장소의 크기를 찾는 방법은 무엇입니까?

hg size https://code.google.com/p/potentiallyLarge 

또한 Subversion 저장소에 대해 이렇게하는 명령이 있습니까?

+0

SVN에 대한 답변에 관심이 많습니다. (SVN 목록 -R로 결정된) 10MB 이상의 SVN 저장소를 10000 개 이상의 버전에서 Mercurial (hgsubversion)을 사용하여 복제해야합니다. 인터넷. –

+0

@TimDelaney 당신은 아마도'svnsync'를 사용하고 그 저장소에서 로컬로 복제하는 것이 더 나을 것입니다. 그래도 추측. –

+0

@ Ry4an 나는 그 일을하는 것에 대해 생각해 봤다. (URL을 상류 SVN으로 바꾼다.) 단점은 저장 공간을 두 배로 늘리는 것입니다 (적어도 일시적으로). 또한 전액을 전송할 때 이점이 있는지 잘 모르겠습니다. 두 가지 방식의 동기화를 사용하여 로컬 개발자를위한 Hg 저장소를 설정하고 있습니다. 워크 플로우의 실수로 인한 파손을 방지하기 위해 Hg (분기, 병합 등)와 같이 모든 사람이 일부 후크를 사용하여 작업 할 수 있도록 워크 플로우를 결정하고 테스트했습니다. (SVN 분기와 병합하지 않습니다 ...). 고통을 느낄 수있는 초기 클론이 될 것입니다. 모든 것을 얻을 수 있습니까, 아니면 일부만 얻을 수 있습니까? –

답변

2

업데이트 : 내 대답은 잘못되었지만 MG가 응답으로 좋은 정보를 제공 했으므로 여기에 답장을 남깁니다. 정답은 "아니오"인 것 같습니다.

좋은 방법은 아니지만 해결 방법이 필요합니다. hg clone URL 정말 그냥 hg init ; hg pull URL입니다 그리고 명령 hg incoming는 풀을 한 경우에 당신이 얻을 것이다, 그래서 당신은 무엇을 할 수 있는지를 알려줍니다 :

hg init theproject 
cd theproject 
hg incoming --stat URL_TO_THE_PROJECT 

및 데이터 양이 당기는됩니다 꽤 괜찮은 추측을 얻을 당신이 함께 따르는 경우 아래 :

hg pull URL_TO_THE_PROJECT 

나는 hg incoming의 네트워크 효율성에 대한 확실하지 않다하지만 난 그것에 대해 잘못 될 수 있지만 나는 그것이 모든 변경 집합에서 모든 것을 다운로드 생각하지 않습니다. 두 번 다운로드를 방지하기 위해 나중에 들어올 수있는 파일을받는 모든 항목을 저장하는 --bundle 옵션을 제공합니다.

+0

들어오는 명령 **은 모든 것을 다운로드 할 것입니다 ** 클라이언트가 "저 또는 변경 집합에 대한 변경 내역을 알려주십시오"라고 말할 방법이 없으므로 **. –

+0

폭발, 나는 그것이 진짜 "델타"가 아니라 "헤더"를 다운로드 할 수 있기를 바랬다. –

+0

그래, 그게 출력물에서 기대할 수 있겠지만 ... 불행히도 오늘은 할 수 없다. –

4

디스크에 사용 된 크기가 복제를 만드는 데 사용 된 대역폭과 다릅니다. Bitbucket과 같은 일부 호스팅 사이트는 크기를 디스크에 표시하므로 복제 전에 시스템에서 필요한 공간을 미리 알 수 있습니다. 하지만 Google 코드가 아니라는 것을 알 수 있습니다. 그래서 도움이되지 않습니다.

Mercurial wire protocol은 저장소의 크기를 알려주는 명령을 노출하지 않습니다. 일반 복제본을 만들 때 클라이언트는 수신 할 데이터의 양을 미리 알지 못하고 단지 데이터 스트림을 수신합니다. 변경 내역을 수신 한 후 클라이언트는 매니페스트 및 파일 로그를 얼마나 많이 알고 있는지 알고 있지만 크기는입니다.

실제로 복제본이 사용할 데이터의 양은 서버에서 계산하기가 어렵습니다. 사용 된 네트워크 대역폭은 사용한 압축률이 다르기 때문에 (bzip2 대 gzip) 디스크 공간보다 적습니다. 그러나 복제물에 --uncompressed을 사용하면 (Google 코드에서 지원하지 않음) 트릭이 있습니다 (아래 참조).

클론이 사용하는 많은 대역폭을 알 수있는 유일한 방법은 하나를 만드는 것입니다. 당신이 복제가 있다면 이미 당신은 복제를 시뮬레이션 할 hg bundle를 사용할 수 있습니다

$ hg bundle --all my-bundle.hg 

번들의 크기를 저장소에 거기에 얼마나 많은 데이터가 당신을 말할 것이다.

트릭 : Google 코드가 hg clone --uncompressed을 지원했다면 원격 저장소의 크기를 알 수 있습니다. --uncompressed을 사용하면 클라이언트는 서버에 .hg/ 디렉토리의 내용을 그대로 보내고 bzip2로 다시 압축하지 않고 서버에 요청합니다. 서버는 편리하게 클라이언트 에게 저장소의 크기를 알려줌으로써 스트림을 시작합니다.. 그래서 당신은 클라이언트가 repo의 크기를 알려주는 라인을 인쇄했을 때 그러한 복제본을 시작한 후 그것을 중단시킬 수 있습니다 (Control-C로).

관련 문제