Usare git per ottenere solo l'ultima revisione


380

Voglio seguire un progetto che usa git. Non voglio clonare l'intero repository e la cronologia completa, voglio solo l'ultima revisione e voglio essere in grado di aggiornare a nuove revisioni dal progetto remoto.

Ho provato a usare git clone, ma questo crea una copia dell'intero repository (dimensioni dei file enormi) e il rilevamento delle modifiche rende lo spazio su disco ancora più grande (100 MB di file ora occupano oltre 2 GB).

Non invierò patch e non ho bisogno della cronologia. Voglio solo l'ultima versione come in sovversione.

È possibile in git?


2
Git 1.9 / 2.0 (1 ° trimestre 2014) sarà molto più efficiente con poca clonazione: stackoverflow.com/a/21217267/6309 e stackoverflow.com/a/21217326/6309
VonC

Risposte:


552

Usa l' --depthopzione in git clone:

Crea un clone superficiale con una cronologia troncata al numero specificato di commit.

esempio: git clone --depth=1 <remote_repo_url>


87
esempio:git clone --depth=1 <remote_repo_url>
iDev247,

14
Poiché commit 82fba2b in git 1.9 queste limitazioni non esistono più.
Niutech,

1
Quali limitazioni?
Ignorante

4
@Triangles: Limitazioni (non più correnti): un repository superficiale ha un numero di limitazioni (non è possibile clonare o recuperare da esso, né spingere da né dentro di esso), ma è adeguato se si è interessati solo alla storia recente di un grande progetto con una lunga storia e vorrebbe inviare correzioni come patch.
odinho - Velmont,


79

Una soluzione alternativa a fare shallow clone ( git clone --depth=1 <URL>) sarebbe, se il lato remoto lo supporta, usare l' --remoteopzione di git archive :

$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

Oppure, se il repository remoto in questione è in grado di navigare usando alcune interfacce web come gitweb o GitHub, allora c'è la possibilità che abbia la funzione 'snapshot', e puoi scaricare l'ultima versione (senza informazioni sulla versione) dall'interfaccia web.


4
Questa soluzione non soddisferà questo requisito però: "Voglio essere in grado di aggiornare a nuove revisioni dal progetto remoto". Poiché sostanzialmente scarica l'archivio, non sarà in grado di avanzare rapidamente di uno o due commit. "Clone superficiale" lo consente. Tuttavia, immagino che questa soluzione abbia i suoi casi d'uso, quindi vale la pena ricordare.
VasiliNovikov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.