Затова добавих папка в моя файл .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 clean -d -f .
git clean -d -f ""
Ако искате да премахнете и файловете, игнорирани от git, изпълнете следната команда.
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
означава, че игнорираните файлове също се премахват, както и файловете, непознати за git.
-d
означава, че освен непроследените файлове се премахват и непроследените директории.
-f
се изисква, за да се изпълни принудително.
Изглежда, че искате файловете да бъдат игнорирани, но те вече са били предадени. .gitignore няма ефект върху файлове, които вече са в репото, така че те трябва да бъдат премахнати с git rm --cached
. Включването на --cached
ще предотврати какъвто и да е ефект върху работното ви копие и то просто ще се маркира като премахнато при следващия commit. След като файловете бъдат премахнати от репото, .gitignore ще предотврати повторното им добавяне.
Но имате и друг проблем с .gitignore - използвате прекалено много заместващи знаци и това води до по-малки съвпадения, отколкото очаквате. Вместо това нека променим .gitignore и опитаме това.
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Git ви казва, че иска да създаде файлове (с име public/system/images/9/...
и т.н.), но вие вече имате съществуващи файлове в тази директория, които не се следят от Git. Може би някой друг е добавил тези файлове в хранилището на Git, а вие за първи път преминавате към този клон?
Вероятно има някаква причина тези файлове да са в клона develop
, но не и в текущия клон. Може да се наложи да попитате сътрудниците си защо това е така.
Как да направя така, че да мога да превключвам клонове, без да изтривам тези файлове?
Не можете да го направите, без да накарате файловете да изчезнат по някакъв начин. Засега можете да преименувате public
на my_public
или нещо подобно.
Ако се върна към този клон след това, ще бъде ли всичко перфектно, както до последния ми commit?
Ако предадете промените си, Git няма да ги загуби. Ако не предадете промените си, Git ще се постарае наистина много *да не презапише работата, която сте извършили. Това е, за което Git ви предупреждава в първия случай тук (когато сте се опитали да смените клона).