Quería transferir muchos repositorios de git desde mi antigua máquina con Windows 7 (git 2.6.3.windows.1) a la nueva en Ubuntu 16.04 (git 2.7.4). Como no todos tenían repositorios remotos, decidí simplemente copiarlos. Esto debería funcionar. Sin embargo, todos los archivos rastreados en todos los repositorios dejaron de estar listos. En realidad, es posible que algunos de ellos no estuvieran comprometidos antes de la transferencia de los repos, pero la mayoría sí lo estaban.
Si busco diff
el archivo que se confirmó antes de transferir el repositorio con un comando:
$git log -p -1 .gitignore
commit c566830cd3ffdf96556d29aee8dd1dc95d359872
Author: Pavel <[email protected]>
Date: Fri May 13 18:07:25 2016 +0300
Start
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2535fe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+__pycache__
+.idea
+test
devuelve la referencia a la última confirmación donde realmente se confirmó este archivo. La confirmación del ejemplo anterior es la primera en el repositorio.
Entonces, por alguna razón, git se niega a reconocer los archivos comprometidos, pero los vincula a la última confirmación donde realmente se confirmaron.
¿Es el problema de incompatibilidad de diferentes versiones o plataformas de git o algo más? ¿Y cómo solucionar este problema y no frenar los repositorios?
Respuesta1
¿Son estos cambios reales? Me parece que git simplemente se queja de que los atributos de los archivos son diferentes, lo que ciertamente sucederá entre diferentes sistemas operativos (porque Windows y Linux tienen diferentes sistemas de archivos con diferentes metadatos).
¿Qué tal crear un clon "desnudo"?
EN VENTANAS
Vaya a alguna carpeta, por ejemplo:
cd c:\mycode
Clona localmente tu repositorio en esta carpeta usando eldesnudoopción, esto significa que NADA será retirado, solo metadatos:
git clone --bare <path_of_your_repo>
Ahora, comprima la carpeta resultante (p. ej."c:\micódigo\<carpeta>.git") y transferirlo manualmente a Linux.
EN LINUX
En Linux, primero copie la carpeta comprimida de Windows y descomprímala. Ahora, clone en alguna carpeta nueva, por ejemplo:
mkdir ~/mynewcode
cd ~/mynewcode
git clone /<where_you_copied_and_unzipped>/<folder>.git <--- i.e. this is the folder copied/unzipped from Windows
Y ahora puede cambiar el origen si desea desechar la carpeta de Windows descomprimida.
git remote set-url origin <new_origin>
O simplemente elimínelo por completo:
git remote rm origin
Respuesta2
¿Qué tal enviarlos a github y luego clonar el repositorio en tu Ubuntu? (Habría comentado, pero aún no tengo 50 representantes)
Si necesita ayuda con eso, puedo proporcionarle más instrucciones.