Pregunta Los siguientes archivos de árbol de trabajo sin seguimiento se sobrescribirán mediante pago y envío


Así que agregué una carpeta a mi archivo .gitignore.

Una vez que hago un git status me dice

# On branch latest
nothing to commit (working directory clean)

Sin embargo, cuando intento cambiar las ramas, obtengo 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

Esto es lo que mi archivo .gitignore se ve así:

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*

¿Cómo hago esto para que pueda cambiar de rama sin eliminar esos archivos?

Si realizo un cambio, ¿afectará esos archivos? En otras palabras, si volviera a esta rama después, ¿todo sería perfecto como hasta mi último compromiso?

No quiero perder esos archivos, simplemente no los quiero rastreados.


663
2018-02-01 01:39


origen


Respuestas:


Parece que quiere que los archivos se ignoren, pero ya se han confirmado. .gitignore no tiene ningún efecto en los archivos que ya están en el repositorio, por lo que deben eliminarse con git rm --cached. los --cached evitará que tenga algún efecto en su copia de trabajo y solo marcará como eliminada la próxima vez que realice una confirmación. Después de que los archivos se eliminen del repositorio, el .gitignore evitará que se vuelvan a agregar.

Pero tiene otro problema con su .gitignore, está usando excesivamente comodines y está causando que coincida menos de lo que esperaba. En su lugar, cambiemos .gitignore e intentemos esto.

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/

219
2018-02-01 01:59



ADVERTENCIA: eliminará los archivos sin seguimiento, por lo que no es una gran respuesta a la pregunta que se plantea.

Acepto este mensaje también. En mi caso, no quería guardar los archivos, así que esto funcionó para mí:

git 2.11 y más nuevo

git clean  -d  -fx .

git más viejo

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 eliminar directorios no rastreados además de archivos no rastreados.

  • -f es necesario para forzarlo a correr.


814
2017-12-02 20:38



Advertencia: Esto eliminará los archivos locales que no están indexados

Solo oblígalo: git checkout -f another-branch


471
2018-01-11 17:40



Si está en OS X, puede deberse a que el nombre de un archivo ha cambiado de mayúscula a ciertos caracteres. Intente configurar la siguiente opción de configuración:

git config core.ignorecase true

109
2018-05-30 17:54



Git te está diciendo que quiere crear archivos (llamado public/system/images/9/... etc.), pero ya tiene archivos existentes en ese directorio que no son rastreado por Git. Tal vez alguien más agregó esos archivos al repositorio de Git, ¿y esta es la primera vez que se cambia a esa rama?

Probablemente haya una razón por la cual esos archivos en su develop rama pero no en su rama actual. Puede que tenga que preguntarle a sus colaboradores por qué es eso.

¿Cómo hago esto para que pueda cambiar de rama sin eliminar esos archivos?

No puedes hacerlo sin hacer desaparecer los archivos de alguna manera. Usted podría renombrar public a my_public o algo por ahora.

Si volviera a esta sucursal después, ¿todo sería perfecto en mi último compromiso?

Si comprometes tus cambios, Git no los perderá. Si no comprometes tus cambios, entonces Git lo intentará muy duro no para sobrescribir el trabajo que has hecho. De eso es de lo que Git te está advirtiendo en primera instancia aquí (cuando trataste de cambiar de rama).


40
2018-02-01 01:47



Hay un comando para esta delicada tarea (eliminar permanentemente los archivos sin seguimiento)

git clean -i

Entonces git pull va a hacer


21
2017-09-21 08:37



Desafortunadamente ni git rm --cached o git clean -d -fx "" lo hizo por mí.

Mi solución terminó siendo empujando mi rama a distancia, la clonación de una nueva operación, a continuación, haciendo mi de mezcla en la nueva operación. Otras personas que acceden al repos tienen que hacer lo mismo.

Moraleja de la historia: use un .gitignore archivo desde el inicio.


11
2018-01-09 05:33



Si quiere resolver rápidamente esta pregunta, puede usar este comando:

git checkout -f dev

8
2018-06-24 07:24