Έτσι πρόσθεσα έναν φάκελο στο αρχείο .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/*
Πώς μπορώ να το κάνω αυτό να δουλέψει ώστε να μπορώ να αλλάξω κλάδους χωρίς να διαγράψω αυτά τα αρχεία;
Αν κάνω μια αλλαγή, θα επηρεάσει αυτά τα αρχεία; Με άλλα λόγια, αν επιστρέψω σε αυτό το κλαδί μετά θα είναι όλα τέλεια όπως μέχρι την τελευταία μου δέσμευση;
Δεν θέλω να χάσω αυτά τα αρχεία, απλά δεν θέλω να παρακολουθούνται.
Χτύπησα και αυτό το μήνυμα. Στην περίπτωσή μου, δεν ήθελα να κρατήσω τα αρχεία, οπότε αυτό λειτούργησε για μένα:
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 δεν έχει καμία επίδραση σε αρχεία που βρίσκονται ήδη στο repo, οπότε πρέπει να αφαιρεθούν με το git rm --cached
. Το ---cached
θα αποτρέψει το να έχει οποιαδήποτε επίδραση στο αντίγραφο εργασίας σας και απλά θα σημειωθεί ως αφαιρεμένο την επόμενη φορά που θα κάνετε commit. Αφού τα αρχεία αφαιρεθούν από το repo, τότε το .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 δεν θα τις χάσει. Αν δεν κάνετε commit τις αλλαγές σας, τότε το Git θα προσπαθήσει πολύ σκληρά να μην αντικαταστήσει τη δουλειά που έχετε κάνει. Αυτό'είναι που σας προειδοποιεί το Git στην πρώτη περίπτωση εδώ (όταν προσπαθήσατε να αλλάξετε κλάδους).