Mi repository de Git está en el directory raíz incorrecto. ¿Puedo moverlo? (../ en lugar de ./)

De alguna manera, cuando git init mi último proyecto hace un mes, ejecuté el command en el directory un directory más alto que la raíz de mi proyecto.

Entonces mi repository está en el directory ./project y no en el directory ./project/my-new-project . No sé cómo no me di count antes del problema, pero nunca busqué el directory .git hasta ahora.

¿Hay alguna manera, sin matar a mi proyecto, de mover el repository al directory correcto y luego decirle a git cuál es la nueva base del proyecto? Solo mover el directory no funciona. Git piensa que todos los files han sido eliminados.

Probablemente lo más simple, a less que ya hayas creado un historial que quieras save, sería simplemente eliminar el subdirectory .git y volver a hacer el .git init en el directory correcto.

Si utilizaste git para resolver el problema, cualquier solución necesariamente dejaría atrás muchas inputs de historial "movidas aquí" que no son realmente cambios, pero que arreglaste una falla en el momento de la creación. Mejor solo crearlo bien.

Tuve el problema opuesto: tuve que cambiar la raíz de git al directory principal (de project / src a project) ¡Para mi sorpresa extrema, lo siguiente funcionó!

 src$ mv .git ../ src$ cd .. project$ git add src project$ git commit -a 

git detectó inteligentemente que todos los files nuevos tenían versiones renombradas de los antiguos y no se perdió ningún historial

Puede intentar algo similar … mover la carpeta .git y agregar los files nuevamente antes de confirmar

git filter-branch te permite reescribir el historial de esa manera. La página man de git filter-branch incluso tiene su caso como ejemplo :

Para reescribir el repository para ver si foodir / había sido su raíz de proyecto, y descartar el rest de la historia:

 git filter-branch --subdirectory-filter foodir -- --all 

Es probable que quieras git clone el repository en un nuevo subdirectory antes (¿o después?) De ejecutar git filter-branch . (La clonación antes de filter-branch y la ejecución de la twig de filter en el nuevo clon tendría la ventaja de dejar el .git/ dir original en su lugar como una copy de security en caso de que algo salga mal).

Esto funcionó para mí y mantuvo toda mi historia intacta. Desde la carpeta raíz incorrecta (el padre donde inicializó accidentalmente el repository):

Mueva la carpeta:

 mv .git thecorrectfolder/ 

Reinicializar el repository git:

 cd thecorrectfolder/ git init 

Vuelva a agregar todos los files, confirme y presione:

 git add . git commit -am 'fixing things' git push origin master 

¡Hecho! Búscate una cerveza.

Cuando ingresas el git repo después de reiniciar, obtienes un montón de resultados que se ve así:

 rename {ethanode/coffee => coffee}/app.coffee (100%) 

En otras palabras, todas sus references de la carpeta principal y el cambio de nombre para usar la carpeta correcta.

Git puede recordar files con sus hashes,

Simplemente mueva su .git al directory raíz y diga a git que recuerde todos los cambios de files con --all opción.

 $ mv .git ../ $ cd .. $ git add . --all $ git status // => you can see all the files recognized as renamed 100% $ git commit -m "Moves repo to root directory." 

Use git-mv para mover sus files "hacia arriba" a la location correcta, luego git-rm el directory "mi-nuevo-proyecto".

Vine aquí buscando una forma de mover mi repository a cualquier parte .

En el caso, yo no era el único, esto es lo que hice al final:

https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F "git clone –mirror" da una copy de mi repository y luego le dije que ya no estuviera desnudo, por lo que aparecieron los files en esa nueva carpeta. (Luego verificó si los files y el logging habían aparecido). Mantuvo el repository anterior por un time, por si acaso …

De esa forma pude mover mi repository sin perder historial.

Los mejores saludos, Dinah

Después de haber pasado por el mismo problema, mi solución final fue:

  1. Mueva la carpeta .git a donde tenía que estar.
  2. Cambie el directory a la carpeta que acabo de mover .git a
  3. Restablece el contenido de la carpeta a lo que git piensa que debería ser: git reset --hard HEAD
  4. Verifique que los contenidos coincidan con lo que deberían ser con kdiff3 u otra herramienta de comparación
  5. Elimine los files ahora sin versión en la location anterior.

Funcionó como magia sin impacto en la historia. – NB Si ha realizado algunos cambios, asegúrese de confirmarlos antes de mover el directory .git.

Aquí hay dos forms:

  1. cd TheWrongDirectory rm -rf .git

  2. simplemente BORRE la carpeta .git y cd al directory correcto.