¿Por qué Google Drive borra mis files de Git?

Utilizo un repository local de Git (sin versión remota) para mis proyectos personales. Todo se sincroniza con Google Drive, incluidos los files y directorys de Git.

Ayer noté que dos classs habían desaparecido de mi copy de trabajo. Usé el pago de Git para recuperarlos. Hoy desaparecieron tres classs (files) y mi repository de Git estaba dañado, por lo que el git status decía que no había ningún repository allí. Noté que Google Drive sincronizaba unos 30,000 files, en su mayoría eliminando files de ese directory. Hice una pausa y revisé mi Papelera de reciclaje, donde encontré un montón de files de Git. Restaurarlos devolvió mi repository de Git, que solía restablecer por completo a HEAD y recuperar las classs / files perdidos.

¿Alguien ha tenido esta experiencia con los repositorys Git locales sincronizándose con el almacenamiento en la nube y ha encontrado una solución? No entiendo por qué Google Drive debería decidir purgar mis files, especialmente los files de Git.

Nunca debe sincronizar git o cualquier otro repository dvcs usando cualquiera de estas herramientas de synchronization.

Esto incluye git, mercurial, fósil, bazar, etc.

Para las herramientas de synchronization, esto incluye Dropbox, Google Drive, OneDrive, Jottacloud, etc.

¿Por qué?

Debido a que estas herramientas no consideran el repository como una unidad, consideran los files individuales dentro file por file.

Aquí hay un ejemplo de cómo puede estropear fácilmente sus repositorys:

  1. En una computadora, usted comete un nuevo set de cambios
  2. Luego pasas a otra computadora
  3. Antes o mientras esto ha sincronizado completamente sus cambios, comienza a hacer commits u otras operaciones
  4. Luego la synchronization entra en acción y en algunos casos se generarán conflictos

Cómo se manejan los conflictos varía, pero para algunos de ellos se crea un file adicional con un nombre de file "-conflict". Git o cualquier otra herramienta no mirará este file conflictivo. Si se cambiaron los nombres de ambos files, ahora ha dañado su repository.

La mayor fuente de problemas que podría crear este tipo de situación es cuando se mezclan modificaciones hechas en computadoras separadas. Se crearán files conflictivos, pero dependiendo del order de las cosas, es posible que tenga 4 files que hayan cambiado en una computadora y luego los mismos 4 files cambiados en otra, sin embargo, debido a la synchronization, orderamiento y conflictos, terminará con 2 de ellos desde la primera computadora y los otros 2 desde la otra computadora. La unidad de estas modificaciones pertenecientes se ha perdido.

Tenga en count que los conflictos aquí no deberían popup en los objects git , ya que deben tener un nombre único (SHA1) y solo deben agregarse, pero cualquiera de los files de mantenimiento que realizan un seguimiento de los pointers de bifurcación puede entrar fácilmente en conflicto.

Este tipo de corrupción podría corregirse después del hecho, pero podría ser difícil y mucho trabajo y muy probablemente implicaría un buen conocimiento práctico de las estructuras de datos internas de Git.

Exactamente por qué experimentó lo que experimentó, y por qué esos files fueron eliminados es casi imposible de responder.

Sin embargo, hay una solución muy fácil para todo esto.

Deje de usar Google Drive para sincronizar su repository y regístrese para get una count gratuita de bitbucket . Lleve su repository a un proyecto / repository privado en la nube y simplemente use las operaciones normales de extracción y extracción entre sus computadoras.

La respuesta elegida arriba es correcta en cuanto a que es algo arriesgado e incorrecto de hacer en general. Sin embargo, en la práctica, si estamos hablando de una copy de trabajo que solo una persona está usando puede ser útil en algunas situaciones. A veces pongo una copy de trabajo de un proyecto en Google Drive cuando estoy yendo y viniendo entre mi computadora de escritorio y portátil y experimentando mucho. Todavía termino presionando cualquier cambio en el repository real , que no está en Google Drive, así que no hay mucho peligro de perder algo más que un poco de time si tengo un conflicto y eso no me ha sucedido en absoluto. .

Por cierto, puede acceder a un repository git en cualquier máquina a la que tenga acceso a través de ssh. No tiene que configurar un server de git o realizar ninguna configuration especial. Simplemente clone el repository sobre ssh, por ejemplo, git clone mymachine:/path/to/repo y los siguientes empujes y tirados funcionarán como se esperaba.

    Intereting Posts