Tengo un proyecto en git
. Un día moví todos los archivos del proyecto desde el directorio actual al foo/bar/
en el proyecto. Lo hice usando git mv
. Luego agregué algunos archivos más e hice algunos cambios a los archivos ya existentes.¿Cómo puedo reescribir el historial para que todos los archivos, excepto los que ya he movido, estén en un subdirectorio?
Como resultado, ahora cuando miro el historial de foo/bar/file.c
, solo puedo ver los cambios que hice después de mover el archivo.
Traté de solucionar esto de varias maneras (filter-branch
con filtro de subdirectorio, etc.), pero no sirvió de nada, así que estoy bastante apilado aquí. Apreciaré cualquier ayuda que me puedas dar. Gracias!
@Alexander: Es posible que desee intentar poner el delineador (todo en las comillas simples) en un guión real, con una línea bash shebang. Creo que 'filter-branch' probablemente intente ejecutar esto en' sh', no 'bash'. – Cascabel
Hice algunos progresos. Parece que los paréntesis dobles en la instrucción if estaban causando este error. Los corchetes individuales funcionan mejor, pero aun así no funcionan. El problema es que antes de mover todo a foo/bar/tenía el directorio llamado foo con algo de contenido en el proyecto. Entonces ahora se queja "no se puede mover 'foo' a un subdirectorio de sí mismo,' foo/bar/foo '". –
@Alexander: solo tendrá que ajustar la secuencia de comandos en consecuencia. Algo como: 'si [[! -e foo/bar]]; luego mkdir -p foo/bar; git ls-tree --name-only $ GIT_COMMIT | grep -v^foo $ | xargs -I archivos mv archivos foo/bar; fi' Utiliza grep para filtrar 'foo' de la lista de archivos a mover. Tenga en cuenta que también asumo que el subdirectorio 'bar' nunca existió hasta que movió todo debajo de él. Si ese no es el caso, tendrá que dar cuenta de eso en el guión también. –