web-dev-qa-db-fra.com

Fichier renommé, maintenant SVN ne me permettant pas de commettre?

Je développe un site Web ColdFusion utilisant Aptana. Nous utilisons SVN pour le contrôle de version.

J'ai renommé quelques fichiers et j'essaye maintenant de valider l'un d'entre eux, mais j'obtiens l'erreur suivante:

'SVN Commit' has encountered a problem.
org.Apache.Subversion.javahl.ClientException: Illegal target for the requested operation
svn: Commit failed (details follow):
svn: Cannot commit 'R:\myPath\My-New-File-Name.cfm' because it was moved from 'R:\myPath\My-Old-File-Name.cfm' which is not part of the commit; both sides of the move must be committed together

Cela semble indiquer que je dois valider le fichier précédent (qui a été renommé) et le nouveau fichier renommé. Comment puis-je valider un fichier qui n'existe plus ...?

45
froadie

Commit le répertoire, pas le fichier.

Pensez à un répertoire comme à un fichier texte contenant la liste des fichiers qu’il contient. Ensuite, vous verrez que pour valider, vous devez mettre à jour le répertoire lui-même afin qu’il puisse supprimer l’ancienne entrée et ajouter la nouvelle. Ceci apparaîtra dans SVN en tant que suppression de l'ancien et ajout du nouveau fichier (c.-à-d. 2 modifications apportées au répertoire, pas 1 modification au fichier)

Si vous souhaitez uniquement valider le fichier 1, vous devrez ajouter temporairement les autres fichiers modifiés à une liste de personnes ignorées.

83
gbjbaanb

Divers clients semblent mieux gérer cela que d'autres.

AnkhSVN pour Visual Studio rencontre cette erreur et ne peut pas la gérer.

TortiseSVN (extension Shell) fonctionne cependant - il sait supprimer l'ancien fichier et ajouter le nouveau. 

Donc, si vous êtes sur Windows, un moyen facile de contourner ce problème consiste à utiliser TortiseSVN à partir de l'explorateur pour effectuer une validation du répertoire (ce qui supprime l'ancien nom de fichier et ajoute le nouveau).

12
Ray Ackley

Dans Eclipse avec Subversion, j'ai pu contourner cette erreur déroutante en faisant une équipe-> synchroniser à un dossier de niveau suffisamment élevé dans le projet pour qu'il englobe à la fois les anciens et nouveaux noms de fichiers et leurs emplacements. Si vous avez déplacé et renommé vos fichiers ou si vous ne pouvez pas savoir exactement ce qui se passe, la synchronisation au plus haut niveau de votre projet ne fait pas de mal.

Lorsque j'ai fait cela, les anciennes versions des fichiers renommés sont apparues dans la vue Synchroniser. Une fois que j'ai utilisé "écraser et commettre" sur eux, ils ont de nouveau disparu. À ce stade, les nouveaux s'engageront enfin correctement.

6
Paul Cuddihy

Ajouter un fichier avec l'ancien nom et valider, supprimez à nouveau le fichier, validez.

6

Il est possible que l'un des fichiers soit renommé.

Examinez les noms de fichiers dans l’erreur et voyez si cela correspond à vos fichiers.

Si les noms de fichier ne correspondent pas, renommez votre fichier en celui de l'erreur et validez tous les fichiers que vous souhaitez valider . Après cela, vous pourrez renommer votre fichier et commettre à nouveau.

2
MCollard

Si les choses se gâchent vraiment, la solution la plus simple consiste à supprimer le dossier du référentiel, puis à le rajouter sous sa forme actuelle.

SVN Essuyez et remplacez:

  1. Copiez le dossier contenant toutes vos modifications dans un emplacement temporaire.
  2. Utilisez SVN Delete sur le dossier, puis validez.
  3. Copiez la copie de sauvegarde sur votre copie de travail et validez.
0
Preston McCormick

svn commit 'R:\MonPath\Mon-Nouveau-Nom-Fichier.cfm' 'R:\MonPath\Mon-Ancien-Nom-Fichier.cfm' -m "message"

travaille pour moi. Vous devez également inclure le fichier supprimé.

0
rkiko

Pour Visual Studio 2015, j'ai trébuché sur un correctif pour Ankh SVN. Dans mon cas, l’erreur résultait du fait que vous avez renommé "Form1.cs" au cours du développement (et éventuellement en l’avait déplacé). Cela a causé des problèmes avec les anciens et nouveaux fichiers .resx.

  • Mettez le projet en surbrillance dans l'explorateur de solutions pour ouvrir la fenêtre d'affichage des modifications en attente.
  • Choisissez Fichier> Sous-version> Modifications en attente
  • Décocher le chemin
  • Vérifiez les deux fichiers ou plus nécessaires à Subversion. Si "nouveau" ne figure pas dans la liste, modifiez son contenu de manière non destructive afin qu'il apparaisse dans la liste.
  • Exécutez le commit.

J'espère que cela fonctionne pour toi.

0
Tad Macy

Si vous utilisez IntelliJ IDEA et que vous validez avec TortoiseSVN, il arrive parfois que le dossier ne soit pas supprimé par IDEA et Subversion commette cette erreur. 

Dans ce cas, cela signifie "s'il vous plaît, ne validez pas un dossier/fichier que vous avez marqué comme supprimé"

0
Chavjoh