Reestructuración de files en Git Repository

Tengo un repository de Git con la siguiente estructura de carpetas:

allprojectfiles --otherfolders --source ----projectname ------projectname ---------git initilalized here ---------otherfolders ---------workingonthesefiles(bound to remote) 

¿Puedo reestructurar el proyecto para hacer que Git rastree desde la carpeta allprojectfiles sin perder el historial?

Git sigue treees y blobs, no carpetas

El único seguimiento de carpetas que hace Git es en commit de tree . Entonces, en el caso general, puede mover carpetas libremente y Git simplemente escribirá un nuevo tree en el repository.

Recomiendo usar git mv para organizar estos movimientos de directory en un tree de trabajo que de otro modo estaría limpio. Si no tiene cambios de nivel de file preparados para la confirmación, el historial de Git tratará correctamente su nueva estructura como un movimiento / cambio de nombre, en lugar de una operación de agregar / eliminar.

git no rastrea los nombres de manera explícita. asegúrese de tener una confirmación que no haga más que mover (que será una eliminación + agregar en otra ruta). entonces los commands de git detectarán automáticamente los movimientos, pero a veces (por ejemplo, si dos de los files tienen el mismo contenido, pero lógicamente se puede saber cuál fue renombrado) no podrá rastrear el historial adecuado. No creo que puedas evitar esto sin reescribir el historial.

esto me lleva a una idea: con git filter-branch debería ser posible extraer las carpetas a otra location, es decir, la location "correcta" en el nuevo layout, y luego volver a agregar el rest. Sin embargo, esto reescribirá totalmente tu historia.