Comment compléter un clone git pour un gros projet sur une connexion instable?

J’essaie de cloner le code LibreOffice, mais pour le moment j’ai une connexion Internet d’environ 300kbps et c’est tout sauf stable. Je peux récupérer la connexion à tout moment, mais le processus de clonage git a déjà cessé de fonctionner, et aucun moyen de le relancer. Y a-t-il un moyen d’avoir un téléchargement de clone git plus résistant aux pannes?

Une des options que je considérais être de télécharger le répertoire .git de quelqu’un d’autre, mais cela dépend trop des autres et ne semble pas être la meilleure solution possible pour moi.

Je ne pense pas que ce soit prêt pour le moment. Il y a une ancienne page GSoC qui prévoit d’implémenter votre fonctionnalité désirée. Mon meilleur pari est, comme vous l’avez suggéré, de le télécharger en tant que répertoire. Je suppose que vous pouvez reprendre les téléchargements sur d’autres protocoles.

Clone de redémarrage

Lors du clonage d’un grand référentiel (tel que KDE, Open Office, kernel Linux), il n’existe actuellement aucun moyen de redémarrer un clone interrompu. Un utilisateur à la fin d’un petit canal peut prendre un temps considérable pour télécharger les données, et si le clone est interrompu au milieu, l’utilisateur doit recommencer depuis le début et réessayer. Pour certains utilisateurs, il peut être impossible de cloner un grand référentiel.

Objectif: Autoriser git-clone à reprendre automatiquement un téléchargement précédemment échoué via le protocole git: // natif. Langue: C Mentor: Shawn Pearce Proposé par: Shawn Pearce sur gmane


Mettre à jour

Avec la suggestion de clonage superficiel ( git clone --depth=1 ) dans l’une des autres réponses, il peut être utile que quelqu’un puisse créer un repository nu pour vous, si vous pouvez communiquer avec le fournisseur. Vous pouvez facilement convertir le référentiel dénudé en un référentiel complet. Lisez également les commentaires de cette réponse car un clone superficiel peut ne pas toujours aider.

Deux solutions (ou plutôt des solutions de rechange ) qui viennent à l’esprit sont:

  • Utilisez le clone peu profond, c’est-à-dire le clone de git clone --depth=1 , puis approfondissez ce clone en utilisant git fetch --depth=N , avec N croissant. Vous pouvez utiliser git fetch --unshallow (depuis 1.8.0.3) pour télécharger toutes les révisions restantes.

  • Demandez à quelqu’un de se regrouper avec une version étiquetée (voir la page de manuel git-bundle (1) ). Le bundle lui-même est un fichier ordinaire, que vous pouvez télécharger via HTTP / FTP avec support de CV, via BitTorrent, via rsync, etc. Vous pouvez créer un clone à partir d’un bundle, corriger la configuration et effectuer d’autres recherches depuis le repository officiel .

Cette méthode utilise un serveur tiers.

D’abord, faites git clone --bare , puis rsync -v -P -e ssh user@host:repo.git . Vous pouvez utiliser msys sous Windows.

Vous pouvez “télécharger le répertoire .git de quelqu’un d’autre”, mais avec quelqu’un d’autre étant le repository officiel lui-même. Les référentiels LibreOffice sont disponibles via http, par exemple leur build.git est à http://anongit.freedesktop.org/git/libreoffice/build.git/ (voir http://cgit.freedesktop.org/libreoffice/ liste complète, l’URL http se trouve en bas de la page de chaque référentiel).

Ce que vous voyez sur ces URL http n’est rien de plus qu’un répertoire .git (en fait un référentiel «nu», qui n’a que ce que vous trouverez dans le répertoire .git ). C’est le même répertoire que le serveur pour le protocole git:// ( git daemon ) lirait. Si vous faites une copie de ces répertoires avec un téléchargeur Web (par exemple, wget -m -np ), vous pouvez cloner à partir de votre copie et cela fonctionnera aussi bien que si vous aviez cloné directement depuis le référentiel http.

