Subversion markiert, unveränderte Dateien als geändert
Hier ein sonderbares problem, das ich gestoßen mit Subversion: bei der Zusammenführung von einem Zweig auf den Stamm (oder zurück, für diese Angelegenheit) Subversion markieren würde eine Menge von Dateien als geändert -- dabei hatte Sie keine änderungen.
Hier ist, was passiert:
- In meinem Zweig ich verpflichte mich, 1 veränderte Datei
- Im Kofferraum, die ich Zusammenführen in diesem commit
- Viele anderen Dateien und Verzeichnisse markiert werden als 'geändert', ohne tatsächlich verändert worden (auch nicht whitespace, line endings, Eigenschaften oder sowas).
Technisch, Begehen diese unverändert änderungen würde keinen Unterschied machen, aber ich will nicht zu Rauschen hinzufügen zu meinen logs.
Jede Idee, was könnte die Ursache dieses ärgernisses, und wie es zu verhindern? Darf ich Fragen, Subversion, warum eine Datei als geändert markiert, so dass ich wissen würde, wenn es den Inhalt der Datei, Eigenschaften, etc.?
FYI: subversion-client in die 1.6.x-Reihe, server 1.5.x-Reihe. Mit einer Kombination von Versionen.app und die CLI auf dem Mac-OS-X-Leopard.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was passiert, ist, dass, sobald eine Datei/Ordner hat explizite mergeinfo (d.h., eine
svn:mergeinfo
Eigenschaft), jede spätere Zusammenführung in den Zweig aktualisieren, die mergeinfo auch wenn die Datei/der Ordner ist nichts. Dies ist in der Tat ärgerlich, da es führt mehr und mehr Unordnung in der änderungsliste für jedes Zusammenführen.Um dies zu vermeiden, nur Zusammenführen, um die "root" - Ordner der Filiale, zum Beispiel "/branches/maintenance2.x". Keine der Dateien oder Ordner unterhalb von "/branches/maintenance2.x" sollten dann mergeinfo. Folgen Sie den Zusammenführen von Beratung im svn-Buch.
Leider, auch wenn Sie fusionieren nur im "root" - Ordner der Filiale leer, leer
svn:mergeinfo
Eigenschaften kann immer noch erscheinen, auf einzelne Dateien und Ordner, wenn Sie kopiert werden, um anzuzeigen, dass Sie noch nicht empfangen haben, das gleiche verbindet wie Ihre Geschwister.Wenn Sie Zusammenführen, nur an der Wurzel, dann ist es wahrscheinlich sicher zu löschen, die überflüssig Teilbaum-mergeinfo. Ein Weg dies zu tun ist, indem Sie eine rekursive Löschung des
svn:mergeinfo
Eigenschaft für jede Datei und jeden Ordner in Ihrem Projekt mit root.Dieser wurde anscheinend behoben in SVN 1.7. Aus den release notes: Reduzierte Teilbaum-mergeinfo änderungen.
Wird die änderung in die Datei-Eigenschaften. Wenn Sie
svn proplist
Sie werden sehen, eine Menge vonmergeinfo
Einträge. Dies ist, weil die svn-tracks vereinigt die Eigenschaften der Datei. Dies ist ein neues feature von 1,5, so dass es nicht auftreten, die in älteren Versionen.Habe ich nie vollständig verstanden werden, der genaue Grund, warum dies geschieht, aber es hat zu tun mit der internen Implementierung undicht durch. Versuchen Sie zu verstehen, ohne zu verstehen, wie svn implementiert ist, soweit ich festgestellt haben, nicht möglich. Allerdings in der Regel der Ursache zu tun hat mit dem Teilbaum-merges. ZB. Wenn Sie Zusammenführen der änderungen von einem Unterverzeichnis oder einer einzigen Datei, anstatt die gesamte branch/tag. Um zu verfolgen, was übertragen wurde, wird subversion die
mergeinfo
- Eigenschaft auf den meisten Knoten allgemein, aber es ist anscheinend nicht intelligent genug, in der Kommissionierung es. Sie können das problem beheben, indem Sie manuell Bearbeitenmergeinfo
. Entfernen Sie einfach die Eigenschaft, aus der alle Knoten unterhalb von trunk, und stellen Sie sicher, dass der Stamm hat alle zusammengeführten Revisionen in seinermergeinfo
. Natürlich, dies bedeutet, dass Sie haben, um sicherzustellen, dass die änderungen tatsächlich übernommen wurden.Alles in allem eher verwirrend, aber die gute Nachricht ist, dass die svn-Entwickler eigentlich sind arbeiten daran, die ganze Sache mehr glatt.
Es möglicherweise irgendeine Art von Eigenschaft ändern, möglicherweise einige automatische änderungen der svn:mergeinfo-Attribut. Können Sie sagen, wenn es eine Eigenschaft änderung durch ausführen von "svn stat". Wenn das "M" ist in der ersten Spalte, es änderungen in Inhalt, wenn es in der zweiten Spalte die Eigenschaft ändert.
svn stat
Ding ist sehr hilfreich, danke.