So lösen Sie die Meldung "Lokale Bearbeitung, eingehende Löschung bei Aktualisierung" auf

293

Wenn ich a mache svn status ., bekomme ich folgendes:

!     C auto-complete-config.elc
      >   local edit, incoming delete upon update
!  +  C auto-complete.elc
      >   local edit, incoming delete upon update
!  +  C popup.elc
      >   local edit, incoming delete upon update
!  +  C fuzzy.elc
      >   local edit, incoming delete upon update

Grundsätzlich sollten sich diese Dateien nicht im Repository befinden. Ein Entwickler hat sie entfernt. Dann denke ich, ich habe versehentlich nachträglich eine svn rm ...gemacht (hätte es svn update .stattdessen tun sollen ).

Wenn ich das tue svn status ., erhalte ich diese Baumkonfliktnachrichten.

Ich habe das Dokument hier gefunden, bin mir aber nicht sicher, wie ich es gemäß dem Dokument „zusammenführen“ soll.

Wie kann man sie loswerden?

Ich denke, meine Arbeitskopie ist mit dem Repository synchronisiert. Ich weiß nicht, warum diese Meldungen angezeigt werden. Diese Dateien sollten entfernt werden und werden, soweit ich weiß, überall entfernt. Ich habe es versucht svn update .und svn revert .aber ich bekomme immer noch diese Nachricht, wenn ich es tue svn status ..

Xah Lee
quelle
1
Lesmanas Antwort funktioniert auch für die Nachricht"local missing or deleted or moved away, incoming dir edit upon merge"
Warlike Chimpanzee

Antworten:

434

Kurzfassung:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update
$ touch foo bar
$ svn revert foo bar
$ rm foo bar

Wenn es sich bei dem Konflikt um Verzeichnisse anstelle von Dateien handelt, ersetzen Sie diese touchdurch mkdirund rmmit rm -r.


Hinweis: Das gleiche Verfahren funktioniert auch in der folgenden Situation:

$ svn st
!     C foo
      >   local delete, incoming delete upon update
!     C bar
      >   local delete, incoming delete upon update

Lange Version:

Dies geschieht, wenn Sie eine Datei bearbeiten, während eine andere Person die Datei gelöscht und zuerst festgeschrieben hat. Als guter SVN-Bürger führen Sie vor einem Commit ein Update durch. Jetzt hast du einen Konflikt. Wenn Sie erkennen, dass das Löschen der Datei das Richtige ist, löschen Sie die Datei aus Ihrer Arbeitskopie. Anstatt zufrieden zu sein, beschwert sich svn jetzt darüber, dass die lokalen Dateien fehlen und dass es ein widersprüchliches Update gibt, bei dem letztendlich die Dateien gelöscht werden sollen. Gute Arbeit svn.

Sollte svn resolveaus irgendeinem Grund nicht funktionieren, können Sie Folgendes tun:

Ausgangssituation: Lokale Dateien fehlen, Update ist widersprüchlich.

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

Erstellen Sie die widersprüchlichen Dateien neu:

$ touch foo bar

Wenn es sich bei dem Konflikt um Verzeichnisse handelt, ersetzen Sie diese touchdurch mkdir.

Neue Situation: Lokale Dateien, die dem Repository hinzugefügt werden sollen (ja richtig, svn, was auch immer Sie sagen), Aktualisierung immer noch widersprüchlich.

$ svn st
A  +  C foo
      >   local edit, incoming delete upon update
A  +  C bar
      >   local edit, incoming delete upon update

Setzen Sie die Dateien auf den Status zurück, den svn mag (dh gelöscht):

$ svn revert foo bar

Neue Situation: Lokale Dateien, die svn nicht bekannt sind, Aktualisierung nicht mehr widersprüchlich.

$ svn st
?       foo
?       bar

Jetzt können wir die Dateien löschen:

$ rm foo bar

Wenn es sich bei dem Konflikt um Verzeichnisse handelt, ersetzen Sie diese rmdurch rm -r.

svn beschwert sich nicht mehr:

$ svn st

Getan.

Lesmana
quelle
8
Dies funktioniert auch, wenn der Konflikt für ein Verzeichnis gilt. Anstelle von Touch Foo Bar machen Sie Mkdir Foo und Mkdir Bar . Alles andere ist das gleiche.
Vipin Johney
Sie können svn st | grep ! | cut -f 7 -d' ' | xargs touchals einen Liner zum Berühren aller fehlenden Dateien verwenden
Tibor Blenessy
Denken Sie daran, für Verzeichnisse auch rm -r foo bar(oder rmdir foo barunter Windows oder wenn Sie Windows mögen).
Tryse
Diese Antwort rettete meine geistige Gesundheit. Danke dir.
Sam
159

