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?

10voto

GeekHades Punkte 3030

Wenn Sie diese Frage schnell klären wollen, können Sie diesen Befehl verwenden:

git checkout -f dev

9voto

Diese Befehle haben mein Problem gelöst:

git add * 
git stash
git pull

9voto

Ryan Lundy Punkte 195074

Das passierte mir bei einer Windows 8 System, indem Sie Git von der Befehlszeile aus verwenden. Der Rest meines Teams verwendet TFS und ich verwende Microsofts git-tf für Push/Pull zwischen TFS und meinem lokalen Git-Repository.

Das Problem entstand durch einige Dateien, die nur umbenannt wurden, um ihre Groß-/Kleinschreibung zu ändern . Es scheint Folgendes passiert zu sein:

  • Die Dateien wurden mit gemischten Groß- und Kleinbuchstaben in ihren Namen eingecheckt.
  • In einer späteren Übertragung wurden die Dateinamen in Kleinbuchstaben geändert.
  • git-tf hat die Dateien zunächst in gemischten Fällen erhalten.
  • Als die Dateien in Kleinbuchstaben umbenannt wurden, hat git-tf die Dateien nicht erhalten, da diese Dateinamen für Windows 8 gleichwertig sind.
  • Da Git zwischen Groß- und Kleinschreibung unterscheidet, beschwerte es sich, dass ich Dateien mit gemischter Groß- und Kleinschreibung hatte, die sich nicht in der Versionskontrolle befanden. Aber mit git status Ich konnte keine Änderungen feststellen, da die Dateinamen in der Windows-Eingabeaufforderung gleichwertig sind.

Das war für mich die einfachste Lösung:

  • git checkout eine frühere Version des Projekts, lange bevor diese Dateien jemals hinzugefügt wurden .
  • Dann git checkout die neueste Version des Projekts, mit der richtigen Dateihülle.

9voto

Juri Sinitson Punkte 1027

Ich hatte das gleiche Problem beim Auschecken in einen Zweig, der auf einem früheren Commit basiert. Git verweigerte das Auschecken aufgrund von nicht verfolgten Dateien.

Ich habe eine Lösung gefunden und hoffe, dass sie auch Ihnen helfen wird.

Hinzufügen der betroffenen Verzeichnisse zu .gitignore und die Ausgabe von $ git rm -r --cached ist offenbar nicht genug.

Angenommen, Sie möchten einen Zweig auf der Grundlage einer früheren Übertragung K erstellen, um einige Dinge zu testen und zur aktuellen Version zurückzukehren. Ich würde das in den folgenden Schritten tun:

  1. Richten Sie die nicht verfolgten Dateien ein: Bearbeiten Sie die .gitignore und anwenden $ git rm -r --cached für die Dateien und Verzeichnisse, die Git ignorieren soll. Fügen Sie auch die Datei .gitignore selbst zu .gitignore und vergessen Sie nicht, die $ git rm -r --cached .gitignore . Dadurch wird sichergestellt, dass das Ignorierverhalten von Git bei früheren Übertragungen gleich bleibt.

  2. Bestätigen Sie die Änderungen, die Sie gerade vorgenommen haben:

    $ git add -A
    $ git commit
  3. Speichern Sie das aktuelle Protokoll, sonst kann es zu Problemen kommen, wenn Sie zur aktuellen Version zurückkehren.

    $ git log > ../git.log

  4. Hartes Zurücksetzen auf die Übergabe K

    $ git reset --hard version_k

  5. Erstellen Sie einen Zweig auf der Grundlage der Übergabe K

    $ git branch commit_k_branch

  6. In dieser Filiale einchecken

    $ git checkout commit_k_branch

  7. Erledigen Sie Ihre Aufgaben und setzen Sie sie um

  8. Checkout wieder in den Master zurück

    $ git checkout master

  9. Wieder auf die aktuelle Version zurücksetzen

    $ git reset current_version ou $ git reset ORIG_HEAD

  10. Jetzt können Sie auf die HEAD

    git reset --hard HEAD

HINWEIS! Überspringen Sie nicht den vorletzten Schritt (wie z. B. $ git reset --hard ORIG_HEAD ), sonst gehen die von Git beanstandeten nicht verfolgten Dateien verloren.

Ich habe auch sichergestellt, dass die Dateien, über die sich Git beschwert hat, nicht gelöscht wurden. Ich kopierte sie in eine Textdatei und gab den Befehl $ for i in $(cat ../test.txt); do ls -ahl $i; done

Wenn Sie wieder in den oben genannten Zweig einchecken, vergessen Sie nicht, die $ git status um sicherzustellen, dass keine unerwünschten Änderungen auftreten.

5voto

Bruno Pinheiro Punkte 155

In meinem Fall lag das Problem bei den Submodulen. master wurde mit einem anderen Zweig zusammengeführt, der dem Projekt ein neues Untermodul hinzufügte. Der Zweig, den ich auschecken wollte, hatte es nicht, deshalb beschwerte sich Git über nicht verfolgte Dateien und keine der anderen vorgeschlagenen Lösungen funktionierte bei mir. Ich erzwang das Auschecken in meinen neuen Zweig und zog master.

  • git checkout -f my_branch
  • git pull origin master
  • git submodule update --init

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