Status "S" in Subversion

80

Irgendwann wurden alle Dateien in meiner Arbeitskopie mit dem Symbol "S" markiert, wie unten gezeigt:

$ svn st
M    S   AclController.php
     S   InstallationController.php
     S   CustomerController.php
     S   RedirController.php
     S   IndexController.php
     S   LoginController.php
     S   OrderController.php
     S   ProductController.php
     S   SelfInstallController.php
     S   SelfcareController.php

Interessanterweise tritt es nur in dieser bestimmten Arbeitskopie auf - wenn ich das Projekt in ein neues Verzeichnis auschecke, werden die "S" -Markierungen nicht angezeigt.

Wie kann man diese nervigen "S" -Symbole loswerden? Dies verringert die Klarheit des WC-Status erheblich.

Update: Ich wechsle von Zeit zu Zeit mit Standard- svn switchSyntax. Dieses "S" -Symbol wurde bis vor kurzem nie angezeigt. Der zum Umschalten verwendete Befehl lautete:

svn switch svn+ssh://xxxxxx/subversion/xxxxxxx/releases/1.0.16 .

Kann ich das "S" -Flag auf irgendeine Weise löschen?

Michał Rudnicki
quelle
7
Status S bedeutet laut "geschaltet" svn h st. Was das aber bedeutet ...
me_and
1
@me_and: Arbeitskopien wechseln
Chris J
1
Nur zur Veranschaulichung - da dies das nächste Problem ist, das ich online gefunden habe - hatten wir ein Problem mit der S-Flagge, als wir versuchten, einen Zweig in den Trunk zusammenzuführen. Es hatte damit zu tun, dass wir externe Geräte verwendeten. Sie wurden auf dem Zweig entfernt, aber der Stamm verwies weiterhin auf sie, sodass sie nicht zusammengeführt werden konnten. Die Lösung bestand darin, die externen Elemente, die wir auf dem Zweig in Trunk entfernt haben, zu entfernen, Trunk festzuschreiben und erneut zu integrieren. Hoffe das hilft jemandem auf dem Weg :) Prost!
Darío Javier Cravero

Antworten:

76

Dies bedeutet, dass sich die Dateien von einem anderen Speicherort in Ihrem Subversion-Repository befinden als das Verzeichnis, in dem sie enthalten sind. Die Lösung besteht darin, die gesamte Arbeitskopie an denselben Speicherort zu verschieben. Weitere Informationen zum Aufrufen des Befehls finden Sie in den beiden Abschnitten des Subversion-Buches.

Andrew Aylett
quelle
35
Ich habe gesehen, dass dies auch passiert, wenn ein "svn switch" -Befehl durch einen Konflikt unterbrochen wird, z. B. durch den Zweig, zu dem Sie wechseln, mit einer Repository-Version einer lokalen Datei, die nicht festgeschrieben ist. Wenn Sie aus svn herausspringen, um das Problem zu beheben, wird die gesamte Arbeitskopie unvollständig umgeschaltet. Das Problem zu beheben und dann den Befehl switch erneut auszuführen, funktioniert bei mir.
Michael H.
4
Ich hatte dies nach einem Fehler - E210002: Netzwerkverbindung unerwartet geschlossen. Das erneute Ausführen des Schaltbefehls schien das Problem zu beheben, und der Status "S" war verschwunden.
Kevin Sadler
1
Dies wird durch eine Unterbrechung während des SVN-Schalters verursacht. Sei vorsichtig.
SandorRacz
2
Kevin Sadler bietet tatsächlich die Lösung und beschreibt nicht nur das Problem. +1
ahnbizcad
11

Wenn Sie 'svn info' im Verzeichnis selbst und in (einer) der darin enthaltenen Dateien aufrufen, erhalten Sie zwei verschiedene URLs.

Sie erhalten den Status 'S', wenn die URL einer Datei / eines Verzeichnisses nicht mit der URL des übergeordneten Elements übereinstimmt, gefolgt vom Namen der Datei.

