Wenn ich Inhalte in meinem Repository zusammenführe, möchte Subversion viele svn:mergeinfo
Eigenschaften zu Dateien hinzufügen / ändern , die völlig unabhängig von den Dingen sind, die ich zusammenführen möchte.
Fragen zu diesem Verhalten wurden bereits hier bei Stack Overflow gestellt:
- SVN Mergeinfo-Eigenschaften für andere Pfade als den Stamm der Arbeitskopie
- Gibt es eine Möglichkeit, TortoiseSVN mit svn: mergeinfo auszuschalten?
Soweit ich aus den oben genannten Themen weiß, haben viele Dateien in meinem Repository explizite svn:mergeinfo
Eigenschaften, wenn dies nicht der Fall sein sollte. Es wird empfohlen, die Menge zu reduzieren und diese Eigenschaften nur für relevante Dateien / Ordner bereitzustellen.
Nun also meine Frage: Wie kann ich diese nicht benötigten Eigenschaften einfach entfernen? Ich verwende TortoiseSVN, zögere jedoch, Hunderte von Dateien manuell zu überprüfen / zu reparieren. Gibt es eine einfachere Möglichkeit, diese unnötigen svn:mergeinfo
Eigenschaften zu entfernen ?
PS Ich suche keinen C ++ SVN API-Code.
quelle
Hier ist eine Möglichkeit, alle Eigenschaften des Teilbaums svn: mergeinfo zu löschen. Führen Sie es im Stammverzeichnis Ihres Repositorys aus:
Alles in einer Zeile zum einfachen Kopieren / Einfügen:
Um eine Vorschau der Dateien anzuzeigen, die davon betroffen sind, bevor Sie sie ausführen, ändern Sie das letzte "propdel" in "propget" oder entfernen Sie die letzte xargs-Pipe insgesamt.
quelle
Wie in diesem Thread erwähnt :
quelle
Da ich mit dem
svn:merge-info
Löschen von blinden 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 aus Nicht-Root-Eigenschaften für Zusammenführungsinformationen zu entfernen. Nach zusätzlichen menschlichen Überprüfungen und Kontrollen können die Änderungen an der Arbeitskopie festgeschrieben werden.Hier ist es: svn-clean-mergeinfo
Zögern Sie nicht, ein Problem bezüglich der Verwendung zu melden, um es zu verbessern.
In Subversion 1.10 wird ein neues Tool für diese Aufgabe eingeführt:
svn-mergeinfo-normalizer
quelle
Ich weiß, dass es eine Weile her ist, aber ich bin auf ein ähnliches Problem gestoßen. Ich benutze TortoiseSVN 1.6.7. Es ist einfach so passiert, dass sich die Eigenschaft im Stammverzeichnis meiner Arbeitskopie befand. Als ich die Eigenschaften im Stammverzeichnis angezeigt und auf Auf svn: mergeinfo entfernen geklickt habe, wurde ich gefragt, ob ich sie rekursiv entfernen möchte. Dies hat alle meine svn: mergeinfo Cockups losgeworden.
quelle
Wenn Sie sicher sind, dass Sie mergeinfo-Eigenschaften massenweise entfernen möchten, können Sie das folgende BASH-Skript verwenden.
Es erhält eine Liste der geänderten Dateien, filtert sie so, dass nur Änderungen zusammengeführt werden, entfernt alles außer dem tatsächlichen Dateipfad, konvertiert die Pfade mit einer Zeile in eine durch Leerzeichen getrennte Liste und die Aufrufe werden in dieser Liste zurückgesetzt.
quelle
--xml
Flags und eines XML-Parsers. Alles andere kann sich zwischen den Versionen ändern, da die Vorwärtskompatibilität für das Textausgabeformat nicht garantiert ist.Anstatt die mergeinfo-Eigenschaften nur blind zu löschen, ist es auch möglich, die "fehlenden" Zusammenführungen abzuschließen.
Kopieren Sie die Eigenschaft mergeinfo aus dem Stammordner und führen Sie dann eine Zusammenführung des untergeordneten Ordners für den entsprechenden relativen Pfad und genau dieselbe 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 mergeinfo-Eigenschaften ändern, keine tatsächlichen Dateien. (Wenn sich dadurch Dateien ändern, muss eine der vorherigen Zusammenführungen nur eine teilweise Zusammenführung gewesen sein, was möglicherweise ohnehin zu Problemen geführt hat.)
Wenn Sie dies tun, wird die mergeinfo-Eigenschaft 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, in das Stammverzeichnis ein (Sie können auch hier einfach die vollständige Liste einfügen und SVN die Unterschiede für Sie ermitteln lassen).
quelle
Um Änderungen an einer Verzeichnisstruktur vorzunehmen, wäre dies (nur Nicht-DOS-Suche):
Beim Ausführen eines 1.6.12-Clients, der mit einem 1.5-Server verbunden ist, tritt ein ähnliches Problem auf. Es gibt ein Unterverzeichnis im Projekt, das ein eigenes svn: mergeinfo benötigt, aber 121 solcher Einträge (einschließlich 5 Verzeichnisse unten ./var mit "svn: ignore *") scheinen etwas unangemessen. Daher wäre es schön, ein (zB Python-) Skript zu haben, das in der Lage ist, die offensichtlich überflüssigen Zusammenführungsinformationen zu entfernen und über andere Unterschiede zu berichten ...
quelle