.gitignore og "Følgende usporede arbeidstrefiler vil bli overskrevet av checkout"

Så jeg la til en mappe i .gitignore-filen min.

Når jeg gjør en git status det forteller meg

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

Men når jeg prøver å endre grener, får jeg følgende:

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

Slik ser .gitignore-filen min ut:

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

Hvordan får jeg dette til å fungere slik at jeg kan bytte gren uten å slette disse filene?

Hvis jeg gjør en endring, vil det påvirke disse filene? Med andre ord, hvis jeg kom tilbake til denne grenen etterpå, ville alt være perfekt som opp til min siste commit?

Jeg vil ikke miste disse filene, jeg vil bare ikke at de skal spores.

**ADVARSEL: det vil slette filer som ikke er sporet, så det er ikke et godt svar på spørsmålet som stilles.

Jeg traff denne meldingen også. I mitt tilfelle ønsket jeg ikke å beholde filene, så dette fungerte for meg:

git 2.11 og nyere

git clean  -d  -f .

older git

git clean  -d  -f ""

Hvis du også vil fjerne filer som ignoreres av git, kjører du følgende kommando.

VÆR ADVART!!! DETTE ØDELEGGER MEST SANNSYNLIG PROSJEKTET DITT, BRUK BARE HVIS DU VET 100% HVA DU GJØR

git 2.11 og nyere

git clean  -d  -fx .

older git

git clean  -d  -fx ""

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

  • -x betyr at ignorerte filer også fjernes i tillegg til filer som er ukjente for git.

  • -d betyr at ikke-sporede kataloger fjernes i tillegg til ikke-sporede filer.

  • -f er nødvendig for å tvinge den til å kjøre.

Kommentarer (28)
Løsning

Det virker som om du vil at filene skal ignoreres, men de har allerede blitt overlevert. .gitignore har ingen effekt på filer som allerede er i repoen, så de må fjernes med git rm --cached. --cached vil forhindre at den har noen effekt på arbeidskopien din, og den vil bare merkes som fjernet neste gang du overfører. Etter at filene er fjernet fra repoen, vil .gitignore forhindre at de blir lagt til igjen.

Men du har et annet problem med .gitignore, du bruker for mye jokertegn, og det fører til at det samsvarer mindre enn du forventer at det skal. La oss i stedet endre .gitignore og prøve dette.

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

Git forteller deg at det ønsker å opprette filer (med navnet public/system/images/9/... etc), men du har allerede eksisterende filer i den katalogen som ikke spores av Git. Kanskje noen andre har lagt til disse filene i Git-repositoriet, og dette er første gang du har byttet til den grenen?

Det er sannsynligvis en grunn til at disse filene er i develop-grenen din, men ikke i din nåværende gren. Du må kanskje spørre samarbeidspartnerne dine hvorfor det er slik.

*Hvordan får jeg dette til å fungere slik at jeg kan bytte gren uten å slette disse filene?

Du kan ikke gjøre det uten å få filene til å forsvinne på en eller annen måte. Du kan omdøpe public til my_public eller noe sånt inntil videre.

*hvis jeg kom tilbake til denne grenen etterpå, ville alt være perfekt som opp til min siste commit?

Hvis du kommitterer endringene dine, vil ikke Git miste dem. Hvis du ikke kommitterer endringene dine, vil Git prøve veldig hardt ikke å overskrive arbeidet du har gjort. Det er det Git advarer deg om i første omgang her (når du prøvde å bytte gren).

Kommentarer (2)