Können Sie die URL des übergeordneten und eines der untergeordneten Knoten veröffentlichen? (gegebenenfalls Anonymisierung der URL)

Bert Huijben
quelle
Obwohl dies keine Antwort ist, ist diese 'Antwort' sehr hilfreich, um einige Hinweise darauf zu geben, was los ist.
FlipMcF
Dies ist keine Antwort.
Ahnbizcad
8

Ich hatte den Status ' S ', als ich von Trunk (r100) zu einem Zweig (r50) wechselte. Ich habe den Fehler bekommen:

svn: Failed to add file 'web/.htaccess': an unversioned file of the same name already exists

Alle Unterverzeichnisse des Webs waren mit ' S ' gekennzeichnet.

Die Ursache: Ich hatte .htaccess to svn: ignore it (r100) gelöscht und dann erneut erstellt (nicht versioniert und ignoriert). Die Filiale (r50) hatte noch Web / .htaccess im Repo.

Die Lösung :

mv web/.htaccess ../../
svn switch back to trunk
svn switch to branch again

Alles ist gut.

sglessard
quelle
Ich hatte einen ähnlichen Fehler, aber ich habe meine fehlerhafte Version von "web / .htaccess" gelöscht (weil es für mich mehrere Verzeichnisse waren) und ein SVN-Update durchgeführt und dann von Trunk zu einem bestimmten Tag zurück zu Trunk gewechselt (das bestimmte Tag war tatsächlich eine Kopie des Kofferraums ...) und die fehlerhaften 'S'-Flaggen verschwanden.
Kasapo
6

Ich hatte dieses Problem mit einem Verzeichnis, das ich erfolgreich für SVN festgeschrieben habe. Die Lösung für mich war, es lokal zu löschen und dann zu aktualisieren. Ich konnte keine Unterschiede feststellen, aber die .svn-Datei wurde aus irgendeinem Grund behoben (kein S mehr).

Eli
quelle
Ich hatte dies in einem externen SVN nach dem Update auf einen neueren Zweig geschehen. Das manuelle Löschen des gesamten externen Geräts und das Ausführen von svn update haben das Problem behoben. +1!
Stephen Fuhry
5

Dies wird normalerweise durch eine Unterbrechung beim Wechseln der Zweige verursacht.

Wechseln Sie zu einem anderen Zweig und dann zurück zu dem Zweig, den Sie wirklich wollen.

svn switch some_other_branch_url

svn switch desired_branch_url

ahnbizcad
quelle
4

Nur eine Bemerkung: Ich habe das gleiche S-Symbol erhalten, als ich ein gelöschtes Verzeichnis an derselben Stelle im Repository ausgecheckt habe, aber eine andere URL verwendet habe , dh mit unterschiedlichen Protokollen zum Auschecken wie 'svn checkout svn + ssh: // user @ scm .gforge ... 'gegen' svn checkout --username user https: //scm.gforge .... '. Ich habe es gelöst, indem ich es erneut ausgecheckt habe, indem ich dieselbe URL verwendet habe, die ich beim ersten Auschecken verwendet habe.

André Lage
quelle
Das erneute Auschecken mit demselben URI hat das Problem behoben. Vielen Dank.
September
4

Für den Fall, dass jemand zu spät nach der Antwort sucht (die oben korrekt angegeben ist), glaube ich, dass eine wahrscheinliche Ursache für diese Situation ein 'svn-Schalter' in einem übergeordneten Verzeichnis ist, der fehlschlägt (wie im Fall einer lokalen nicht festgeschriebenen Datei mit der gleiche Name und keine Option --force), sodass alle Dateien nach dem Fehler "nicht umgeschaltet" bleiben.

Aus diesem Grund (vorausgesetzt, das ursprüngliche Problem wird später behoben) wird ein nachfolgender "svn switch" erneut im selben übergeordneten Verzeichnis die verbleibenden nicht geschalteten Dateien in einen neuen Repo-Pfad verschieben.

John Kennedy
quelle
3

