.gitignore и "Следните непроследени файлове от работното дърво ще бъдат пренаписани от checkout"

Затова добавих папка в моя файл .gitignore.

След като направя git status, той ми казва

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

Въпреки това, когато се опитам да променя клонове, получавам следното:

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

Ето как изглежда моят .gitignore файл:

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

Как да направя така, че да мога да сменям клоновете, без да изтривам тези файлове?

Ако направя промяна, тя ще се отрази ли на тези файлове? С други думи, ако след това се върна в този клон, дали всичко ще бъде перфектно до последния ми commit?

Не искам да губя тези файлове, просто не искам да ги проследявам.

ВНИМАНИЕ: това ще изтрие непроследените файлове, така че не е добър отговор на зададения въпрос.

Попаднах и на това съобщение. В моя случай не исках да запазвам файловете, така че това работи за мен:

git 2.11 и по-нови

git clean  -d  -f .

older git

git clean  -d  -f ""

Ако искате да премахнете и файловете, игнорирани от git, изпълнете следната команда.

БЪДЕТЕ ПРЕДУПРЕДЕНИ!!! ТОВА НАЙ-ВЕРОЯТНО ЩЕ УНИЩОЖИ ПРОЕКТА ВИ, ИЗПОЛЗВАЙТЕ ГО САМО АКО ЗНАЕТЕ НА 100% КАКВО ПРАВИТЕ

git 2.11 и по-нови

git clean  -d  -fx .

older git

git clean  -d  -fx ""

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

  • -x означава, че игнорираните файлове също се премахват, както и файловете, непознати за git.

  • -d означава, че освен непроследените файлове се премахват и непроследените директории.

  • -f се изисква, за да се изпълни принудително.

Коментари (28)
Решение

Изглежда, че искате файловете да бъдат игнорирани, но те вече са били предадени. .gitignore няма ефект върху файлове, които вече са в репото, така че те трябва да бъдат премахнати с git rm --cached. Включването на --cached ще предотврати какъвто и да е ефект върху работното ви копие и то просто ще се маркира като премахнато при следващия commit. След като файловете бъдат премахнати от репото, .gitignore ще предотврати повторното им добавяне.

Но имате и друг проблем с .gitignore - използвате прекалено много заместващи знаци и това води до по-малки съвпадения, отколкото очаквате. Вместо това нека променим .gitignore и опитаме това.

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Коментари (7)

Git ви казва, че иска да създаде файлове (с име public/system/images/9/... и т.н.), но вие вече имате съществуващи файлове в тази директория, които не се следят от Git. Може би някой друг е добавил тези файлове в хранилището на Git, а вие за първи път преминавате към този клон?

Вероятно има някаква причина тези файлове да са в клона develop, но не и в текущия клон. Може да се наложи да попитате сътрудниците си защо това е така.

Как да направя така, че да мога да превключвам клонове, без да изтривам тези файлове?

Не можете да го направите, без да накарате файловете да изчезнат по някакъв начин. Засега можете да преименувате public на my_public или нещо подобно.

Ако се върна към този клон след това, ще бъде ли всичко перфектно, както до последния ми commit?

Ако предадете промените си, Git няма да ги загуби. Ако не предадете промените си, Git ще се постарае наистина много *да не презапише работата, която сте извършили. Това е, за което Git ви предупреждава в първия случай тук (когато сте се опитали да смените клона).

Коментари (2)