.gitignore e "I seguenti file dell'albero di lavoro non tracciati verrebbero sovrascritti da checkout"

Così ho aggiunto una cartella al mio file .gitignore.

Quando faccio un git status mi dice

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

Tuttavia, quando provo a cambiare ramo ottengo quanto segue:

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

Questo è l'aspetto del mio file .gitignore:

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

Come faccio a farlo funzionare in modo da poter cambiare ramo senza cancellare quei file?

Se faccio un cambiamento, influenzerà quei file? In altre parole, se tornassi in questo ramo dopo sarebbe tutto perfetto fino al mio ultimo commit?

Non voglio perdere quei file, solo che non voglio che siano tracciati.

AVVERTENZA: cancellerà i file non tracciati, quindi non è una grande risposta alla domanda che viene posta.

Anche io ho trovato questo messaggio. Nel mio caso, non volevo tenere i file, quindi questo ha funzionato per me:

git 2.11 e successivi

git clean  -d  -f .

older git

git clean  -d  -f ""

Se vuoi anche rimuovere i file ignorati da git, esegui il seguente comando.

ATTENZIONE!!! QUESTO MOLTO PROBABILMENTE DISTRUGGE IL TUO PROGETTO, USALO SOLO SE SAI AL 100% COSA STAI FACENDO

git 2.11 e successivi

git clean  -d  -fx .

older git

git clean  -d  -fx ""

http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x significa che anche i file ignorati vengono rimossi così come i file sconosciuti a git.

  • -d significa rimuovere le directory non tracciate oltre ai file non tracciati.

  • -f è richiesto per forzare l'esecuzione.

Commentari (28)
Soluzione

Sembra che tu voglia che i file vengano ignorati ma sono già stati committati. .gitignore non ha effetto sui file che sono già nel repo, quindi devono essere rimossi con git rm --cached. Il --cached gli impedirà di avere alcun effetto sulla tua copia di lavoro e lo segnerà come rimosso al prossimo commit. Dopo che i file sono stati rimossi dal repo, il .gitignore impedirà che vengano aggiunti di nuovo.

Ma hai un altro problema con il tuo .gitignore, stai usando eccessivamente i caratteri jolly e questo lo fa corrispondere meno di quanto ti aspetti. Invece cambiamo il .gitignore e proviamo questo.

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Commentari (7)

Git ti sta dicendo che vuole creare dei file (chiamati public/system/images/9/... ecc), ma tu hai già dei file esistenti in quella directory che non' sono tracciati da Git. Forse qualcun altro ha aggiunto quei file al repository Git, e questa è la prima volta che sei passato a quel ramo?

Probabilmente c'è una ragione per cui quei file sono nel tuo ramo develop ma non nel tuo ramo attuale. Potresti dover chiedere ai tuoi collaboratori il motivo.

*come faccio a farlo funzionare in modo da poter cambiare ramo senza cancellare quei file?

Non puoi farlo senza far sparire i file in qualche modo. Potresti rinominare public in my_public o qualcosa del genere per ora.

Se tornassi in questo ramo dopo, tutto sarebbe perfetto come fino al mio ultimo commit?

Se fai il commit delle tue modifiche, Git non le perderà. Se non fai il commit delle tue modifiche, allora Git cercherà in tutti i modi di non sovrascrivere il lavoro che hai fatto. Questo è ciò di cui Git ti avverte nel primo caso qui (quando hai provato a cambiare ramo).

Commentari (2)