519 votes

Utiliser git pour obtenir uniquement la dernière révision

Je veux suivre un projet qui utilise git. Je ne veux pas cloner le dépôt complet et l'historique complet, je veux juste la dernière révision, et je veux être capable de mettre à jour les nouvelles révisions du projet distant.

J'ai essayé d'utiliser git clone, mais cela crée une copie de l'ensemble du dépôt (taille de fichier énorme), et le suivi des changements rend l'espace disque encore plus grand (100mb de fichiers prend maintenant plus de 2gb).

Je ne vais pas soumettre de correctifs, et je n'ai pas besoin de l'historique. Je veux juste la dernière version comme dans subversion.

Est-ce possible dans git ?

2 votes

Git 1.9/2.0 (Q1 2014) sera beaucoup plus efficace avec le clonage superficiel : stackoverflow.com/a/21217267/6309 y stackoverflow.com/a/21217326/6309

768voto

Greg Hewgill Points 356191

Utilice git clone avec le --depth l'option est réglée sur 1 pour créer un clone peu profond avec un historique tronqué au dernier commit.

Par exemple :

git clone --depth 1 https://github.com/user/repo.git

Pour initialiser et mettre à jour les sous-modules imbriqués, passez également le paramètre --recurse-submodules et pour les cloner superficiellement, passer aussi --shallow-submodules .

Par exemple :

git clone --depth 1 --recurse-submodules --shallow-submodules https://github.com/user/repo.git

91 votes

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

15 votes

Depuis commettre 82fba2b dans git 1.9, ces limitations n'existent plus.

0 votes

@charles Je l'ai testé avec succès contre HTTP avec git 1.9.1 et plus.

90voto

Jakub Narębski Points 87537

Solution alternative à la réalisation d'un clone peu profond ( git clone --depth=1 <URL> ) serait, si le côté distant le supporte, d'utiliser --remote option de archive git :

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

Ou, si le référentiel distant en question peut être parcouru à l'aide d'une méthode interface internet comme gitweb ou GitHub, il y a de fortes chances qu'il dispose de la fonction "snapshot", et que vous puissiez télécharger la dernière version (sans informations sur les versions) depuis l'interface web.

4 votes

Cette solution ne répondra cependant pas à cette exigence : "Je veux pouvoir mettre à jour les nouvelles révisions du projet distant". Puisqu'elle télécharge essentiellement l'archive, elle ne sera pas en mesure d'avancer rapidement un commit ou deux. "Shallow clone" permet cela. Néanmoins, je suppose que cette solution a ses cas d'utilisation, donc elle mérite d'être mentionnée.

31voto

Ces jours-ci, les clones peu profonds sont déconseillés dans la plupart des cas .

Alors que, pour le cas d'utilisation que vous mentionnez (télécharger la dernière version et ne plus y toucher), git clone --depth=1 fonctionne, dans le cas plus général, cela peut créer des problèmes. Par exemple, si vous voulez garder votre clone à jour avec upstream, git fetch est beaucoup plus cher sur un clone peu profond.

Si ce que vous voulez, c'est télécharger moins de données, les clones partiels sont préférables dans le cas général :

git clone --filter=tree:0 <url>

Ceci téléchargera toujours l'historique des commits, mais ne téléchargera pas les arbres de fichiers et le contenu des fichiers pour les commits précédents. Les extractions vers les commits amont seront toujours bon marché.

9 votes

Bonne information ! Il convient de mentionner que l'auteur de l'article en lien déclare qu'il " recommande fortement que les développeurs n'utilisent pas de clones sans arbre dans leur travail quotidien". A la place, utilisez des clones blobless : git clone --filter=blob:none <url>

8voto

syedrakib Points 1197
git clone --depth=1 <remote_repo_URL>

tiré d'un comment par iDev247 dans cette question

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X