2011-01-04 11 views
16

Dies hat mich für eine Woche geplagt.SVN Endlosschleife - [Datei] "existiert nicht im Repository"

SVN sagt mir immer, dass eine bestimmte Datei "does not exist in repository".

Fein. Lass es uns einfach löschen. Vergiss es. Ignoriere es. Was auch immer. Ich interessiere mich nicht wirklich für diese Datei (besonders, wenn sie weiterhin den nächtlichen Check-in nicht besteht).

Der bizarrste Teil? Ein "Restore" wird tatsächlich die Datei aus dem Repository RESTORE, so dass es dort (beschädigt, vielleicht?).

... und das muss das i-Tüpfelchen sein. Wenn ich die Datei über den Windows Explorer lösche, wird SVN die Datei aus dem Repository WIEDERHERSTELLEN und gleich danach feststellen, dass sie nicht im Repository existiert. WTF?

Hat jemand eine Ahnung, wie man das los wird?

Ich habe schon versucht, Aufräumungen, Rückzüge, Streichungen und alles andere vorstellbare, aber dieser hat mich ratlos.

Vielen Dank für alle Tipps, die Sie haben könnten ...

+0

Haben Sie 'svn Umbenennungs versuchen 'diese Datei (um das '^' zu entfernen)? Und dann commit, dann löschen (und erneut)? – VonC

Antwort

17

Es scheint sehr wahrscheinlich, dass Sie Ihre lokale Arbeitskopie beschädigt, z.B. durch Verschieben von Ordnern oder eine andere Manipulation, die Sie mit Windows Explorer getan haben, aber sollte über das TortoiseSVN-Kontextmenü getan haben. Die Informationen in den Ordnern .svn entsprechen nun nicht mehr dem Status der Arbeitskopie, was Subversion verwirrend ist.

Um dies zu beheben, löschen Sie den übergeordneten Ordner ("Originale") in Ihrer Arbeitskopie mit Windows Explorer (NICHT mit TortoiseSVN). Dann tu ein TortoiseSVN "update" im root deiner Arbeitskopie. Dies sollte den Ordner in funktionierender Reihenfolge wiederherstellen.

Eine andere Möglichkeit besteht darin, Ihre Arbeitskopie vollständig zu verwerfen und einen neuen Checkout durchzuführen.

Beachten Sie, dass die nächste Version von Subversion (1.7) die Möglichkeiten zum Korrumpieren Ihrer Arbeitskopie reduzieren wird, indem alle Metadaten in einem einzigen .svn-Ordner im Stammverzeichnis zentralisiert werden.

+1

Ich kann bestätigen, dass dies eine häufige Situation ist. Die Arbeitskopie kann beschädigt werden (und dennoch kohärent bleiben) und es gibt keine Möglichkeit, das herauszufinden. Fresh Checkout ist die einzige zuverlässige Lösung. –

+0

Hallo Wim - Dein erster Vorschlag hat es geschafft. Vielen Dank! Oh, und gute Neuigkeiten über 1.7 versuchen, etwas davon zu minimieren. SVN 1.6 ist ein wenig zu unversöhnlich über kleine Fehler. – Flipster

+0

Ich hoffe, es gibt einen anderen Weg ... Das Löschen des einschließenden Ordners ist keine Option für mich :( – jowie

0

Ich hatte ähnliche Probleme mit beschädigten Arbeitskopien. Manchmal haben die Arbeitskopien viele ausstehende Änderungen, können aber nicht einchecken. Um dies zu beheben, verwende ich den folgenden Ansatz (SVN 1.7+):

  1. Kasse eine neue Arbeitskopie in ein neues Verzeichnis (path2)
  2. In der frischen Arbeitskopie, wenn die betroffene Datei ist, löschen es bei Bedarf.
  3. Commit die frischen Arbeits
  4. In der frischen Arbeitskopie löscht alles außer dem Verzeichnis .svn
  5. Kopieren Sie alles von der alten Arbeitskopie mit Ausnahme des .svn Verzeichnisses in die neue Arbeitskopie kopieren.
  6. Commit die frische Arbeitskopie wieder
  7. Löschen (oder Backup) die alte Arbeitskopie
  8. Benennen Sie die neue Arbeits an die alte Arbeitskopie (path2 auf Pfad)
Verwandte Themen