Que signifie le symbole de statut Subversion «~»?

110

J'obtiens un symbole tilde lorsque je fais un svn status.

Voici la sortie du projet après l'avoir édité dans 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

Une idée de ce que cela signifie? Je n'arrive pas à le trouver sur google ou sur l'une des feuilles de triche svn.

Fait intéressant, je n'ai édité que main.m, mais il y a beaucoup de fichiers modifiés. Je ne sais pas pourquoi cela serait. Quelqu'un a-t-il des conseils pour travailler avec SVN et XCode? Dois-je uniquement mettre mes fichiers source sous contrôle de version?

Edit: - provoqué par le remplacement d'un fichier déjà sous contrôle de version par un fichier d'un autre type. Dans ce cas, strings.pbxstrings était autrefois un fichier et est maintenant devenu un répertoire. La morale de l'histoire est de ne pas mettre votre dossier de construction dans le contrôle de version.

Jergason
la source
Hmm, je ne suis pas sûr qu'il existe un moyen de le "réparer", plutôt que de simplement le rajouter. Vous voudrez peut-être publier une autre question demandant s'il existe un bon moyen de résoudre ce statut, vous obtiendrez plus d'attention (puisque la question actuelle est déjà répondue).
Chad Birch

Réponses:

88

Le livre SVN dit:

L'élément est versionné comme un type d'objet (fichier, répertoire, lien), mais a été remplacé par un autre type d'objet.

Alors peut-être était-ce à l'origine un seul fichier, mais vous l'avez changé en répertoire, ou quelque chose du genre?

Chad Birch
la source
1
Il semble que vous ayez raison. C'est un répertoire maintenant sans fichier .svn. Une idée sur la façon de résoudre ce problème? Dois-je le supprimer de subversion et l'ajouter à nouveau?
jergason
avez-vous trouvé un moyen de résoudre ce problème?
Phill Pafford
48
La meilleure solution est de renommer le nouvel objet (dans votre cas, le répertoire); "svn remove" l'objet du référentiel qui est à l'origine de la collision (probablement un fichier que vous avez supprimé), validez, puis renommez le nouvel objet et "svn ajoutez" le au référentiel. Engagez-vous à nouveau. Vous aurez une séquence de 3 révisions où l'ancien objet existait, a été supprimé et le nouvel objet a été ajouté, respectivement.
Brian Lacy
8
Au cas où quelqu'un lisant ce fil aurait le même problème: cela m'est arrivé et la raison du statut '~' était que j'avais des liens symboliques dans le référentiel, qui avaient été écrasés par des fichiers standard par une opération 'sed -i' . J'ai recréé les liens symboliques et le «~» est parti.
jb
5
@JamieBullock La même chose m'est arrivée pour la même raison aujourd'hui. J'ai essayé cette commande avant même de savoir quel était le problème: svn status | grep ^~ | grep -o [^[:space:]]\*\$ | xargs svn revertqui était capable de restaurer tous les liens symboliques.
Paul
34

Voici ce que j'ai fait:

Si le dossier est Test

  1. Test mv Test1
  2. svn remove Test
  3. Test mv Test1
Tuong Le
la source
5
Cela a fonctionné pour moi tant que je me suis engagé entre la suppression et l'ajout. 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 réponse de @sancelot est bien meilleure; vous n'avez pas besoin de renommer si vous utilisez svn delete --keep-local fileName.
DawnSong
15

De

svn help status

'~' élément versionné obstrué par un élément d'un type différent

Je n'ai vu cela que là où les autorisations de fichier avaient changé et svn n'avait pas d'accès d'exécution dessus, je crois.

J'espère que cela t'aides.


la source
12

Le moyen le plus simple de résoudre ce problème est de sauvegarder, puis de supprimer le dossier ou le fichier qui a cet état, puis de faire "svn up": ce n'est pas nécessairement un dossier remplacé par un fichier, il se peut simplement que le dossier .svn soit manquant ou corrompu .

programmeur mort
la source
11
svn delete --keep-local x
svn commit -m "del x"
svn add x
svn commit -m "blah"
sancelot
la source
Pas besoin de renommer. Vous avez donné la meilleure réponse.
DawnSong
Meilleure réponse! Cela résout le problème. Dans mon cas, c'était un lien souple commis en tant que fichier normal.
10

Cela peut se produire lorsque vous supprimez le dossier .svn dans un dossier (par exemple lorsque vous supprimez un répertoire, puis que vous créez à nouveau le même répertoire), ou lorsque vous remplacez un répertoire par un lien symbolique, ou un fichier du même nom .

En supposant qu'il s'agisse d'un dossier appelé a-folder, vous pouvez résoudre ce problème en exécutant les commandes suivantes dans le dossier parent:

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

Et puis il s'agit de svn ajouter / supprimer et valider à nouveau les modifications

Jorge Muñoz
la source
3

Eu un problème similaire, SVN se plaignait d'un verrou. Voici ce que nous avons fait:

  • Sauvegardé les fichiers
  • Suppression du répertoire en question avec rm -r (linux)
  • Ran svn cleanup sur le répertoire
  • Ran svn up --force sur le répertoire
MW Felker
la source
3

Je veux juste partager qu'il s'agit d'un problème fréquemment rencontré lors de l'installation d'extensions dans Joomla. Les extensions sont installées via le CMS et appartiennent à apache sans écriture de groupe. En général, l'étape suivante consiste à ajouter les fichiers au SVN, mais si vous ne sudo ou ne modifiez pas les perms de fichier, alors SVN échoue lorsqu'il ne peut pas écrire le répertoire .svn. Voici la solution simple.

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
la source
2

Il peut aussi s'agir de liens symboliques sous Windows. Lorsque vous validez un lien symbolique dans SVN et que vous le récupérez sous Windows, les liens sont modifiés en fichiers normaux et cela est également signalé comme ~.

zbyszanna
la source
1
Alors, comment résolvez-vous cela?
2

J'ai souvent eu cela lors de la mise à jour de modules sous (par exemple) Joomla !, Wordpress ou Drupal. Parfois, le répertoire .svn est supprimé par le processus de mise à niveau.

# 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
la source
0
~ versioned item obstructed by some item of a different kind
    Second column: Modifications of a file's or directory's properties
Nanhe Kumar
la source