Cosa significa lo status symbol di Subversion “~”?


110

Ricevo un simbolo tilde quando eseguo un file svn status.

Ecco l'output del progetto dopo averlo modificato 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

Qualche idea su cosa significhi? Non riesco a trovarlo su Google o su uno dei cheat sheet di svn.

È interessante notare che ho modificato solo main.m, ma ci sono molti file modificati. Non so perché sarebbe. Qualcuno ha qualche consiglio per lavorare con SVN e XCode? Devo solo mettere i miei file sorgente sotto il controllo della versione?

Modifica: - causato dalla sostituzione di un file che era già sotto il controllo della versione con un file di un altro tipo. In questo caso, strings.pbxstrings era un file e ora è diventato una directory. La morale della storia è di non mettere la cartella build nel controllo della versione.


Hmm, non sono sicuro che ci sia un modo per "aggiustarlo", invece di aggiungere semplicemente di nuovo. Potresti voler pubblicare un'altra domanda chiedendo se c'è un buon modo per risolvere questo stato, potresti ricevere maggiore attenzione (poiché la domanda corrente ha già una risposta).
Chad Birch

Risposte:


88

Il libro SVN dice:

L'elemento è dotato di versione come un tipo di oggetto (file, directory, collegamento), ma è stato sostituito da un diverso tipo di oggetto.

Quindi forse era originariamente un singolo file, ma l'hai cambiato in una directory, o qualcosa del genere?


1
Sembra che tu abbia ragione. Ora è una directory senza file .svn. Qualche idea su come risolverlo? Devo eliminarlo da subversion e aggiungerlo di nuovo?
jergason

qualche possibilità hai trovato un modo per risolvere questo problema?
Phill Pafford

48
La soluzione migliore è rinominare il nuovo oggetto (nel tuo caso, la directory); "svn remove" l'oggetto dal repository che sta causando la collisione (probabilmente un file che hai cancellato), Commit, quindi rinomina di nuovo il nuovo oggetto e "svn aggiungilo" al repository. Impegnati di nuovo. Avrai una sequenza di 3 revisioni in cui il vecchio oggetto esisteva, è stato rimosso e il nuovo oggetto è stato aggiunto, rispettivamente.
Brian Lacy

8
Nel caso in cui qualcuno leggendo questo thread avesse lo stesso problema: questo è successo a me e il motivo dello stato '~' era che avevo alcuni collegamenti simbolici nel repository, che erano stati sovrascritti da file standard da un'operazione 'sed -i' . Ho ricreato i collegamenti simbolici e il "~" è andato via.
jb

5
@ JamieBullock Mi è successa la stessa cosa per lo stesso motivo oggi. Ho provato questo comando prima ancora di sapere quale fosse il problema: svn status | grep ^~ | grep -o [^[:space:]]\*\$ | xargs svn revertche è stato in grado di ripristinare tutti i collegamenti simbolici.
Paul

34

Ecco cosa ho fatto:

Se la cartella è Test

  1. mv Test Test1
  2. svn rimuovere Test
  3. mv Test1 Test

5
Questo ha funzionato per me fintanto che mi sono impegnato tra la rimozione e l'aggiunta. 1. mv Test Test1 2. svn remove Test 3. svn commit -m "Removed Test" 4. mv Test1 Test 5. svn add Test 6. svn commit -m "Added Test"
Brandon Brodjeski

1
La risposta di @sancelot è molto migliore; non è necessario rinominare se si utilizza svn delete --keep-local fileName.
DawnSong

15

A partire dal

svn help status

Oggetto con versione "~" ostruito da un oggetto di tipo diverso

Ho visto solo questo dove i permessi del file erano cambiati e svn non aveva accesso in esecuzione su di esso, credo.

Spero che questo ti aiuti.


12

Il modo più semplice per risolvere questo problema è eseguire il backup, quindi eliminare la cartella o il file che ha questo stato e quindi eseguire "svn up": non è necessariamente una cartella riposizionata da un file, potrebbe essere solo che la cartella .svn è mancante o danneggiata .


11
svn delete --keep-local x
svn commit -m "del x"
svn add x
svn commit -m "blah"

Non c'è bisogno di rinominare. Hai dato la risposta migliore.
DawnSong

Migliore risposta! Questo risolve il problema. Nel mio caso si trattava di un collegamento software eseguito come file normale.

10

Ciò può accadere quando rimuovi la cartella .svn in una cartella (ad esempio quando rimuovi una directory e quindi crei di nuovo la stessa directory), o quando sostituisci una directory con un collegamento simbolico o un file con lo stesso nome .

Supponendo che sia una cartella chiamata a-folder, puoi risolvere questo problema immettendo i seguenti comandi nella cartella principale:

$ 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.

E poi è questione di svn che aggiunge / rimuove e conferma nuovamente le modifiche


3

Aveva un problema simile, SVN si lamentava di un blocco. Ecco cosa abbiamo fatto:

  • Backup dei file
  • Rimossa la directory in questione con rm -r (linux)
  • Ran svn cleanup nella directory
  • Ran svn up --force sulla directory

3

Voglio solo condividere che questo è un problema riscontrato frequentemente durante l'installazione di estensioni all'interno di Joomla. Le estensioni vengono installate tramite il CMS e sono di proprietà di Apache senza scrittura di gruppo. Generalmente il passaggio successivo consiste nell'aggiungere i file all'SVN, ma se non si sudo o non si modificano i perms dei file, SVN fallisce quando non può scrivere la directory .svn. Ecco la soluzione facile.

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

2

Potrebbe anche trattarsi di collegamenti simbolici in Windows. Quando si esegue il commit del collegamento simbolico in SVN e quindi lo si verifica in Windows, i collegamenti vengono modificati in file normali e questo viene anche segnalato come ~.


1
Quindi come si risolve questo problema?

2

Ho avuto spesso questo durante l'aggiornamento dei moduli sotto (ad es.) Joomla !, Wordpress o Drupal. A volte la directory .svn viene rimossa dal processo di aggiornamento.

# 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"

0
~ versioned item obstructed by some item of a different kind
    Second column: Modifications of a file's or directory's properties
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.