Ainsi, ce que vous pouvez faire, c’est: pour chaque référentiel, obtenez-en une copie avec votre téléchargeur Web préféré (qui traitera de tous les problèmes liés à la reprise des téléchargements interrompus) et clonez à partir de cette copie. Lorsque vous souhaitez effectuer la mise à jour, utilisez à nouveau votre téléchargeur Web préféré pour mettre à jour votre copie et en extraire cette copie. Vos clones et vos mises à jour sont désormais aussi résistants aux mauvaises connexions que votre téléchargeur Web préféré.

” Ne jamais sous-estimer la bande passante d’un pigeon porteur et d’un paquet de cartes SD ” serait la forme moderne de cette réponse. Tar it up, simple vieux cp -a it, peu importe, et envoyer le tout. Trouvez quelqu’un prêt à prendre deux minutes de son temps pour déposer une clé USB dans un SASE. Trouvez un contact, là, ils pourraient même le faire pour vous.

Si vous avez access à un serveur tiers, vous pouvez le cloner puis le copier.

 git clone --depth   --branch  --single-branch 

Cette commande m’aide (Merci à Nicola Paolucci )

par exemple

 git clone --depth 1 https://github.com/gokhanmoral/siyahkernel3 --branch ics --single-branch 

git clone dans ses composants et utilisons git reset pour empêcher le téléchargement de fichiers.

Lorsque git clone s’exécute, les premières choses qu’il fait sont équivalentes à

 git init git remote add origin  git fetch origin  

Si vous exécutez les étapes ci-dessus manuellement et en supposant qu’elles ont été exécutées correctement, vous pouvez maintenant exécuter les opérations suivantes autant de fois que nécessaire:

 git reset --hard origin/ 

Notez qu’il va extraire tous les fichiers à chaque exécution, mais vous n’aurez pas à re-télécharger les fichiers , ce qui peut vous faire économiser beaucoup de temps.

Utilisez CNTRL Z pour arrêter le clonage. Ne fermez pas le terminal, mettez le système / ordinateur portable en veille prolongée et continuez ensuite avec la commande fg. J’étais confronté au même problème aujourd’hui en essayant de cloner un repo frm github. Cela a été un gain de temps pour moi.

Ce problème m’a mordu aussi. Dans mon cas, il y a un contournement. Il peut ou non s’appliquer dans votre cas.

J’utilise parfois un téléphone portable pour lancer des opérations git sur un système distant. Si ma connexion Wi-Fi est interrompue, la session se termine et git supprime toute l’opération de clonage sans récupération. Mais comme la connexion Internet de mon système distant au git master est solide, le clone ne doit pas s’arrêter. Tout ce dont j’ai besoin est le bon sens pour détacher le clone de la session du terminal. Cela peut être fait en utilisant screen / tmux ou nohup / daemon. C’est donc un dysfonctionnement du liveware dans mon cas.

S’appuyant sur les réponses basées sur le clone / la profondeur – quelques lignes de bash font cela facilement …

git clone --depth=1 [email protected]:/var/git/whatever.git cd for m in `seq 1 100`;do git fetch --depth=$m;done

Vous pouvez essayer d’utiliser mercurial avec l’extension hg-git.

Si cela ne fonctionne pas, vous pouvez utiliser git fetch pour ne récupérer que des parties d’un repository git distant (vous pouvez le récupérer dans un référentiel git vide, il n’est pas nécessaire de le créer avec clone). Mais vous pouvez corriger la configuration de la twig (= créer des twigs de suivi locales et distantes) lorsque vous utilisez cette approche.

Utilisez un proxy git, tel que ngitcached ou git-proxy .

Si nous supposons que les serveurs ont une bonne bande passante (et que vous avez un serveur), une autre réponse consiste à:

  1. créez votre propre serveur à l’aide de Git Wrapper côté serveur
  2. clonez-le sur votre serveur
  3. Zip-le en utilisant l’ archiveur Zip côté serveur
  4. téléchargez-le depuis et avec le support de reprise côté serveur

mais cela ne fonctionne qu’avec une expérience de développement Web très basique;) et vous avez également besoin de git.exe dans votre serveur.