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?

49voto

Greg Hewgill Punkte 882617

Git teilt Ihnen mit, dass es Dateien erstellen möchte (mit dem Namen public/system/images/9/... usw.), aber Sie haben bereits bestehende Dateien in diesem Verzeichnis, die sind 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?

Es gibt wahrscheinlich einen Grund, warum diese Dateien in Ihrem develop Zweig, aber nicht in Ihrem aktuellen Zweig. 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. Sie könnten umbenennen public à my_public oder so ähnlich.

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

Wenn Sie Ihre Änderungen übertragen, gehen sie in Git nicht verloren. Wenn Sie Ihre Änderungen nicht übertragen, wird Git alles daran setzen pas um die von Ihnen geleistete Arbeit zu überschreiben. Davor warnt Git in der ersten Instanz hier (als Sie versucht haben, die Zweige zu wechseln).

23voto

Abhishek Goel Punkte 16695

Für diese heikle Aufgabe (dauerhaftes Löschen von nicht verfolgten Dateien) gibt es einen Befehl

git clean -i

Dann git pull ausreichen wird.

22voto

In-young Choung Punkte 739

Diese beiden Funktionen

  1. git rm --cached
  2. git checkout -f another-branch

hat bei mir NICHT funktioniert.

Stattdessen habe ich die Datei physisch entfernt (in Eclipse), wie es Git vorschreibt;

Please move or remove them before you can switch branches.

und dann habe ich es hinzugefügt/gebunden.

und dann habe ich gezogen und es hat funktioniert!

15voto

mc_kaiser Punkte 699

Für diejenigen, die etwas weniger Weitreichendes brauchen als Scott Schafer's Antwort ,

git clean -f

wird wahrscheinlich funktionieren. I sehr vorschlagen zu laufen

git clean --dry-run

zuerst. Dieser Befehl gibt eine Liste der Dateien aus, die Git entfernen wird, wenn Sie den Befehl git clean -f und erspart Ihnen vielleicht den Schmerz, versehentlich etwas zu entfernen, was Sie nicht wollten.

Ver diese Antwort von Stack Oveflow ou die Dokumente für weitere Informationen über git clean .

12voto

Kyle Clegg Punkte 37388

Leider weder git rm --cached ou git clean -d -fx "" hat es für mich getan.

Meine Lösung endete damit, dass ich meinen Zweig auf Remote schob, ein neues Repo klonte und dann mein Merge in dem neuen Repo durchführte. Andere Personen, die auf das Repository zugreifen, mussten dasselbe tun.

Die Moral von der Geschicht': Verwenden Sie eine .gitignore Datei von Anfang an.

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