tutorial - Aplicar gitignore en un repositorio existente que ya está rastreando una gran cantidad de archivos
pattern gitignore (7)
Tengo un proyecto de Visual Studio en mi repositorio. Recientemente agregué un archivo .gitignore en mi proyecto y asumo que eso le dice a Git que ignore los archivos listados en el archivo.
Mi problema es que todos esos archivos ya están siendo rastreados y, por lo que sé, Git no ignorará un archivo que ya fue rastreado antes de agregar una regla a este archivo para ignorarlo.
Se sugirió el uso de: git rm --cached
y git rm --cached
manualmente, pero eso me va a llevar una eternidad git rm --cached
uno por uno.
Pensé en eliminar el repositorio y volver a crearlo, pero esta vez con el archivo .gitignore presente, pero debe haber una mejor manera de hacerlo.
Cree un archivo .gitignore, así que para hacerlo, simplemente cree cualquier archivo .txt en blanco.
Luego, debe cambiar su nombre escribiendo la siguiente línea en el cmd (donde
git.txt
es el nombre del archivo que acaba de crear):rename git.txt .gitignore
Luego, puede abrir el archivo y escribir todos los archivos sin seguimiento que desea ignorar para siempre. Por ejemplo, el mío se parece a esto:
`` `
OS junk files
[Tt]humbs.db
*.DS_Store
#Visual Studio files
*.[Oo]bj
*.user
*.aps
*.pch
*.vspscc
*.vssscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.[Cc]ache
*.ilk
*.log
*.lib
*.sbr
*.sdf
*.pyc
*.xml
ipch/
obj/
[Bb]in
[Dd]ebug*/
[Rr]elease*/
Ankh.NoLoad
#Tooling
_ReSharper*/
*.resharper
[Tt]est[Rr]esult*
#Project files
[Bb]uild/
#Subversion files
.svn
# Office Temp Files
~$*
Hay una colección completa de archivos .gitignore útiles de GitHub
Una vez que tenga esto, debe agregarlo a su repositorio git como cualquier otro archivo, solo tiene que estar en la raíz del repositorio.
Luego en tu terminal tienes que escribir la siguiente línea:
git config --global core.excludesfile ~ / .gitignore_global
Desde el documento oficial:
También puede crear un archivo .gitignore global, que es una lista de reglas para ignorar archivos en cada repositorio Git en su computadora. Por ejemplo, puede crear el archivo en ~ / .gitignore_global y agregarle algunas reglas.
Terminal abierta. Ejecute el siguiente comando en su terminal: git config --global core.excludesfile ~ / .gitignore_global
Si el repositorio ya existe, debe ejecutar estos comandos:
git rm -r --cached .
git add .
git commit -m ".gitignore is now working"
Si el paso 2 no funciona, debe escribir la ruta de los archivos que desea agregar.
Como se especifica here puede actualizar el índice:
git update-index --assume-unchanged /path/to/file
Al hacer esto, los archivos no se mostrarán en git status
o git diff
.
Para comenzar a rastrear los archivos nuevamente puedes ejecutar:
git update-index --no-assume-unchanged /path/to/file
Creo que esta es una manera fácil de agregar un archivo .gitignore a un repositorio existente.
Requisito previo :
Necesitas un navegador para acceder a tu cuenta github.
Pasos
- Cree un nuevo archivo en su proyecto requerido (existente) y asígnele el nombre .gitignore . Recibirá un mensaje sugerente para las plantillas .gitignore tan pronto como nombre el archivo como .gitignore . Utilice estas plantillas o gitignore.io para generar el contenido de su archivo gitignore .
- Cometer los cambios.
- Ahora clona este repositorio.
¡Que te diviertas!
Esta answer resolvió mi problema:
En primer lugar, cometer todos los cambios pendientes.
Luego ejecuta este comando:
git rm -r --cached .
Esto elimina todo del índice, luego simplemente ejecuta:
git add .
Comprometelo
git commit -m ".gitignore is now working"
Esta es una forma de "desarticular" cualquier archivo que de otra manera se ignoraría bajo el conjunto actual de patrones de exclusión:
(GIT_INDEX_FILE=some-non-existent-file /
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --
Esto deja los archivos en su directorio de trabajo pero los elimina del índice.
El truco utilizado aquí es proporcionar un archivo de índice no existente a git ls-files para que piense que no hay archivos rastreados. El código de shell anterior solicita todos los archivos que se ignorarían si el índice estuviera vacío y luego los elimina del índice real con git rm.
Después de que los archivos hayan sido "sin seguimiento", use el estado de git para verificar que no se eliminó nada importante (si es así, ajuste sus patrones de exclusión y use git reset - ruta para restaurar la entrada del índice eliminado). Luego haz un nuevo commit que deje fuera la "crud".
El "crud" todavía estará en cualquier antiguo compromiso. Puede usar git filter-branch para producir versiones limpias de las confirmaciones antiguas si realmente necesita un historial limpio (nb usando git filter-branch se "reescribirá el historial", por lo que no debe realizarse a la ligera si tiene colaboradores que hayan retirado cualquiera de sus compromisos históricos después de que se introdujo por primera vez la "crud").
Si agregó su .gitignore
demasiado tarde, git continuará rastreando los archivos ya comprometidos independientemente. Para solucionar este problema, siempre puede eliminar todas las instancias en caché de los archivos no deseados.
En primer lugar, para comprobar qué archivos está realizando el seguimiento, puede ejecutar:
git ls-tree --name-only --full-tree -r HEAD
Digamos que encontró archivos no deseados en un directorio como cache/
, por lo que es más seguro apuntar a ese directorio en lugar de a todos sus archivos.
Así que en lugar de:
git rm -r --cached .
Es más seguro apuntar al archivo o directorio no deseado:
git rm -r --cached cache/
Luego procede a añadir todos los cambios,
git add .
y cometer ...
git commit -m ".gitignore is now working"
Referencia: https://amyetheredge.com/code/13.html
Usa git clean
Obtén ayuda en esta carrera
git clean -h
Si desea ver qué sucedería primero, asegúrese de pasar el interruptor -n para una ejecución en seco:
git clean -xn
Para eliminar la basura gitingnored
git clean -xdf
Cuidado: Es posible que esté ignorando los archivos de configuración locales, como database.yml, que también se eliminarán. Úselo bajo su propio riesgo.
Entonces
git add .
git commit -m ".gitignore is now working"
git push