Así que añadí una carpeta a mi archivo .gitignore.
Cuando hago un git status
me dice
# On branch latest
nothing to commit (working directory clean)
Sin embargo, cuando intento cambiar de rama me sale lo siguiente:
My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
public/system/images/9/thumb/red-stripe.jpg
public/system/images/9/original/red-stripe.jpg
public/system/images/8/thumb/red-stripe-red.jpg
public/system/images/8/original/red-stripe-red.jpg
public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
public/system/images/7/thumb/red-stripe-dark.jpg
public/system/images/7/original/red-stripe-dark.jpg
public/system/images/7/original/DSC07833.JPG
public/system/images/6/thumb/red-stripe-bw.jpg
public/system/images/6/original/website-logo.png
public/system/images/6/original/red-stripe-bw.jpg
public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
public/system/images/5/original/logocompv-colored-squares-100px.png
public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/4/thumb/DSC_0001.JPG
public/system/images/4/original/logo.png
public/system/images/4/original/DSC_0001.JPG
public/system/images/4/original/2-up.jpg
public/system/images/3/thumb/logo2.gif
public/system/images/3/original/logo2.gif
public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
public/system/images/3/original/11002000962.jpg
public/system/images/2/thumb/Profile Pic.jpg
public/system/images/2/original/Profile Pic.jpg
public/system/images/2/original/02 Login Screen.jpg
public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting
Este es el aspecto de mi archivo .gitignore:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
¿Cómo puedo hacer que esto funcione para poder cambiar de rama sin borrar esos archivos?
Si hago un cambio, ¿afectará a esos archivos? En otras palabras, si vuelvo a esta rama después, ¿estará todo perfecto como hasta mi último commit?
No quiero perder esos archivos, simplemente no quiero que se rastreen.
Yo también me encontré con este mensaje. En mi caso, no quería conservar los archivos, así que esto me funcionó:
git clean -d -f .
git clean -d -f ""
Si también quieres eliminar los archivos ignorados por git, entonces ejecuta el siguiente comando.
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
significa que los archivos ignorados también se eliminan, así como los archivos desconocidos para git.
-d
significa que se eliminan los directorios no rastreados además de los archivos no rastreados.
-f
es necesario para forzar su ejecución.
Parece que quieres que los archivos sean ignorados pero ya han sido confirmados. .gitignore no tiene efecto sobre los archivos que ya están en el repositorio, por lo que deben ser eliminados con git rm --cached
. El --cached
evitará que tenga ningún efecto en su copia de trabajo y sólo se marcará como eliminado la próxima vez que confirme. Una vez eliminados los archivos del repositorio, el .gitignore impedirá que se vuelvan a añadir.
Pero tienes otro problema con tu .gitignore, estás usando excesivamente los comodines y esto hace que coincida menos de lo que esperas. En lugar de eso, cambie el .gitignore y pruebe esto.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Git te está diciendo que quiere crear archivos (llamados public/system/images/9/...
etc), pero ya tienes archivos existentes en ese directorio que no son rastreados por Git. ¿Quizás alguien más añadió esos archivos al repositorio de Git, y esta es la primera vez que has pasado a esa rama?
Probablemente hay una razón por la que esos archivos están en tu rama develop
pero no en tu rama actual. Puede que tengas que preguntar a tus colaboradores por qué es así.
¿Cómo puedo hacer que esto funcione para poder cambiar de rama sin borrar esos archivos?
No puedes hacerlo sin hacer desaparecer los archivos de alguna manera. Podrías renombrar public
a my_public
o algo así por ahora.
Si vuelvo a esta rama después, ¿todo estará perfecto como hasta mi último commit?
Si confirmas tus cambios, Git no los perderá. Si no confirmas tus cambios, entonces Git intentará con todas sus fuerzas no sobrescribir el trabajo que has hecho. Eso es lo que Git te está advirtiendo en el primer caso aquí (cuando intentaste cambiar de rama).