2015-02-23 12 views
16

C'è un modo per stimare la dimensione di un repository Git pubblico senza doverlo clonare?Stimare la dimensione di un repository Git prima di clonarlo

Vorrei utilizzare queste informazioni per assicurarmi che il repository sia più piccolo di una certa dimensione. Se non lo è, non voglio clonarlo.

So che può essere fatto su Github ma questo repository è ospitato su un server dedicato.

+0

Puoi 'ssh' nel server e fare un' du'? –

+0

No, non posso 'ssh' dentro. –

+0

Penso che saremmo in grado di aiutare meglio se sapessimo perché avete bisogno di queste informazioni. – Schwern

risposta

6

Risposta breve: "no".

Se lo spazio è una preoccupazione, clonare il repository sul più grande spazio disponibile disponibile e se è abbastanza piccolo da mettere altrove lo spostamento sarà economico.

Un modo davvero brusco per ottenerlo: inseriscilo ad es. il tuo hook di post-ricezione sul server

git for-each-ref refs/size | while read . . ref; do git update-ref --delete $ref; done 
set -- $(du -sh .git/objects) 
git update-ref refs/size/$1-as-of-$(date +%Y%m%dT%H%M%S%Z) HEAD 

e puoi solo ls-remote.

+0

Grazie per la risposta. In realtà mi piacerebbe essere sicuro che il repository fosse inferiore a 100 MB. Ho modificato la mia domanda. –

6

Risposta breve: Nnn ... forse.

Risposta lunga: ci sono alcune euristiche, e puoi dare un'occhiata allo Git transfer protocols per ottenere alcune informazioni.

La mia osservazione personale è che per la maggior parte dei progetti basati su testo, la dimensione di .git è raramente superiore alla dimensione di pagamento, anche per progetti molto vecchi.

Il recupero di info/refs indica il numero di tag e rami nel repository.

Il recupero di objects/info/packs indica quale pacchetto ha il progetto. Puoi quindi fare una richiesta HEAD (supponendo che sia HTTP) su objects/pack/pack-WHATEVERTHEIDIS.pack per vedere quanto sono grandi i file del pacchetto. Questo ti darà un limite inferiore per le dimensioni del repository.

Se lo spazio su disco è il problema (il disco è economico, acquistane uno nuovo), puoi fare uno git clone --bare per risparmiare lo spazio di un pagamento. È quindi possibile clonare quella versione locale e nuda per ottenere un checkout completo.

Infine, se sei intelligente, puoi far camminare l'albero degli oggetti facendo una richiesta HEAD per ottenere la dimensione di ogni oggetto e cancellare l'oggetto GET dopo aver ricevuto solo l'intestazione (ignorando la parte dati). Questo ti darebbe la dimensione del repository senza dover scaricare l'intero repository.

Problemi correlati