Så jeg tilføjede en mappe til min .gitignore-fil.
Når jeg laver en git status
fortæller den mig
# On branch latest
nothing to commit (working directory clean)
Men når jeg forsøger at ændre grene, 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
Sådan ser min .gitignore-fil ud:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Hvordan får jeg det til at fungere, så jeg kan skifte gren uden at slette disse filer?
Hvis jeg foretager en ændring, vil det så påvirke disse filer? Med andre ord, hvis jeg kom tilbage til denne gren bagefter, ville alt være perfekt som op til min seneste commit?
Jeg ønsker ikke at miste disse filer, jeg ønsker bare ikke, at de skal spores.
Jeg ramte også denne besked. I mit tilfælde ønskede jeg ikke at beholde filerne, så dette fungerede for mig:
git clean -d -f .
git clean -d -f ""
Hvis du også ønsker at fjerne filer, der ignoreres af git, skal du udføre følgende kommando.
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
betyder, at ignorerede filer også fjernes samt filer, som Git ikke kender.
-d
betyder, at ikke-sporede mapper fjernes ud over ikke-sporede filer.
-f
er påkrævet for at tvinge den til at køre.
Det ser ud som om, du ønsker at filerne skal ignoreres, men de er allerede blevet commited. .gitignore har ingen effekt på filer, der allerede er i repo'en, så de skal fjernes med git rm --cached
. --cached
forhindrer den i at have nogen effekt på din arbejdskopi, og den vil bare blive markeret som fjernet næste gang du commiterer. Når filerne er fjernet fra repo'en, vil .gitignore forhindre dem i at blive tilføjet igen.
Men du har et andet problem med din .gitignore, du bruger overdrevent mange wildcards, og det får den til at matche mindre, end du forventer, at den skal. Lad os i stedet ændre .gitignore og prøve dette.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Git fortæller dig, at det ønsker at oprette filer (med navnet public/system/images/9/...
osv.), men du har allerede eksisterende filer i den mappe, som ikke' er sporet af Git. Måske har en anden tilføjet disse filer til Git-repositoriet, og det er første gang, du skifter til denne gren?
Der er sandsynligvis en grund til, at disse filer er i din develop
-gren, men ikke i din nuværende gren. Du skal måske spørge dine samarbejdspartnere om hvorfor.
Hvordan får jeg det til at virke, så jeg kan skifte gren uden at slette disse filer?
Du kan ikke gøre det uden at få filerne til at forsvinde på en eller anden måde. Du kunne omdøbe public
til my_public
eller noget andet for nu.
hvis jeg kom tilbage til denne gren bagefter ville alt være perfekt som indtil mit seneste commit?
Hvis du commiterer dine ændringer, vil Git ikke miste dem. Hvis du ikke commit'er dine ændringer, vil Git gøre sit bedste for ikke at overskrive det arbejde, du har udført. Det er det, Git advarer dig om i det første tilfælde her (da du forsøgte at skifte gren).