¿Cómo completar un clon de git para un gran proyecto en una conexión inestable?


Estoy intentando clonar el código base de LibreOffice, pero por el momento tengo una conexión a Internet de unos 300kbps y es todo menos estable. Puedo recuperar la conexión en cualquier momento, pero luego el proceso de clonación de git ya dejó de funcionar, y no hay forma de volver a ejecutarlo. ¿Hay alguna manera de tener una descarga de clones de git más resistente a fallos?

Una opción que consideré es descargar la de otra persona .git directorio, pero que es demasiado dependiente de otros y no me parece la mejor solución posible.

 161
Author: erip, 2010-10-17

15 answers

No creo que esto esté listo todavía. Hay una antigua página de GSoC que planeaba implementar la característica deseada. Mi mejor apuesta es, como sugeriste descargarlo como un directorio. Asumo que eres capaz de reanudar las descargas a través de otros protocolos.

Clon reiniciable

Al clonar un repositorio grande (tal como KDE, Open Office, Linux kernel) actualmente no hay forma de reiniciar un clon interrumpido. Puede tomar tiempo considerable para un usuario en el fin de un pequeño tubo para descargar el datos, y si se interrumpe el clon en el medio, el usuario necesita para empezar de nuevo desde el principio y intentarlo. Para algunos usuarios esto puede hacer imposible clonar un gran repositorio.

Objetivo: Permitir que git-clone automáticamente reanudar una descarga fallida anteriormente sobre el protocolo nativo git://. Idioma: C Mentor: Shawn Pearce Sugerido por: Shawn Pearce on gmane


Actualizar

Junto con la sugerencia de clonación superficial (git clone --depth=1) en una de las otras respuestas, puede ser útil si alguien puede hacer un repositorio desnudo para usted si puede comunicarse con el proveedor. Puede fácilmente convertir el repositorio desnudo en un repositorio completo. También lea los comentarios en esa respuesta, ya que un clon superficial no siempre puede ayudar.

 60
Author: Jungle Hunter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:39

Dos soluciones (o más bien soluciones alternativas) que vienen a la mente son:

  • Use clon superficial es decir, git clone --depth=1, luego profundice este clon usando git fetch --depth=N, con el aumento de N. Puede usar git fetch --unshallow (desde 1.8.0.3) para descargar todas las revisiones restantes.

  • Pida a alguien que agrupe hasta alguna versión etiquetada (vea git-bundle(1) página de manual). El paquete en sí es un archivo ordinario, que puede descargar de cualquier manera, a través de HTTP / FTP con soporte de CV, vía BitTorrent, vía rsync, etc. El puede crear clon desde bundle, arreglar la configuración, y hacer más búsquedas desde el repositorio oficial de LibreOffice.

 99
Author: Jakub Narębski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-22 23:14:22

Este método utiliza un servidor de terceros.

Primero, hacer git clone --bare, entonces rsync -v -P -e ssh user@host:repo.git . Puede utilizar msys en Windows.

 10
Author: Rafal Rusin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-25 10:54:54

Usted puede "descargar de otra persona .git directory", pero con ese alguien más siendo el repositorio oficial en sí. Los repositorios de LibreOffice están disponibles vía http, por ejemplo su build.git está en http://anongit.freedesktop.org/git/libreoffice/build.git / (véase http://cgit.freedesktop.org/libreoffice / para la lista completa, la URL http está en la parte inferior de la página de cada repositorio).

Lo que ves en estas URL http no es más que un directorio .git (en realidad un repositorio "desnudo", que solo tiene lo que encontrarías en el directorio .git). Es el mismo directorio que leería el servidor para el protocolo git:// (git daemon). Si realiza una copia de estos directorios con un descargador web (por ejemplo wget -m -np), puede clonar desde su copia y funcionará tan bien como si hubiera clonado directamente desde el repositorio http.

Entonces, lo que puede hacer es: para cada repositorio, obtenga una copia de él con su descargador web favorito (que se ocupará de todos los problemas con la reanudación de descargas rotas), y clonar a partir de esa copia. Cuando desee actualizar, utilice de nuevo su descargador web favorito para actualizar su copia y extraiga de esa copia. Ahora tus clones y actualizaciones son tan resistentes a las malas conexiones como lo es tu descargador web favorito.

 9
Author: CesarB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-12 21:14:14

