.gitignore und "Die folgenden nicht verfolgten Arbeitsbaumdateien würden beim Auschecken überschrieben werden"

Also habe ich einen Ordner zu meiner .gitignore-Datei hinzugefügt.

Sobald ich einen git status mache, sagt er mir

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

Wenn ich jedoch versuche, die Zweige zu ändern, erhalte ich folgendes:

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

So sieht meine .gitignore-Datei aus:

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

Wie bekomme ich das zum Laufen, so dass ich den Zweig wechseln kann, ohne diese Dateien zu löschen?

Wenn ich eine Änderung vornehme, wird sich das auf diese Dateien auswirken? Mit anderen Worten, wenn ich danach zu diesem Zweig zurückkehre, ist dann alles perfekt bis zu meinem letzten Commit?

Ich möchte diese Dateien nicht verlieren, ich möchte nur nicht, dass sie verfolgt werden.

**WARNUNG: es löscht nicht verfolgte Dateien, daher ist es keine gute Antwort auf die gestellte Frage.

Diese Meldung habe ich auch erhalten. In meinem Fall wollte ich die Dateien nicht behalten, also hat das für mich funktioniert:

git 2.11 und neuere Versionen

git clean  -d  -f .

older git

git clean  -d  -f ""

Wenn Sie auch Dateien, die von git ignoriert werden, entfernen möchten, führen Sie den folgenden Befehl aus.

BE WARNED!!! DIES ZERSTÖRT HÖCHSTWAHRSCHEINLICH IHR PROJEKT, VERWENDEN SIE ES NUR, WENN SIE 100% WISSEN, WAS SIE TUN

git 2.11 und neuer

git clean  -d  -fx .

older git

git clean  -d  -fx ""

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

  • -x bedeutet, dass ignorierte Dateien sowie Dateien, die Git unbekannt sind, ebenfalls entfernt werden.

  • d" bedeutet, dass zusätzlich zu den nicht getrackten Dateien auch nicht getrackte Verzeichnisse entfernt werden.

  • -f ist erforderlich, um die Ausführung zu erzwingen.

Kommentare (28)
Lösung

Es scheint, als ob Sie die Dateien ignorieren wollen, obwohl sie bereits übertragen wurden. .gitignore hat keinen Effekt auf Dateien, die bereits im Projektarchiv sind, also müssen sie mit git rm --cached entfernt werden. Das --cached wird verhindern, dass es irgendeine Auswirkung auf Ihre Arbeitskopie hat und es wird einfach als entfernt markiert, wenn Sie das nächste Mal übertragen. Nachdem die Dateien aus dem Projektarchiv entfernt wurden, verhindert .gitignore, dass sie wieder hinzugefügt werden.

Sie haben aber noch ein anderes Problem mit Ihrer .gitignore, Sie verwenden übermäßig viele Platzhalter und das führt dazu, dass sie weniger übereinstimmt, als Sie es erwarten. Ändern Sie stattdessen die .gitignore und versuchen Sie dies.

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
Kommentare (7)

Git teilt Ihnen mit, dass es Dateien (mit dem Namen public/system/images/9/... usw.) erstellen möchte, aber Sie haben bereits Dateien in diesem Verzeichnis, die nicht von Git verfolgt werden. Vielleicht hat jemand anderes diese Dateien dem Git-Repository hinzugefügt, und Sie haben zum ersten Mal zu diesem Zweig gewechselt?

Wahrscheinlich gibt es einen Grund, warum diese Dateien in Ihrem Entwicklungszweig und nicht in Ihrem aktuellen Zweig sind. Vielleicht müssen Sie Ihre Mitarbeiter fragen, warum das so ist.

Wie kriege ich das hin, dass ich den Zweig wechseln kann, ohne diese Dateien zu löschen?

Das geht nicht, ohne die Dateien irgendwie verschwinden zu lassen. Du könntest public in my_public oder so umbenennen.

Wenn ich danach zu diesem Zweig zurückkehre, ist dann alles perfekt bis zu meinem letzten Commit?

Wenn Sie Ihre Änderungen committen, verliert Git sie nicht. Wenn du deine Änderungen nicht überträgst, wird Git sich sehr bemühen, die Arbeit, die du gemacht hast, nicht zu überschreiben. Das ist es, wovor Git Sie in der ersten Instanz hier warnt (als Sie versucht haben, den Zweig zu wechseln).

Kommentare (2)