.gitignore a "Následující nesledované soubory pracovního stromu by byly přepsány checkoutem"

Proto jsem do souboru .gitignore přidal složku.

Jakmile provedu git status, píše mi to.

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

Když se však pokusím změnit větve, zobrazí se mi následující hlášení:

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 vypadá můj soubor .gitignore:

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

Jak to mám zprovoznit, abych mohl přepínat větve bez mazání těchto souborů?

Pokud provedu změnu, ovlivní to tyto soubory? Jinými slovy, kdybych se poté vrátil do této větve, bylo by vše perfektní jako do mé poslední revize?

Nechci o ty soubory přijít, jen je nechci sledovat.

UPOZORNĚNÍ: odstraní nesledované soubory, takže to není dobrá odpověď na položenou otázku.

Na tuto zprávu jsem narazil také. V mém případě jsem soubory nechtěl'zachovat, takže mi to fungovalo:

git 2.11 a novější

git clean  -d  -f .

starší git

git clean  -d  -f ""

Pokud chcete také odstranit soubory, které git ignoruje, spusťte následující příkaz.

VARUJEME VÁS!!! TENTO PŘÍKAZ S NEJVĚTŠÍ PRAVDĚPODOBNOSTÍ ZNIČÍ VÁŠ PROJEKT, POUŽÍVEJTE JEJ POUZE V PŘÍPADĚ, ŽE NA 100% VÍTE, CO DĚLÁTE

git 2.11 a novější

git clean  -d  -fx .

starší git

git clean  -d  -fx ""

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

  • -x znamená, že se odstraní také ignorované soubory a soubory, které git nezná.

  • -d znamená, že kromě nesledovaných souborů se odstraní i nesledované adresáře.

  • -f je vyžadováno pro vynucení spuštění.

Komentáře (28)
Řešení

Vypadá to, že chcete soubory ignorovat, ale již byly odevzdány. .gitignore nemá žádný vliv na soubory, které jsou již v repozitáři, takže je třeba je odstranit pomocí git rm --cached. Příkaz --cached zabrání tomu, aby měl nějaký vliv na pracovní kopii, a při příštím odevzdání se pouze označí jako odstraněný. Po odstranění souborů z repozitáře pak příkaz .gitignore zabrání jejich opětovnému přidání.

Ale máte jiný problém s vaším .gitignore, nadměrně používáte zástupné znaky a to způsobuje, že odpovídá méně, než očekáváte. Místo toho změňme .gitignore a zkusme toto.

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Komentáře (7)

Git vám říká, že chce vytvořit soubory (pojmenované public/system/images/9/... atd.), ale v tomto adresáři již máte existující soubory, které Git nesleduje. Možná tyto soubory do úložiště Git přidal někdo jiný a vy jste se na tuto větev přepnuli poprvé?

Pravděpodobně existuje nějaký důvod, proč jsou tyto soubory ve větvi develop, ale ne ve vaší aktuální větvi. Možná se budete muset zeptat svých spolupracovníků, proč tomu tak je.

*jak to mám zprovoznit, abych mohl přepínat větve, aniž bych ty soubory smazal?

Nemůžete to'udělat, aniž by soubory nějak zmizely. Mohl bys prozatím přejmenovat public na my_public nebo něco podobného.

*Když se potom vrátím do této větve, bude všechno perfektní až do mé poslední revize?

Pokud odevzdáte své změny, Git je neztratí. Pokud své změny neodevzdáte, Git se bude opravdu hodně snažit nepřepsat práci, kterou jste udělali. To je to, před čím vás Git varuje v prvním případě (když jste se pokusili přepnout větve).

Komentáře (2)