Tengo un repositorio de git que se usa solo para contener gráficos y archivos de sonido utilizados en varios proyectos. Todos están en un directorio sin subdirectorios. Ahora acabo de crear un script para copiar estos activos desde otro directorio estructurado, con varios niveles de subdirectorios.
Ahora solo quiero que git haga un seguimiento de la estructura de archivos jerárquica (fuente), y el directorio plano (destino) (con todos los archivos en una pila) debe ignorarse.
Agregué el directorio de destino a .gitignore, pero git todavía sigue los cambios en él. Pensé que si confirmaba la eliminación del archivo anterior en el directorio de destino, git podría dejar de rastrear los nuevos contenidos (copiados por el script), pero no lo hace.
¿Cómo hago que git se olvide del directorio de destino?
fuente
Respuestas:
Este comando hará que git elimine su directorio y todos los archivos debajo de él sin eliminarlos:
git rm -r --cached <your directory>
La
-r
opción provoca la eliminación de todos los archivos de su directorio.La
--cached
opción hace que los archivos solo se eliminen del índice de git, no su copia de trabajo. Por defectogit rm <file>
eliminaría<file>
.fuente
add -f
o ser su situación. Como dijo Gordon, esto evita que borre accidentalmente un montón de archivos: el repositorio es la lista maestra, no el gitignore. Esto también le permite rastrear manualmente algunas cosas que de otro modo serían ignoradas por una regla comodín, algo que he encontrado útil.-r
opción no es "provoca la eliminación de todos los archivos de su directorio" sino que se repite a través de los subdirectorios.Si necesita tener un archivo rastreado (registrado), pero no desea rastrear más cambios de un archivo mientras lo mantiene en su repositorio local, así como en el repositorio remoto, esto puede hacerse con:
Después de eso, cualquier cambio en este archivo ya no aparecerá en
git status
.fuente
git update-index --no-assume-unchanged dirname/**/*
Para un subdirectorio llamado
blah/
agregado a git, parece que ambos de los siguientes funcionan para ignorar los archivos nuevosblah/
. Añadido a .gitignore:fuente
TL; DR para limpiar su repositorio git y asegurarse de que TODOS sus elementos ignorados sean ignorados:
Nota: no necesita especificar un directorio, de esta manera está limpiando todo el repositorio remoto .
Para ir más lejos lee esto
fuente
No estoy seguro si esto cuenta o me hace una mala persona, pero aquí va.
*Generated*
al archivo raíz .gitignoredir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}
Me siento un poco mal conmigo mismo ... pero de hecho funciona.
fuente
Ok, parece que primero debe hacer un check-in con el directorio completamente vacío (ni archivos antiguos ni nuevos), y cualquier archivo agregado a partir de entonces será ignorado. Si elimina los archivos antiguos y los nuevos antes de confirmar, los nuevos se agregarán al repositorio, aunque deben ignorarse.
Al menos, esto funcionó para mí en esta situación. Sería genial si alguien pudiera proporcionar más información sobre lo que está sucediendo.
fuente