Wie funktioniert das nicht rekursive Commit von Tortoise?

110

Ich habe eine Kopie des SVN-Zweigs (meines Zweigs) lokal ausgecheckt, zu dem ich aus einem anderen Zweig (der eine völlig andere Ordnerstruktur hat) zusammengeführt habe. Grundsätzlich gibt es also viele Löschungen (von alten Dateien) und Ergänzungen (von neuen Dateien).

Wenn ich versuche, die Zusammenführung in das Repository (in meinen Zweig) zu übertragen, sagt Tortoise

Dieses Festschreiben ist nicht rekursiv und es werden verschobene / umbenannte Ordner für das Festschreiben ausgewählt. Solche Verschiebungen / Umbenennungen werden im Repository immer rekursiv ausgeführt. Möchten Sie sich trotzdem festlegen?

Ist es in Ordnung, mit diesem Commit fortzufahren? Wenn nicht, was soll ich tun, damit es kein Problem gibt?

Außerdem habe ich für einige Dateien, die ich hinzugefügt habe, nach dem Hinzufügen Änderungen vorgenommen (sofern dies Auswirkungen auf die Art hat).

user1447725
quelle

Antworten:

129

Von Google gefunden, wie man das Problem behebt: Drücken Sie F5 im Festschreibungsfenster (nicht im "Warn-Popup").

Weitere Informationen finden Sie unter http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=2831045 .

Am 26.08.2011 22:39 schrieb Ryan J Ollos:

Seit einigen Monaten wird beim Starten von Commit das folgende Dialogfeld angezeigt. Dies tritt häufig auf, wenn nach einer Zusammenführung versucht wird, ein Commit durchzuführen.

In letzter Zeit ist mir jedoch aufgefallen, dass beim Abbrechen und anschließenden manuellen Aktualisieren der Dateiliste (F5) die Meldung beim zweiten Starten des Commits nicht mehr angezeigt wird. Das Commit scheint gut und ohne weitere Probleme erfolgreich zu sein.

Das Festschreibungsdialogfeld überwacht die Arbeitskopie in einem Hintergrundthread auf Änderungsbenachrichtigungen. Solche Benachrichtigungen werden vom Betriebssystem gesendet, falls Dateien geändert / verschoben / umbenannt / ... werden. Wenn eine solche Benachrichtigung empfangen wird, führt der Festschreibungsdialog zunächst einige Überprüfungen durch, damit die meisten von ihnen gelöscht werden können. Wenn die Benachrichtigung anzeigt, dass sich eine Datei, die nicht überprüft und im Festschreibungsdialog nicht sichtbar ist, irgendwie geändert hat, wird wieder auf nicht rekursives Festschreiben umgeschaltet. Dies liegt daran, dass, wenn Sie beispielsweise eine Datei in einem anderen Editor geöffnet haben und Ihre Änderungen speichern, während das Festschreibungsdialogfeld geöffnet ist, diese Datei ebenfalls festgeschrieben wird, obwohl Sie sie im Festschreibungsdialogfeld nicht überprüft haben (sie wird nicht angezeigt) bis Sie den Dialog mit F5 aktualisieren).

Wenn Sie diesen Warndialog häufig sehen, überprüfen Sie bitte, ob ein anderes Tool / eine andere App ausgeführt wird, mit der Dateien in Ihrer Arbeitskopie geändert werden.

Und wie Sie bemerkt haben: Wenn Sie F5 drücken, wird dieses 'nicht rekursive Flag' zurückgesetzt, da nach einer Aktualisierung alle Dateien wieder angezeigt werden - auch die, die Sie nach dem Start des Dialogfelds geändert haben.

Stefan

ichaki5748
quelle
1
Der Link in der Antwort scheint tot zu sein. Hier ist eine gültige aus dem Internet-Archiv web.archive.org/web/20150306224932/http://…
Buzz3791
1
Ich habe gerade versucht, F5 zu drücken. Dies hat zur Folge, dass in der Liste der Festschreibungsdialogdateien die meisten meiner Dateien zweimal angezeigt werden (mit genau demselben Pfad und Namen) und die Warnmeldung weiterhin angezeigt wird, wenn ich versuche, eine Festschreibung durchzuführen.
ODER Mapper
26

Ich hatte das gleiche Problem, löste es jedoch, indem ich Änderungen an Dateien zurücksetzte, die ich als "Beim Festschreiben ignorieren" markiert hatte.

Nachdem ich diese Dateien zurückgesetzt hatte, konnte tortoisesvn alle anderen Dateien aus der Zusammenführung festschreiben

Kevin Brady
quelle
Was ist ein tatsächlicher Grund? Warum oder wie verursachen diese Dateien das Problem?
Mannoj
5

Ist es in Ordnung, wenn ich mit diesem Commit fortfahre?

Nein, Ihr Commit ignoriert alle Änderungen im WC-Baum und spiegelt nur Änderungen auf Stammebene wider (unterbrochene Zusammenführung).

Sie haben beim ersten Auschecken nicht rekursiv einen Fehler gemacht. Sie können versuchen, mithilfe von --depth infinityParametern in der CLI ein gutes, vollständiges Festschreiben durchzuführen, oder diesen Schalter in der GUI von TortoiseSVN finden.

svn commit --depth infinity . -m "Merge"
Fauler Dachs
quelle
1
"Sie haben beim ersten Auschecken nicht rekursiv einen Fehler gemacht." Nein, nicht unbedingt. Ich habe mein WC genauso ausgecheckt wie immer, aber ich habe immer noch plötzlich dieses Problem. Tatsächlich scheint dies bei keiner der folgenden alternativen Lösungen der Fall zu sein.
Keith M
Das ist völlig falsch. Ich erhalte diese Nachricht von Zeit zu Zeit und habe meine Arbeitskopie rekursiv auf die gleiche Weise
ausgecheckt,
1