Versuchen Sie, den Konflikt mit zu lösen

svn resolve --accept=working PATH
Zellus
quelle
Vielen Dank. das scheint die richtige Lösung zu sein. (wusste vorher nichts über die Option "Auflösen". Ich habe sie als Antwort markiert. Obwohl sie aus irgendeinem Grund bei mir nicht funktioniert hat, wahrscheinlich weil mein Arbeitskopienbaum beschädigt wurde oder so ... am Ende habe ich sie aufgelöst indem Sie einfach das
Verzeichnis
1
Es hat anfangs bei mir nicht funktioniert, also habe ich eine weitere Kopie des SVN-Zweigs in einem temporären Ordner ausgecheckt. Dann habe ich den Pfad gelöscht, der zu Konflikten geführt hat, und die Änderungen festgeschrieben. Danach kehrte ich zu meiner Originalkopie zurück und führte diesen Befehl aus. Es funktionierte mit der Meldung "Behobener Konfliktzustand von PATH". Dies funktioniert, danke :)
Durin
Nach meinem Verständnis wäre es nicht wichtig gewesen, ob das Original gelöscht wurde oder nicht im Repository, da "Auflösen" nur für die Arbeitskopie funktioniert.
govi
perfekte Lösung für mich
Sergio Álvarez
20

Ich habe gerade das gleiche Problem bekommen und das gefunden

$ svn revert foo bar

Problem gelöst.

svn Entschlossenheit hat bei mir nicht funktioniert:

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working
svn: Try 'svn help' for more info
svn: Not enough arguments provided

$ svn resolve --accept working .

$ svn st
!  +  C foo
      >   local edit, incoming delete upon update
!  +  C bar
      >   local edit, incoming delete upon update

$ svn resolve --accept working foo
Resolved conflicted state of 'foo'

$ svn st
!  +    foo
!  +  C bar
      >   local edit, incoming delete upon update
Sligocki
quelle
2

Wenn Sie im Konfliktverzeichnis keine Änderungen vorgenommen haben, können Sie dies auch rm -rf conflicts_in_here/und dann tun svn up. Das hat zumindest bei mir funktioniert.

Du tust
quelle
1

Sie können erzwingen, dass Ihr lokales Verzeichnis auf svn zurückgesetzt wird.

 svn revert -R your_local_path
Gordon Ma
quelle
Danke, half mir auch zu lösen A + C path/to/dirund> local dir edit, incoming dir delete or move upon update
RAM237
0

Sie können die gelöschte Datei einfach zurücksetzen, aber denken Sie daran: Wenn Sie an einem Projekttyp mit einer festgelegten Projektdatei (wie iOS) arbeiten, wird diese durch Zurücksetzen der Datei Ihrer Systemordnerstruktur hinzugefügt, nicht jedoch Ihrer Projektdateistruktur. In diesem Fall sind möglicherweise zusätzliche Schritte erforderlich

CWineland
quelle
0

Dieses Problem tritt häufig auf, wenn wir versuchen , fusionieren eine andere Branche ändert sich von einem falschen Verzeichnis.

Ex:

Branch2\Branch1_SubDir$ svn merge -rStart:End Branch1
         ^^^^^^^^^^^^
   Merging at wrong location

Ein Konflikt, der bei seiner Ausführung ausgelöst wird, ist:

Tree conflict on 'Branch1_SubDir'
   > local missing or deleted or moved away, incoming dir edit upon merge

Wenn Sie q auswählen, um die Auflösung zu beenden , erhalten Sie den Status:

 M      .
!     C Branch1_SubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge
!     C Branch1_AnotherSubDir
      >   local missing or deleted or moved away, incoming dir edit upon merge

Dies bedeutet eindeutig, dass die Zusammenführung Änderungen in Bezug auf Branch1_SubDirund enthält Branch1_AnotherSubDirund diese Ordner nicht gefunden werden konnten Branch1_SubDir(offensichtlich kann sich ein Verzeichnis nicht in sich selbst befinden).

So vermeiden Sie dieses Problem an erster Stelle:

Branch2$ svn merge -rStart:End Branch1
 ^^^^
Merging at root location

Die einfachste Lösung für dieses Problem, die bei mir funktioniert hat:

svn revert -R .
Saurav Sahu
quelle