.gitignore και "Τα ακόλουθα μη παρακολουθούμενα αρχεία του δέντρου εργασίας θα αντικατασταθούν από το checkout&quot,

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

Σχόλια (2)