2010-07-21 27 views
39

Ich habe ein Problem, das sehr einfach scheint, aber ist schwer zu lösen. Ich erhalte den erwähnten Fehler nach dem Löschen eines Verzeichnisses. Ich habe noch keine Lösung gefunden, um den Konflikt zu lösen. So geschieht es:SVN Commit fehlgeschlagen: Directory veraltet

 
svn add dir 
svn add dir/file1 
svn commit 
svn add dir/file2 
svn commit 
svn delete dir 
svn commit 
--> commit failed 
--> Directory '/dir' is out of date 

Die offensichtliche Lösung "svn update" funktioniert nicht. Nach svn update a nächsten Commit schlägt mit:

 
Commit failed 
Directory '/dir' remains in conflict. 

In der Zwischenzeit fand ich eine Lösung, aber es ist ein wenig umständlich:

 
svn resolve --accept working dir 
svn commit --> still fails 
svn update 
svn commit --> still fails 
svn resolve --accept working dir 
svn commit --> NO PROBLEM! 

Zwei Fragen: - kann dieses Verhalten jemand erklären, denn ich bin sehr neugierig darüber - dieses Problem tritt in einem Perl-Skript in einer viel komplexeren Situation. Kann mir jemand eine einfache Lösung mit 'machbar' im Perl-Skript geben?

Antwort

58

Machen Sie einfach eine svn update und dann sollte Ihr Festschreiben funktionieren.

+2

Schlägt Sie mich zu ihm. Außerdem sollte ein Update Teil Ihres normalen Arbeitsablaufs sein. Ich aktualisiere typischerweise vor dem Commit. – hometoast

+0

Das war eine der offensichtlichen Lösungen, über die ich nachdachte.Aber nach svn update bekomme ich: svn commit -> '\ dir' bleibt im Konflikt –

+0

aber 'svn update' entfernt Änderungen in Ihrem Arbeitsverzeichnis, so dass alle Ihre Arbeit gelöscht wird und nichts zu begehen. Habe ich recht? – VextoR

1

Sie müssen nur aktualisieren und dann begehen

+1

Das war eine der offensichtlichen Lösungen, über die ich nachdachte. Aber nach svn update bekomme ich: svn commit -> '\ dir' bleibt im Konflikt –

1

Sie svn up dir versucht haben, das Finale begehen, bevor Sie?

+1

Das war eine der offensichtlichen Lösungen, über die ich nachdachte. Aber nach svn update bekomme ich: svn commit -> '\ dir' bleibt im Konflikt –

57

Wenn ich Subversion richtig verstanden hat, ist das Problem so:

Subversion verfolgt die aktuelle Version für jede Datei und Verzeichnis getrennt. Wenn eine Änderung an einer Datei festgeschrieben wird, ändert sich die Version des übergeordneten Verzeichnisses im Repo, aber Ihre Arbeitskopie hat das Verzeichnis immer noch in der alten Version.

Also in Ihrem Szenario nach dem Hinzufügen der Datei das übergeordnete Verzeichnis im Repo hat eine höhere Revision als Ihre Arbeitskopie. Wenn Sie versuchen, das Verzeichnis zu löschen, in dem Sie an einer veralteten Version arbeiten.

zu beheben:

ein svn update Sie nach der Datei hinzufügen, aber bevor das dir zu löschen.

Im Allgemeinen, wenn Sie die Änderungen anderer nicht übernehmen möchten, können Sie das Update auf das Verzeichnis selbst beschränken: svn up --depth empty dir.

+0

Vielen Dank dafür, @Stephen Friedrich - wollte nur daran erinnern, dass wenn 'svn mv' von einem ganzen Verzeichnis (was hat mich gebracht zu diesem Post) erfolgt das Addieren und Löschen in einem Schritt; und leider scheint es, dass "ein svn-update nach dem hinzufügen der datei, aber vor dem löschen des dirs" in diesem fall nicht angewendet werden kann. Was für mich funktionierte, war, das 'alte' Verzeichnis manuell zu löschen (mit 'rm -rf') und dann erneut zu committen. Prost! – sdaau

+0

Ich werde diese Antwort gerne aufwerten, um sie an die Spitze zu bringen. – Brandon

+0

@Stephen Friedrich, ruf an, wenn du in der Nähe von Bergamo, Italien, bist, schulde ich dir ein Abendessen ... –

0

Um dieses Problem zu umgehen, habe ich 'svn revert' dann das Commit erneut, die den Inhalt loswerden sollte dann tun 'svn löschen' und erneut Commit. Ich habe dieses Problem beim Versuch, ein Verzeichnis umzubenennen, aber hoffentlich wird das funktionieren.

0

Aktualisieren, bereinigen und dann festschreiben.

0

ähnliches Problem, das ich mit frischem Arbeitsplatz konfrontiert:

$ svn delete dir/file 
D   dir/file 
$ svn ci -m "comment1" 
Deleting  dir/file 
$ svn delete dir/ 
D   dir 
$ svn ci -m "comment2" 
Deleting  dir 
svn: Commit failed (details follow): 
svn: Item 'dir' is out of date 

das Problem zu beheben ich die Quellen erneut aktualisiert und verwendete den Befehl ‚URL löscht‘:

$ svn delete --force https://server/path.../dir 
$ svn update