Was bedeutet das Subversion-Statussymbol "~"?

110

Ich bekomme ein Tilde-Symbol, wenn ich ein mache svn status.

Hier ist die Ausgabe des Projekts nach der Bearbeitung in XCode.

svn status
M      build/Currency_Converter.build/Currency_Converter.pbxindex/imports.pbxbtree
M      build/Currency_Converter.build/Currency_Converter.pbxindex/pbxindex.header
M      build/Currency_Converter.build/Currency_Converter.pbxindex/symbols0.pbxsymbols
~      build/Currency_Converter.build/Currency_Converter.pbxindex/strings.pbxstrings
M      main.m
//more changed files

Irgendeine Idee was das bedeutet? Kann es nicht auf Google oder einem der SVN-Spickzettel finden.

Interessanterweise habe ich nur main.m bearbeitet, aber es gibt viele geänderte Dateien. Keine Ahnung, warum das so wäre. Hat jemand Tipps für die Arbeit mit SVN und XCode? Sollte ich meine Quelldateien nur der Versionskontrolle unterwerfen?

Bearbeiten: - verursacht durch eine Datei, die bereits unter Versionskontrolle stand und durch eine Datei eines anderen Typs ersetzt wurde. In diesem Fall war strings.pbxstrings früher eine Datei und wurde jetzt zu einem Verzeichnis. Die Moral der Geschichte ist, dass Sie Ihren Build-Ordner nicht in die Versionskontrolle stellen.

Jergason
quelle
Hmm, ich bin mir nicht sicher, ob es eine Möglichkeit gibt, das Problem zu beheben, anstatt es nur neu hinzuzufügen. Möglicherweise möchten Sie eine weitere Frage stellen und fragen, ob es eine gute Möglichkeit gibt, diesen Status zu beheben. Sie erhalten mehr Aufmerksamkeit (da die aktuelle Frage bereits beantwortet ist).
Chad Birch

Antworten:

88

Das SVN-Buch sagt:

Das Element ist als eine Art von Objekt (Datei, Verzeichnis, Link) versioniert, wurde jedoch durch eine andere Art von Objekt ersetzt.

Vielleicht war es ursprünglich eine einzelne Datei, aber Sie haben sie in ein Verzeichnis geändert oder etwas in dieser Richtung?

Chad Birch
quelle
1
Es sieht so aus, als ob du recht hast. Es ist jetzt ein Verzeichnis ohne .svn-Datei. Irgendeine Idee, wie man das behebt? Muss ich es aus der Subversion löschen und erneut hinzufügen?
Jergason
Gibt es eine Chance, dass Sie einen Weg gefunden haben, dies zu beheben?
Phill Pafford
48
Die beste Lösung besteht darin, das neue Objekt (in Ihrem Fall das Verzeichnis) umzubenennen. "svn remove" das Objekt aus dem Repository, das die Kollision verursacht (wahrscheinlich eine von Ihnen gelöschte Datei), Commit, benennt das neue Objekt wieder um und "svn add" es zum Repository. Wieder festschreiben. Sie haben eine Folge von 3 Revisionen, in denen das alte Objekt vorhanden war, entfernt und das neue Objekt hinzugefügt wurde.
Brian Lacy
8
Falls jemand, der diesen Thread liest, das gleiche Problem hat: Dies ist mir passiert und der Grund für den Status '~' war, dass ich einige symbolische Links im Repository hatte, die durch Standarddateien durch eine 'sed -i'-Operation überschrieben wurden . Ich habe die symbolischen Links neu erstellt und das '~' ging weg.
jb
5
@ JamieBullock Hatte mir heute aus dem gleichen Grund dasselbe passiert. Ich habe diesen Befehl ausprobiert, bevor ich überhaupt wusste, wo das Problem lag: svn status | grep ^~ | grep -o [^[:space:]]\*\$ | xargs svn revertAlle Symlinks konnten wiederhergestellt werden.
Paul
34

Folgendes habe ich getan:

Wenn der Ordner Test ist

  1. mv Test Test1
  2. svn Test entfernen
  3. mv Test1 Test
Tuong Le
quelle
5
Dies funktionierte für mich, solange ich mich zwischen Entfernen und Hinzufügen engagierte. 1. mv Test Test1 2. svn entfernen Test 3. svn commit -m "entfernter Test" 4. mv Test1 Test 5. svn add Test 6. svn commit -m "hinzugefügter Test"
Brandon Brodjeski
1
Die Antwort von @sancelot ist viel besser; Sie müssen nicht umbenennen, wenn Sie verwenden svn delete --keep-local fileName.
DawnSong
15