Auch für einige Dateien, die ich SVN hinzugefügt habe, habe ich nach dem Hinzufügen Änderungen vorgenommen (wenn dies die Natur beeinflusst).

In meinem Fall war dies genau der Grund, warum die Nachricht angezeigt wurde, selbst wenn ich diese Dateien für das Commit abgewählt habe.

Hässliche Lösung, die nur dann sicher funktioniert, wenn nur wenige Dateien betroffen sind:

  1. Erstellen Sie eine Kopie der geänderten Dateien
  2. Setzen Sie die geänderten Dateien zurück
  3. Übernehmen / Zusammenführen
  4. Kopieren Sie die geänderten Dateien zurück an den ursprünglichen Ort

Erinnerung an sich selbst: Integrieren Sie einen Zweig nur dann wieder, wenn das Ziel (Trunk) sauber ist.

Thomas Weller
quelle
1

Es sieht so aus, als würde TortoiseSVN eine Art Gültigkeitsprüfung durchführen, bevor Commit aufgerufen wird. Gut, aber die Fehlermeldung ist sehr unklar.

Als ich mit diesem Problem konfrontiert wurde, habe ich wieder die Befehlszeile svn zum Festschreiben verwendet. Das Festschreiben schlug fehl, weil einer der Ordner nicht auf dem neuesten Stand war. Nachdem ich nur diesen Ordner aktualisiert hatte, führte ich "svn commit" erneut aus und es ging durch.

Bearbeiten: PS: Bevor Sie dies ausprobieren, stellen Sie sicher, dass keine Dateien als "Beim Festschreiben ignorieren" markiert sind. "Beim Festschreiben ignorieren" ist schildkrötenspezifisch, und das SVN-Festschreiben übernimmt auch diese Änderungen.

sgowd
quelle
1

Ich dachte nur, ich würde das posten, weil es für mich funktioniert hat ...

Der Grund dafür ist, dass ich eines der neuen Projekte, die ich erstellt hatte, teilweise umbenannt hatte und aus irgendeinem Grund alle auf dem Festschreibungsbildschirm als "Fehlend" angezeigt wurden.

Nachdem ich das Projekt und den Ordner (auf die SVN ein Häkchen gesetzt hatte) entfernt und wieder als neues Projekt eingefügt hatte, wurde plötzlich alles "Fehlende" zu "Hinzugefügt" und das Commit lief einwandfrei, ohne mich vor irgendetwas zu warnen .

Hoffe das hilft!

Danny Lager
quelle
1

Ich habe dieses Problem gesehen und die Ursache waren einige hinzugefügte Dateien, die ohne ersichtlichen Grund nicht den hinzugefügten Status hatten. Sie waren "normal", obwohl der übergeordnete Ordner korrekt als "hinzugefügt" angezeigt wurde. Ich habe diese "normalen" Änderungen rückgängig gemacht und sie dann manuell erneut durchgeführt. Dadurch wurde jedes hinzugefügte Element zweimal in der Festschreibungsliste angezeigt, der Fehler wurde jedoch behoben, und jetzt scheint alles in Ordnung zu sein.

Es hatte nichts mit Ignorieren beim Festschreiben zu tun, wie in einer anderen Antwort, es schien nur ein Fehler in TortoiseSVN zu sein.

Chris
quelle
Soweit ich weiß, verschiebt TortoiseSVN Dateien nicht rekursiv. Durch das Verschieben eines Ordners wird der Ordnerverlauf geändert, nicht jedoch die darin enthaltenen Dateien. Dies bedeutet, dass Sie zum Verschieben von Ordnern mit TortoiseSVN den Ordner am gewünschten Ziel neu erstellen, den Ordner hinzufügen und dann den Inhalt des ursprünglichen Ordners in den neuen verschieben müssen. Oder verwenden Sie einfach die Befehlszeile.
Bradley Singer
Ich glaube, das war eine Fusion, keine Bewegung. Wenn dies keine ähnlichen Operationen sind, folge ich nicht.
Chris
0

Das Problem könnte sein, dass Ihre Mergeinfo von jemandem oder automatisch gelöscht wird, weil die Infos im Baum nach oben verschoben wurden. Wenn Sie sie wieder zusammenführen, wird es für den Moment funktionieren. Aber alle anderen werden Probleme mit ihren nicht zusammengeführten Zweigen bekommen. SVN verliert Code und führt bereits übermittelten Code erneut zusammen.

Das Zurücksetzen und erneute Ändern dieser Dateien könnte also funktionieren, aber Sie sollten die Änderungen nicht nur festschreiben.

Nicolas
quelle
0

Ich hatte gerade das gleiche Problem. Anstatt alle Dateien auszuwählen, habe ich auf versioniert geklickt und alles hat gut funktioniert. In meinem Fall hat die versionierte Option alle Dateien ausgewählt, sodass jetzt alles in Ordnung ist.

Bruno Milanez
quelle
-4

Ich kenne keine Option für Schildkröten, aber Sie könnten die Kommandozeile verwenden

svn commit --non-recursive [folder]

Das sollte so funktionieren, wie du es magst, um Grün zu bearbeiten

Gelbir
quelle
Andere Antworten besagen, dass dies nicht das festlegt, was Sie tatsächlich festschreiben möchten.
Keith M