Gibt es eine Möglichkeit, TortoiseSVN mit svn: mergeinfo auszuschalten?

70

Wenn ich eine TortoiseSVN-Zusammenführung durchführe, enthält sie eine Reihe von Verzeichnissen und einige Dateien in den geänderten Dateien, obwohl es keine tatsächlichen Änderungen gibt.

Es ändert die Eigenschaft svn:mergeinfo.

Gibt es einen Grund, warum diese im Verzeichnis / in den Dateien festgelegten Eigenschaften benötigt werden? Gibt es eine Möglichkeit, diese Änderungen nicht vorzunehmen svn:mergeinfo?

Normalerweise setze ich die Elemente einfach zurück und schreibe sie fest, aber dies verschwendet zusätzliche Zeit.

Brian R. Bondy
quelle

Antworten:

44

Dies geschieht sehr wahrscheinlich, weil für diese Dateien und Verzeichnisse die Eigenschaft svn: mergeinfo aus einer vorherigen Zusammenführung festgelegt wurde. Ich denke nicht, dass es im Allgemeinen eine gute Idee ist, einzelne Dateien oder Verzeichnisse so zusammenzuführen, dass die Zusammenführungsinfo in einzelne Dateien geschrieben wird. Sie sollten sich angewöhnen, auf der für Ihren Workflow höchstmöglichen Ebene zusammenzuführen, damit die Eigenschaft mergeinfo nur für strukturelle Verzeichnisse wie / trunk oder /branches/1.0 festgelegt wird.

Wenn Sie jedoch Mergeinfo-Eigenschaften für einzelne Dateien und Ordner haben, können Sie zwei Dinge tun: Als Erstes entfernen Sie einfach die Eigenschaft svn: mergeinfo aus den betreffenden Dateien und Verzeichnissen. Ich bin mir nicht sicher, ob dies empfohlen wird, es sei denn, Sie wissen wirklich, was Sie tun und welche Auswirkungen dies haben könnte. Lesen Sie vorher die Dokumentation!

Das zweite, was Sie tun können, ist, die Eigenschaftsänderungen so festzuschreiben, wie SVN es wünscht. Wenn Sie der Software vertrauen, ist dies wahrscheinlich das Richtige.

Trotzdem habe ich mit meinen Teamkollegen zusammengearbeitet, um die richtigen Gewohnheiten zu entwickeln, damit wir diesen Ärger nicht mehr haben.

RibaldEddie
quelle
3
Vielen Dank, es scheint fast zufällig zu sein, für welche Dateien diese Eigenschaft festgelegt wurde, und es muss von früheren Entwicklern stammen, die aus dem Nicht-Root-Verzeichnis zusammengeführt wurden. Ich werde sie entfernen.
Brian R. Bondy
1
Vielen Dank für die Klarstellung, wie dies passiert ist :)
TheXenocide
Ich habe Ihren Rat befolgt, um die Eigenschaften zu bearbeiten und svn mitzuteilen, dass alles in Ordnung ist. Es gab jedoch einen Haken ... Zuerst habe ich die zusätzlichen Metadatendateien des Zweigs mit der aktuellen Version des Trunks aktualisiert. Als ich versuchte, mich wieder in eine Trunk-Arbeitskopie zu integrieren, sagte mir svn, ich müsse zuerst aktualisieren. Ich habe aktualisiert und festgestellt, dass die SVN-Version erhöht wurde. Das war offensichtlich: Durch das Festschreiben der Eigenschaften in der Branche wurde die globale Drehzahl erhöht. Ich habe dann die Mergeinfos erneut bearbeitet und diesmal eine Revision des Trunks eine Revision vor der aktuellen Revision angegeben. Dann hat alles gut funktioniert.
Diego Medaglia
Ich habe die gleiche Meldung erhalten, als ich versucht habe, Änderungen aus dem Zweig zusammenzuführen - auch die Revision der Zweigstellenerstellung. Als ich die Revision der Filialerstellung deaktivierte, funktionierte sie wie ein Zauber. Vielen Dank.
Drinovc
39

SVN 1.7 und höher

