Donc, j’avais un répertoire appelé mysql il ya quelques versions. Je l'ai supprimé et j'ai décidé de recommencer, mais lorsque j'essaie de créer le nouveau répertoire mysql, je rencontre toujours l'erreur "Le fichier existe déjà":
support:/etc/puppet/modules# mkdir mysql
support:/etc/puppet/modules# svn add mysql/
A mysql
support:/etc/puppet/modules# svn commit -m " Test"
Adding modules/mysql
svn: Commit failed (details follow):
svn: File already exists: filesystem '/var/lib/svn/puppet/db', transaction '11-r', path '/trunk/modules/mysql'
support:/etc/puppet/modules# svn delete mysql
svn: Use --force to override this restriction
svn: 'mysql' has local modifications
support:/etc/puppet/modules# svn --force delete mysql
D mysql
J'ai vu d'autres publications suggérer de forcer une mise à jour
support:/etc/puppet/modules# svn status
support:/etc/puppet/modules# svn update
At revision 11.
support:/etc/puppet/modules# svn mkdir mysql
A mysql
support:/etc/puppet/modules# svn commit -m "Test"
Adding modules/mysql
svn: Commit failed (details follow):
svn: File already exists: filesystem '/var/lib/svn/puppet/db', transaction '11-s', path '/trunk/modules/mysql'
J'ai réussi à contourner ce problème en revenant à la dernière version dans laquelle j'avais le répertoire mysql, puis en supprimant le contenu, en y mettant le nouveau contenu et en vérifiant les nouvelles informations. Bien que je sois curieux de savoir si n'importe qui a une meilleure explication de ce qui se passait là-bas.
J'ai eu un problème comme celui-ci lorsque j'ai supprimé un dossier (et des sous-dossiers) et que je suis allé à les recréer à partir de zéro. Vous obtenez cette erreur en supprimant et en rajoutant manuellement des dossiers (alors que des fichiers semble bien se débrouiller avec ça).
Après quelques déconvenues frustrantes, j'ai trouvé que je devais:
(en utilisant TortoiseSVN sous Windows)
svn update
Qui rajoute d'anciens fichiers/dossiers dans la copie de travailsvn delete
commit
commit
Malheureusement, il (A) nécessite deux validations et (B) perd l'historique des révisions de fichier car il ne fait que remonter à la dernière ajout récente (à moins que quelqu'un ne puisse expliquer comment résoudre ce problème). Une solution alternative qui contourne ces 2 problèmes consiste à ignore les étapes 3 et 4, le seul problème étant que des fichiers anciens/inutiles peuvent toujours être présents dans votre répertoire. Vous pouvez les supprimer manuellement.
J'adorerais entendre des idées supplémentaires que d'autres pourraient avoir à ce sujet.
Simon.
[Mise à jour] OK, j'ai eu ce même problème à ce moment-là, mais le dossier incriminé n'était PAS dans le dernier commit, donc un update
ne l'a pas restauré. Au lieu de cela, je devais parcourir le référentiel et delete
le dossier incriminé. Je pourrais alors add
revenir dans le dossier et commit
avec succès.
Avait un problème similaire. Pour le résoudre, mis à jour à partir de svn trunk avec l'option de priorité des fichiers locaux.
svn update path/ --accept=mine-full
Après vous pourriez vous engager comme d'habitude. Bien sûr, soyez prudent en l'utilisant.
déjà eu ce type de problème.
ma solution était:
supprimez le dossier de svn mais conservez une copie du dossier quelque part, validez les modifications. dans la copie de sauvegarde, supprimez récursivement tous les dossiers .svn qu’il contient. pour cela vous pourriez courir
#!/bin/bash
find -name '.svn' | while read directory;
do
echo $directory;
rm -rf "$directory";
done;
supprimez le référentiel local et re-vérifiez tout le projet. Je ne sais pas si la suppression ou le contrôle partiel est suffisant.
cordialement
C’est une méchante erreur mystérieuse qui n’a pas de solution claire.
update/revert/commit ne fonctionnait PAS dans ma situation. Je n'avais rien fait de bizarre - juste quelques mouvements svn.
Quel travail DID a été pour moi:
svn remove offender
svn commit
cd ..
rm -fR parent
svn up parent
cd parent
svn remove offender again
svn commit
copy offender back in (minus .svn dirs)
svn add
svn commit
Bizarre pour le moins. Fondamentalement, le svn remove --force offender
ne supprimait pas complètement pour une raison quelconque. C'est en quelque sorte ce que disait le message d'erreur. Ce n'est qu'en supprimant le parent, puis en le mettant à jour, que cela est devenu évident, car le délinquant a réapparu! svn retirer le délinquant à nouveau puis correctement supprimé.
Cette solution se fond parfaitement et ne perd pas de l'historique:
J'ai rencontré ce problème aujourd'hui quand Xcode est tombé en panne lors d'une fusion de branche. D'une manière ou d'une autre, le fichier a été chargé dans le référentiel svn mais il n'a pas été enregistré correctement dans la base de données svn. J'ai exécuté les commandes suivantes dans le répertoire où le fichier existait localement:
svn revert bad.file
svn del svn://my.svnserver.com/svnDB/path/to/the/offending/file/bad.file
Ensuite, j'ai ré-ajouté le fichier à partir de mon système local:
svn add bad.file
svn commit -m "Re adding bad.file"
Succès!
J'ai eu ce problème sur un projet que je lance sur Netbeans. J'ai simplement cliqué avec le bouton droit sur le fichier et mis à jour pour le réparer (après SVN).
Je ne sais pas si cela vous aide, mais je suppose que lorsque vous faites un svn add mysql
après que vous l’ayez effacé, le dossier sera ré-instancié (alors ne faites pas un mkdir vous-même). Si vous créez un répertoire vous-même, svn attend un répertoire .svn à l'intérieur de celui-ci car il le sait déjà.
Selon la solution d’Atmocreation, il n’est pas nécessaire de revérifier l’ensemble du projet, ce qui est utile si vous avez déjà des travaux en cours.
Disons que vous avez une copie de travail:
/foo/
qui contient des répertoires:
/foo/bar/baz
et vous obtenez le message d'erreur sur commit:
svn: File already exists: filesystem '/foo/bar'
Sauvegardez le contenu de la barre quelque part:
mkdir -p ~/tmp/code_backup
cp -r /foo/bar ~/tmp/code_backup
Supprimez les répertoires de contrôle .svn de la sauvegarde. Assurez-vous de bien exécuter cette commande, sinon vous pouvez faire des dégâts assez graves !! Supprimez-les manuellement si vous n'êtes pas sûr.
find ~/tmp/code_backup/bar -name .svn -type d -exec rm -rf {} \;
Vérifiez que la copie est identique:
diff -r -x .svn dist ~/tmp/code_backup/dist
Supprimez le répertoire incriminé de la copie de travail: cd/foo rm -rf bar
Et puis le restaurer depuis le référentiel:
cd /foo
svn update bar
Recopiez les fichiers modifiés à partir de la sauvegarde:
cp -r ~/tmp/code_backup/bar /foo/
Vous devriez maintenant pouvoir commettre sans l'erreur.
Ce dont vous avez besoin, c'est de la commande svn 'export'. Avec cela, vous pouvez mettre un fichier ou une arborescence de répertoires complète dans l'état d'une autre révision dans une autre branche.
Donc quelque chose comme
rm file #without 'svn' in front!
svn export myrepo/path/to/file@<revision> .
svn commit
Cette situation s'est produite s'il y a un objet dans le référentiel, qui crée par la transaction en cours.
Scénario simple:
Même chose lorsque vous ajoutez les mêmes fichiers à partir de deux copies de travail.