983 Stimmen

.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 eine git status es sagt mir

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

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

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 kriege ich das hin, dass ich den Zweig wechseln kann, ohne diese Dateien zu löschen?

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

Ich will diese Dateien nicht verlieren, ich will nur nicht, dass sie zurückverfolgt werden.

48 Stimmen

Wenn Ihnen diese Dateien wirklich egal sind: git checkout -f <branch> in meinem Fall werden die Dateien während des Erstellungsprozesses generiert, so dass ich mich nicht weniger darum kümmern könnte

0 Stimmen

Das passiert manchmal, wenn man 'git checkout' (ohne Branch-Namen) ausführt. Um dies zu beheben, führen Sie 'git checkout branchname' aus.

2 Stimmen

Separate, aber kritisch verwandte Frage: Warum tritt dieser Fehler überhaupt auf? Warum kann Git nicht einfach zwischen Zweigen wechseln?

1179voto

Scott Schafer Punkte 11943

WARNUNG: Dabei werden nicht verfolgte Dateien gelöscht, so dass dies keine gute Antwort auf die gestellte Frage ist.

Ich habe diese Nachricht auch gefunden. 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 .

älterer Git

git clean  -d  -f ""

Wenn Sie auch die von Git ignorierten Dateien entfernen wollen, führen Sie folgenden Befehl aus.

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

git 2.11 und neuere Versionen

git clean  -d  -fx .

älterer 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 die nicht getrackten Verzeichnisse entfernt werden.

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

771voto

Régis Punkte 7460

Warnung: Dies löscht die lokalen Dateien, die nicht indiziert sind

Erzwingen Sie es einfach: git checkout -f another-branch

286voto

Arrowmaster Punkte 8957

Es scheint, dass 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 . Die --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 der .gitignore, dass sie wieder hinzugefügt werden.

Aber Sie haben 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/

188voto

mattbasta Punkte 13011

Unter OS X kann es daran liegen, dass bei einem Dateinamen bestimmte Zeichen die Groß- und Kleinschreibung geändert haben. Versuchen Sie, die folgende Konfigurationsoption zu setzen:

git config core.ignorecase true

53voto

Chamara Jayalath Punkte 501

Das hat bei mir funktioniert.

 1. git fetch --all
 2. git reset --hard origin/{branch_name}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X