"Nunca subestimes el ancho de banda de una paloma mensajera y un paquete de tarjetas SD " sería la forma moderna de esta respuesta. Alquitrán para arriba, simplemente viejo cp -a que, lo que sea, y el correo de la maldita cosa. Encuentra a alguien dispuesto a tomar dos minutos de su tiempo para dejar caer una memoria usb en un SASE. Encuentra un contacto, allí, incluso podrían hacerlo por ti.

 7
Author: jthill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-13 00:44:49

Si tiene acceso a un servidor de terceros, puede clonar allí y luego copiar.

 4
Author: Amber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-17 19:26:37

Vamos a dividir git clone en sus partes componentes, y usar git reset para evitar volver a descargar archivos.

Cuando git clone se ejecuta, las primeras cosas que hace son equivalentes a

git init
git remote add origin <repo_url>
git fetch origin <branch>

Si ejecuta los pasos anteriores manualmente, y asumiendo que se completaron correctamente, ahora puede ejecutar lo siguiente tantas veces como sea necesario:

git reset --hard origin/<branch>

Tenga en cuenta que descargará todos los archivos cada vez que se ejecute, pero no tendrá que volver a descargar archivos, lo que puede ahorrarle un montón de tiempo.

 4
Author: cowlinator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-15 19:47:15

Este problema también me mordió. En mi caso hay una solución. Puede o no aplicarse en su caso.

A veces estoy usando un teléfono móvil para iniciar operaciones git en un sistema remoto. Si mi wi-fi se rompe, por supuesto, la sesión termina y git deja caer toda la operación de clonación sin recuperarse. Pero como la conexión a Internet desde mi sistema remoto al git master es sólida, no hay necesidad de que el clon se detenga. Todo lo que necesito es el sentido común para separar el clon de la terminal sesion. Esto se puede hacer usando screen/tmux o nohup/daemon. Así que es un mal funcionamiento de liveware en mi caso.

 3
Author: Tony Sidaway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-14 16:47:32

Utilice CNTRL Z para detener la clonación. No cierre el terminal ponga el sistema / laptop en hibernación y luego continúe más tarde con el comando fg. Me enfrentaba a este mismo problema hoy mientras intentaba clonar un repositorio frm github. Esto me ahorró tiempo.

 3
Author: Jicksy John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-26 19:17:14
git clone --depth <Number> <repository> --branch <branch name> --single-branch

Este comando me ayuda (Gracias a Nicola Paolucci)

Por ejemplo

git clone --depth 1 https://github.com/gokhanmoral/siyahkernel3 --branch ics  --single-branch
 3
Author: Ahed Eid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-21 14:12:29

Use un proxy git, como ngitcachedo git-proxy.

 1
Author: Amr Mostafa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-31 21:31:19

Construyendo sobre las respuestas basadas en clon/profundidad - unas pocas líneas de bash consigue esto fácilmente...

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

 1
Author: Stephen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-26 16:11:59

Puedes intentar usar mercurial con la extensión hg-git.

Si eso no funciona, puede usar git fetch <commit-id> para obtener solo partes de un repositorio git remoto (puede obtener en un repositorio git vacío, no es necesario crearlo con clon). Pero podría corregir la configuración de la rama (=crear ramas de seguimiento locales y remotas) cuando utilice este enfoque.

 0
Author: Rudi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-18 08:33:40

Si asumimos que los servidores tienen buena banda ancha (y usted tiene un servidor) otra respuesta es:

  1. crea tu propio servidor usando el lado del servidor Git Wrapper ' s
  2. clonarlo en su servidor
  3. Zip usando el Lado del Servidor Zip Archiver's
  4. descárguelo desde y con el lado del servidor Reanudar el soporte

Pero esto solo funciona con una experiencia de desarrollo web muy básica ;) y también necesitas git.exe en tu servidor

 0
Author: Top-Master,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-06 07:26:29

El mismo problema aquí-Tengo una conexión a Internet realmente escamosa con frecuencia no más de 10-15 kb / seg: - P

Para mí la forma wget funcionó muy bien. Vaya al sitio del repositorio donde está el botón verde "clonar o descargar", haga clic en él y copie el enlace de la opción de descarga ZIP.

Luego inserte el enlace al comando wget:
wget-c-m-np https://github.com/your/repository/archive/master.zip

Funciona como un encanto...

 0
Author: X-File,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-02 07:53:53