Dies sollte in SVN 1.7 behoben werden. Aus den Versionshinweisen :

Zusammenführungen zeichnen keine Zusammenführungsinformationen (die die Zusammenführung beschreiben) mehr für Teilbäume auf (die ihre eigenen expliziten Zusammenführungsinformationen haben), wenn der Teilbaum von der Zusammenführung nicht betroffen war. Dies sollte die Anzahl falscher svn:mergeinfoEigenschaftsänderungen für Benutzer mit einer großen Anzahl von Teilbäumen mit expliziter Zusammenführungsinfo erheblich reduzieren.

SVN vor 1.7

Sobald eine Datei / ein Ordner eine explizite Zusammenführungsinfo enthält, wird bei jeder nachfolgenden Zusammenführung mit dem Zweig diese Zusammenführungsinfo aktualisiert, auch wenn die Datei / der Ordner keine Beziehung zueinander hat. Dies ist ärgerlich, da die Änderungsliste bei jeder Zusammenführung immer unübersichtlicher wird.

Um dies zu vermeiden, führen Sie nur den Ordner "root" des Zweigs zusammen, z. B. "/branches/maintenance2.x". Keine der Dateien oder Ordner unter "/branches/maintenance2.x" sollte dann mergeinfo erhalten. Befolgen Sie die Hinweise zum Zusammenführen im SVN-Buch .

Selbst wenn Sie nur im "Stamm" -Ordner des Zweigs zusammenführen, svn:mergeinfokönnen beim Kopieren immer noch leere Eigenschaften für einzelne Dateien und Ordner angezeigt werden, um anzuzeigen, dass sie nicht dieselben Zusammenführungen wie ihre Geschwister erhalten haben.

Es ist wahrscheinlich sicher, die überflüssige Teilbaum-Mergeinfo zu löschen. Eine Möglichkeit, dies zu tun, besteht darin, die svn:mergeinfoEigenschaft für jede Datei und jeden Ordner in Ihrem Projektstamm rekursiv zu löschen . (Aber behalten Sie die Mergeinfo im Stammordner selbst!)

Alternativ können Sie ein Upgrade auf Subversion 1.6 durchführen . Ich habe überprüft, dass es dieses Problem behebt. Es scheint sogar überflüssige Mergeinfo zu löschen, die von früheren Versionen für Sie hinzugefügt wurden.

Den Kommentaren nach zu urteilen, gibt es in SVN 1.6 immer noch Fälle, in denen überflüssige Unterbaum-Mergeinfo angezeigt wird. Aber das konnte ich nicht reproduzieren.

Wim Coenen
quelle
12
Ich kann bestätigen, dass SVN 1.6 dieses Problem nicht behebt.
Mike Miller
Ich kann jedoch bestätigen, dass durch einfaches manuelles Löschen aller zusätzlichen Eigenschaften ein Großteil des Problems behoben wurde.
Mike Miller
Die einfache Verwendung von 1.6 behebt dieses Problem nicht, da es sich tatsächlich um eine erwartete Funktionalität handelt, die jedoch für Benutzer eines typischen Zweig- / Amtsleitungsmodells etwas ärgerlich ist.
TheXenocide
Wenn Sie über 1.6-Korrekturen sprechen, bedeutet dies, dass ich den Client, den Server oder beides aktualisieren muss?
Mathias F
1
Ich verwende SVN 1.7x und kann bestätigen, dass ich immer noch Probleme damit habe, dass Mergeinfo auf unmittelbaren untergeordneten Elementen des Stammverzeichnisses erzeugt wird.
Bryce Schober
14

Wenn Sie Ihre Zusammenführungen mit der Option --ignore-ancestry durchführen, werden die mergeinfo-Eigenschaften erst gar nicht erstellt.

svn merge --ignore-ancestry -c 1234 svn://sourcecontrol .
Chase Seibert
quelle
7

Wenn Sie Vorfahren ignorieren aktivieren, wird in den Ordnern keine svn mergeinfo erstellt. Wenn Sie die SVN-Zusammenführungsinformationen bereits erhalten haben, setzen Sie sie einfach zurück und führen Sie die Zusammenführung erneut durch, indem Sie die ignorierte Abstammung überprüfen.