Von

svn help status

'~' versionierter Gegenstand, der durch einen Gegenstand einer anderen Art blockiert ist

Ich habe dies nur gesehen, wo sich die Dateiberechtigungen geändert hatten und svn keinen Ausführungszugriff darauf hatte, glaube ich.

Hoffe das hilft.


quelle
12

Der einfachste Weg, dies zu beheben, besteht darin, den Ordner oder die Datei mit diesem Status zu sichern, dann zu löschen und dann "svn up" auszuführen: Es handelt sich nicht unbedingt um einen Ordner, der durch eine Datei ersetzt wurde. Möglicherweise fehlt nur der .svn-Ordner oder ist beschädigt .

Deadprogrammer
quelle
11
svn delete --keep-local x
svn commit -m "del x"
svn add x
svn commit -m "blah"
Sancelot
quelle
Keine Umbenennung erforderlich. Du hast die beste Antwort gegeben.
DawnSong
Beste Antwort! Dies behebt das Problem. In meinem Fall war es ein Softlink, der als reguläre Datei festgeschrieben wurde.
10

Dies kann passieren, wenn Sie den .svn-Ordner in einem Ordner entfernen (z. B. wenn Sie ein Verzeichnis entfernen und dann dasselbe Verzeichnis erneut erstellen) oder wenn Sie ein Verzeichnis durch einen symbolischen Link oder eine Datei mit demselben Namen ersetzen .

Angenommen, es handelt sich um einen Ordner namens a-Ordner, können Sie dies beheben, indem Sie die folgenden Befehle im übergeordneten Ordner eingeben:

$ find a-folder -type d -name '.svn' -print0 | xargs -0 rm -Rf
$ svn up --force .
svn: Directory 'logs/.svn' containing working copy admin area is missing
$ svn up --force .
E    a-folder
...
Updated to revision n.

Und dann geht es darum, die Änderungen erneut hinzuzufügen / zu entfernen und festzuschreiben

Jorge Muñoz
quelle
3

Hatte ein ähnliches Problem, beschwerte sich SVN über eine Sperre. Folgendes haben wir getan:

  • Sicherte die Dateien
  • Das betreffende Verzeichnis wurde mit rm -r (Linux) entfernt.
  • Ran svn Bereinigung im Verzeichnis
  • Ran svn up --force im Verzeichnis
MW Felker
quelle
3

Ich möchte nur mitteilen, dass dies ein Problem ist, das häufig bei der Installation von Erweiterungen in Joomla auftritt. Die Erweiterungen werden über das CMS installiert und gehören Apache ohne Gruppenschreiben. Im Allgemeinen besteht der nächste Schritt darin, die Dateien zum SVN hinzuzufügen. Wenn Sie die Datei-Dauerwellen jedoch nicht sudo oder ändern, schlägt der SVN fehl, wenn das .svn-Verzeichnis nicht geschrieben werden kann. Hier ist die einfache Lösung.

mv foo foo-bak
svn up foo
svn revert foo

# just for good measure. Foo should not show up in the two following commands.
ls | grep foo
svn st | grep foo

mv foo-bak foo
svn add foo
Collin James
quelle
2

Es kann sich auch um symbolische Links unter Windows handeln. Wenn Sie einen symbolischen Link in SVN festschreiben und ihn dann unter Windows auschecken, werden Links in reguläre Dateien geändert, und dies wird auch als ~ gemeldet.

zbyszanna
quelle
1
Wie können Sie das beheben?
2

Ich hatte dies oft beim Upgrade von Modulen unter (z. B.) Joomla!, Wordpress oder Drupal. Manchmal wird das .svn-Verzeichnis durch den Aktualisierungsprozess entfernt.

# rename updated directory
mv foo foo.new

# restore the old directory
svn up foo

# merge / update the old directory with new items
# notice that the above command will preserve the obsolete files
# so you should do a diff -r in order to remove them
cp -r foo.new/* foo

# Add files commit, etc
svn add foo/*
svn delete foo/xx
svn commit -m "updated module"
Marc Druilhe
quelle
0
~ versioned item obstructed by some item of a different kind
    Second column: Modifications of a file's or directory's properties
Nanhe Kumar
quelle