Preto som do súboru .gitignore pridal priečinok.
Keď vykonám git status
, napíše mi to
# On branch latest
nothing to commit (working directory clean)
Keď sa však pokúsim zmeniť vetvy, dostanem nasledovné:
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
Takto vyzerá môj súbor .gitignore:
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*
Ako to mám urobiť, aby som mohol prepínať vetvy bez toho, aby som tieto súbory vymazal?
Ak urobím zmenu, ovplyvní to tieto súbory? Inými slovami, ak by som sa potom vrátil do tejto vetvy, bolo by všetko perfektné ako do mojej poslednej revízie?
Nechcem o tie súbory prísť, len ich nechcem sledovať.
Narazil som aj na túto správu. V mojom prípade som nechcel'zachovať súbory, takže mi to fungovalo:
git clean -d -f .
git clean -d -f ""
Ak chcete odstrániť aj súbory ignorované systémom git, vykonajte nasledujúci príkaz.
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
znamená, že sa odstránia aj ignorované súbory, ako aj súbory neznáme pre git.
-d
znamená, že okrem nesledovaných súborov sa odstránia aj nesledované adresáre.
-f
je potrebné na vynútenie spustenia.
Zdá sa, že chcete, aby sa súbory ignorovali, ale už boli odovzdané. .gitignore nemá žiadny účinok na súbory, ktoré sú už v repozitári, takže ich treba odstrániť pomocou git rm --cached
. Príkaz --cached
zabráni tomu, aby mal nejaký vplyv na vašu pracovnú kópiu a pri ďalšom odovzdaní sa len označí ako odstránený. Po odstránení súborov z repozitára potom príkaz .gitignore zabráni ich opätovnému pridaniu.
Ale máte iný problém s vaším .gitignore, nadmerne používate zástupné znaky a to spôsobuje, že sa zhoduje menej, ako očakávate. Namiesto toho zmeňte .gitignore a skúste toto.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Git vám hovorí, že chce vytvoriť súbory (s názvom public/system/images/9/...
atď.), ale vy už máte v tomto adresári existujúce súbory, ktoré Git nesleduje. Možno tieto súbory do úložiska Git pridal niekto iný a vy ste sa prvýkrát prepli do tejto vetvy?
Pravdepodobne existuje dôvod, prečo sú tieto súbory vo vašej vetve develop
, ale nie vo vašej aktuálnej vetve. Možno sa budete musieť opýtať svojich spolupracovníkov, prečo je to tak.
*ako to mám urobiť, aby som mohol prepínať vetvy bez toho, aby som tie súbory vymazal?
Nemôžete to'urobiť bez toho, aby súbory nejakým spôsobom zmizli. Mohol by si zatiaľ premenovať public
na my_public
alebo niečo podobné.
ak by som sa potom vrátil do tejto vetvy, bolo by všetko perfektné ako do mojej poslednej revízie?
Ak odovzdáte svoje zmeny, Git ich nestratí. Ak svoje zmeny neodovzdáte, Git sa bude veľmi snažiť neprijať prácu, ktorú ste vykonali. To je to, pred čím vás Git varuje v prvom prípade (keď ste sa pokúšali prepnúť vetvy).