it-swarm.com.de

Entfernen Sie unnötige svn: mergeinfo-Eigenschaften

Wenn ich Dinge in meinem Repository zusammenführe, möchte Subversion viele svn:mergeinfo - Eigenschaften zu Dateien hinzufügen/ändern, die nichts mit den Dingen zu tun haben, die ich zusammenführen möchte.

Fragen zu diesem Verhalten wurden hier zu Stack Overflow bereits gestellt:

Nach dem, was ich aus den oben genannten Themen verstehe, scheinen viele Dateien in meinem Repository explizite svn:mergeinfo - Eigenschaften zu haben, wenn dies nicht der Fall sein sollte. Es wird empfohlen, die Menge zu reduzieren und diese Eigenschaften nur für relevante Dateien/Ordner zu verwenden.

Nun meine Frage: Wie kann ich diese nicht benötigten Eigenschaften einfach entfernen? Ich verwende TortoiseSVN, aber ich zögere, Hunderte von Dateien manuell zu überprüfen/reparieren. Gibt es eine einfachere Möglichkeit, diese unnötigen svn:mergeinfo - Eigenschaften zu entfernen?

P.S. Ich suche nicht nach C++ SVN-API-Code.

136
LeonZandman

Hier ist eine andere Möglichkeit, alle Eigenschaften des Unterbaums svn: mergeinfo zu löschen, jedoch nicht im Stammordner (dies ist erforderlich, damit die Verzweigung ordnungsgemäß funktioniert).

Gehen Sie vom Ursprung des Projekts aus wie folgt vor:

svn propdel svn:mergeinfo -R
svn revert .
svn ci -m "Removed mergeinfo"
139
Vincent

Hier ist eine Möglichkeit, alle Eigenschaften der Teilstruktur svn: mergeinfo zu löschen. Führen Sie es im Stammverzeichnis Ihres Repositorys aus:

svn propget svn:mergeinfo --depth=infinity 
    | grep -v "^/"
    | grep -v "^\."   
    | cut -d- -f1 
    | xargs svn propdel svn:mergeinfo

Alles in einer Zeile zum einfachen Kopieren/Einfügen:

svn propget svn:mergeinfo --depth=infinity | grep -v "^/" | grep -v "^\." | cut -d- -f1 | xargs svn propdel svn:mergeinfo

Ändern Sie das letzte "propdel" in "propget", oder entfernen Sie die letzte Xargs-Pipe vollständig, um eine Vorschau der Dateien anzuzeigen, die davon betroffen sind, bevor Sie sie ausführen.

15
Kelvin

Wie in diesem Thread erwähnt :

  • Die meisten leeren Zusammenführungsinformationen ("leer") können durch Arbeitskopien zu Arbeitskopienkopien/-verschiebungen verursacht werden, bei denen das Quellelement keine expliziten Zusammenführungsinformationen enthält. Die Verwendung von propdel kann die Lösung sein, es sei denn, Sie verwenden eine 1.6 SVN: Seit 1.5.5 erstellen diese WC-zu-WC-Kopien keine leeren Zusammenführungsinformationen mehr auf dem Ziel
  • ein früherer Umstrukturierungsvorgang mit svn move (Rename) kann auch mergeinfo verbreiten, anstatt sie im Stammverzeichnis zu belassen
  • es gibt ein potenzielles Speicherproblem, das vom Fall 3393 verfolgt wird und in einer kommenden 1.6.2-Version behoben und in 1.5 rückportiert wird
12
VonC

Da ich mit dem Löschen von blinden svn:merge-info - Eigenschaften nicht sicher bin, habe ich ein Tool implementiert, um die aktuelle Situation auf einer Arbeitskopie zu analysieren und so viele Zusammenführungsrevisionen wie möglich von Nicht-Root-Eigenschaften für Zusammenführungsinformationen zu entfernen. Nach zusätzlichen Überprüfungen und Kontrollen durch den Benutzer können die Änderungen in der Arbeitskopie übernommen werden.

Hier ist es: svn-clean-mergeinfo

Zögern Sie nicht, ein Problem bezüglich seiner Verwendung zu melden, um es zu verbessern.

Subversion 1.10 führt ein neues Tool für diese Aufgabe ein: svn-mergeinfo-normalizer

6
Yves Martin

Ich weiß, dass es eine Weile her ist, aber ich bin auf ein ähnliches Problem gestoßen. Ich benutze TortoiseSVN 1.6.7. Zufällig befand sich die Eigenschaft im Stammverzeichnis meiner Arbeitskopie. Als ich die Eigenschaften im Stammverzeichnis ansah und auf "Entfernen" bei "svn: mergeinfo" klickte, wurde ich gefragt, ob ich sie rekursiv entfernen möchte. Dadurch wurden alle meine svn: mergeinfo-Fehler beseitigt.

4
HackedByChinese

Anstatt die Mergeinfo-Eigenschaften nur blind zu löschen, können Sie auch die "fehlenden" Zusammenführungen abschließen.

Kopieren Sie die Eigenschaft mergeinfo aus dem Stammordner, und führen Sie dann eine Zusammenführung für den untergeordneten Ordner für den entsprechenden relativen Pfad und die exakt gleiche Revisionsliste durch. (Sie können, müssen aber nicht, nur die Unterschiede zwischen dieser Liste und der Liste auflisten, die sich bereits im untergeordneten Ordner befindet.)

Normalerweise sollte diese Zusammenführung nur die Eigenschaften von mergeinfo ändern, nicht die tatsächlichen Dateien. (Wenn es dazu kommt, dass Dateien geändert werden, muss eine der vorherigen Zusammenführungen nur eine teilweise Zusammenführung gewesen sein, was ohnehin zu Problemen geführt hat.)

Wenn Sie dies tun, wird die Eigenschaft mergeinfo für Sie gelöscht, sobald beide genau übereinstimmen. Möglicherweise müssen Sie auch das Gegenteil tun: Führen Sie alle Zusammenführungsrevisionen, die nur im untergeordneten Ordner vorhanden sind, im Stammverzeichnis zusammen (Sie können auch hier einfach die vollständige Liste einfügen und SVN die Unterschiede für Sie ermitteln lassen).

2
Miral

Wenn Sie sicher sind, dass Sie Mergeinfo-Eigenschaften massenweise entfernen möchten, können Sie das folgende BASH-Skript verwenden.

FILES=`svn status |grep "^ M      " |sed s/" M      "// |tr '\n', ' '`
svn revert $FILES

Es ruft eine Liste geänderter Dateien ab, filtert sie so, dass sie nur Änderungen von Mergeinfo enthält, entfernt alles außer dem tatsächlichen Dateipfad, konvertiert die Pfade pro Zeile in eine durch Leerzeichen getrennte Liste und die Aufrufe werden in dieser Liste zurückgesetzt.

2
Chase Seibert

Um Änderungen in einer Verzeichnisstruktur vorzunehmen, ist dies (nur Nicht-DOS-Suchen):

find . -path "*/.svn" -Prune -or -exec svn propdel svn:mergeinfo '{}' \;

Beim Ausführen eines 1.6.12-Clients, der mit einem 1.5-Server verbunden ist, tritt ein ähnliches Problem auf. Es gibt is ein Unterverzeichnis im Projekt, das sein eigenes svn: mergeinfo benötigt, aber 121 solche Einträge (darunter 5 Verzeichnisse unter ./var mit "svn: ignore *") zu haben, scheint etwas unangemessen. Daher wäre es schön, ein Skript (z. B. Python) zu haben, das die offensichtlich überflüssigen Zusammenführungsinformationen entfernen und über andere Unterschiede berichten kann ...

1
Tobias