Dies bedeutet, dass Sie von einer Arbeitskopie zu einer anderen gewechselt haben, beispielsweise eine Arbeitskopie ausgecheckt und dann ausgetauscht haben, um sie mit einem Codezweig zu vergleichen. Weitere Informationen zum Rückgängigmachen finden Sie im SVN-Buch .

ich und
quelle
1
Beachten Sie, dass der Link zu einer veralteten Version des SVN-Buches führt. Versuchen Sie es hier: svnbook.red-bean.com/de/1.5
Andrew Aylett
Gute Stelle. Google fällt mir wieder aus.
me_and
3

Es gibt noch eine andere Möglichkeit, diesen Status zu erreichen - was hoffentlich jemandem Zeit spart, ihn aufzuspüren.

Ich habe eine externe Bibliothek in mein SVN-Stammverzeichnis entpackt, und es stellte sich heraus, dass der Autor eines Drittanbieters versehentlich seinen eigenen .svn-Ordner in einen seiner Ordner aufgenommen hat. Dies überschreibt natürlich unseren eigenen, korrekten Subversion-Ordner und hat den gleichen Effekt wie an anderer Stelle auf dieser Seite beschrieben - ein Ordner scheint unerwartet in einen anderen Zweig gewechselt zu sein.

halfer
quelle
1
Ja, ich hatte das gerade. Ich hatte ein Verzeichnis mit Symbolen von einem Projekt in ein anderes kopiert, ohne die .svnVerzeichnisse zu löschen . Exportieren Sie entweder ein sauberes Verzeichnis zur Verwendung oder löschen Sie die .svn-Verzeichnisse nach dem Kopieren, und es wird svn addvorhersehbar.
Eric
1

"Gegenstand ist geschaltet."

Wenn Sie "svn switch" für Ihre Arbeitskopie verwendet haben, könnte dies dies erklären?

stiank81
quelle
Ich habe jetzt versucht, den Befehl switch zu verwenden, aber ich habe nie das Status 'S' erhalten. Haben Sie gewechselt? Und haben Sie es auf eine Art und Weise getan, die nicht zum Mainstream gehört?
stiank81
0

Für mich geschieht dies, wenn der Befehl "svn switch" unterbrochen wird. Um ihn mit TortoriseSVN zu lösen, klicke ich mit der rechten Maustaste auf die Datei und wähle " Zurück zum übergeordneten"

Alireza Fattahi
quelle
0

Eine einfache Lösung, um das 'S' loszuwerden, wenn Sie Probleme haben

svn status

Gehen Sie einfach zu dem mit 'S' gekennzeichneten Verzeichnis und löschen Sie das versteckte .svn-Verzeichnis:

rm -rf .svn

Danach werden die Quellen mit '?' und Sie könnten sie leicht frisch hinzufügen:

svn Pfad / zu / Ressource hinzufügen

Torsten Barthel
quelle
In meinem Fall wurde das 'S' neben Ressourcen angezeigt, die ich von einem anderen Repo auf demselben Server hinzugefügt habe, sodass die oben beschriebene Lösung offensichtlich war.
Torsten Barthel
0

In meinem Fall wurden zwei Unterverzeichnisse in der Verzweigung im Trunk gelöscht. Ich habe von Trunk den Zweig aus dem Verzeichnis der obersten Ebene gewechselt und bin dann zurück zu Trunk gewechselt und habe festgestellt, dass das Problem mit diesen Unterverzeichnissen jetzt im Status istS .

Ich habe die Antwort von @ahnbizcad als Richtlinie verwendet. Aus dem übergeordneten Verzeichnis (das sich selbst unter dem Verzeichnis der obersten Ebene befindet) der Unterverzeichnisse:

svn sw <branch_url>

svn sw <trunk_url>

Soumya Kanti
quelle
-6

Ich schlage vor, Sie lesen die offizielle Hilfe, versuchen Sie:

svn st --help

oder

svn st --help | grep S

'S' the item has a Switched URL relative to the parent
Siwei Shen 申思维
quelle
4
RTFM beantwortet nicht die Frage, wie dieser Status beseitigt werden kann.
Madoc