Geben Sie hier die Bildbeschreibung ein

Täuschungen
quelle
3

svn: mergeinfo ist die Eigenschaft, mit der Subversion den Zusammenführungsverlauf verfolgt . Ich würde es einfach tun lassen, was es zu tun hat ... Möglicherweise müssen Sie den Verlauf später zusammenführen und feststellen, dass es nicht funktioniert, weil Sie diese Eigenschaften nicht festgeschrieben haben.

Mauricio Scheffer
quelle
Ich stimme zu, das sind nur Metadaten, und sie werden nützlicher, wenn sich die SVN-Client-Software wie TortoiseSVN weiterentwickelt.
EnocNRoll - AnandaGopal Pardue
2

Der in der Frage " Stapelüberlauf" angegebene Befehl " Unnötige svn: mergeinfo-Eigenschaften entfernen" entfernt alle zusätzlichen mergeinfo.

From the root of the project do:

svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"
Rafa
quelle
1

Ich würde hinzufügen, dass mindestens ein Teil dieses Fehlers in Subversion 1.5.5 behoben wurde. Aus der Datei 1.5.5 CHANGES :

do not create mergeinfo for wc-wc moves or copies (r34184, -585)

Das heißt, es gab einen Fehler in SVN vor 1.5, bei dem Mergeinfo-Einträge erstellt wurden, die nicht verwendet wurden und überflüssig waren, und dies ist wahrscheinlich das, was der ursprüngliche Fragesteller traf, wenn sie viele svn:mergeinfoEigenschaften hatten.

Paul Wagland
quelle
0

Wir haben es in unserem Projekt rekursiv entfernt, da fast alle Dateien diese Informationen hatten, was das Zusammenführen sehr ärgerlich machte (wenn nur eine Datei geändert wurde, mussten alle Dateien zusammengeführt werden). Von nun an werden wir nur noch auf der Wurzel zusammengeführt, was diese Situation in Zukunft vermeiden sollte.

Es hat uns bisher keine Probleme gegeben. Die Protokollierung ist weiterhin für Dateien verfügbar und scheint identisch zu sein (dies geschieht jedoch auf eigenes Risiko!).

Oh, wir haben es auf unserem Koffer gemacht, kurz bevor wir einen neuen Zweig gemacht haben. Auf diese Weise können wir von einer sauberen Tafel ausgehen.

Peter
quelle
0

Wir hatten dieses Problem auch in meinem Team und es machte den gesamten Zusammenführungsprozess etwas verwirrend. Nachdem ich dies gelesen hatte, versuchte ich, die Eigenschaft svn: mergeinfo aus einer Reihe von Dateien zu löschen, und nach einigen weiteren Tests schien das Problem dadurch behoben zu sein.

Ivar Wedøe
quelle
"Ich habe versucht, die Eigenschaft svn: mergeinfo aus einer Reihe von Dateien zu löschen" - Wie? Und welche Dateien?
Luke
0

Tolle Frage und Antwort! Wir haben dieses Problem in letzter Zeit, weil wir versuchen, die Einschränkungen unseres automatisierten Build-Systems zu umgehen. Unser Build-System erhöht automatisch die .bdsproj- und einige der .dpr / .dpk-Dateien mit Versions- und Pfadinformationen.

Ich möchte das ändern ... aber im Moment, wenn Sie einen Zweig mit einem anderen zusammenführen möchten, erhalten Sie die Handvoll Dateien, die Sie geändert haben, und dann 1000 Dateien, die der Build-Computer geändert hat. Wir haben also "gezielte" Zusammenführungen durchgeführt, manchmal eine Datei nach der anderen. Insbesondere bei .dpr- oder .bdsproj-Dateien, die legitime Änderungen aufweisen (z. B. die Aufnahme einer zusätzlichen Einheit). Jetzt weiß ich, was los ist, also kann ich hoffentlich dem Wahnsinn ein Ende setzen.

Danke Stapelüberlauf!

Chris Thornton
quelle