SVN comment résoudre “local ajouter, à l'arrivée de l'ajouter lors de la mise à jour” à la une *dossier*?
Voici mon scénario:
Supposons que nous avons un repo SVN avec le contenu suivant:
mondossier
myfolder\file.txt
Maintenant j'ai créer deux extractions de ce repo, co1 et co2.
Dans co1 nous modifier file.txt.
Dans de co2 nous:
- svn delete myfolder
- svn commit
- Créer un nouveau dossier nommé myfolder
- svn add myfolder
- svn commit
Maintenant, si je tente une mise à jour dans co1-je obtenir un arbre de conflit:
A + C myfolder > local edit, incoming delete upon update
M + myfolder\file.txt
Je veux garder le dossier et le fichier modifié, j'ai donc résoudre l'arbre de conflit:
svn resolve --accept working folder
Maintenant, si je tente de la commettre, j'obtiens un "svn: le Répertoire '/mondossier' est pas à jour". Si j'essaie de résoudre ce à l'aide de la commande svn up mondossier, je reçois un arbre conflit de nouveau:
A + C folder > local add, incoming add upon update
M + myfolder\file.txt
Ok, donc nous essayons svn resolve --accepter le dossier de travail à nouveau. Mais nous ne pouvons toujours pas commettre, nous obtenons le même message que "svn: le Répertoire '/mondossier' est pas à jour", si nous ne svn up mondossier, nous obtenons le droit de retour pour le dernier arbre conflit.
Quelle est la bonne procédure pour résoudre ce type de conflit (quand nous voulons garder mondossier et ses modifications)?
EDIT: Windows cmd ligne de script pour illustrer:
rmdir /S /Q C:\svntest
mkdir C:\svntest
cd C:\svntest
svnadmin create repo
svn co file:///c:/svntest/repo co1
svn co file:///c:/svntest/repo co2
cd co1
mkdir folder
echo content > folder\file.txt
svn add folder
svn commit folder -m ""
cd C:\svntest\co2
svn up
cd C:\svntest\co1
svn del folder
svn commit -m ""
mkdir folder
svn add folder
svn commit -m ""
cd C:\svntest\co2
echo changed_content > folder\file.txt
svn up
svn resolve --accept working folder
svn commit -m ""
svn up folder
svn resolve --accept working folder
svn commit -m ""
Et voici la sortie de l'exécution de ce script (note de la validation des échecs à la fin):
C:\>rmdir /S /Q C:\svntest
C:\>mkdir C:\svntest
C:\>cd C:\svntest
C:\svntest>svnadmin create repo
C:\svntest>svn co file:///c:/svntest/repo co1
Checked out revision 0.
C:\svntest>svn co file:///c:/svntest/repo co2
Checked out revision 0.
C:\svntest>cd co1
C:\svntest\co1>mkdir folder
C:\svntest\co1>echo content 1>folder\file.txt
C:\svntest\co1>svn add folder
A folder
A folder\file.txt
C:\svntest\co1>svn commit folder -m ""
Adding folder
Adding folder\file.txt
Transmitting file data .
Committed revision 1.
C:\svntest\co1>cd C:\svntest\co2
C:\svntest\co2>svn up
A folder
A folder\file.txt
Updated to revision 1.
C:\svntest\co2>cd C:\svntest\co1
C:\svntest\co1>svn del folder
D folder\file.txt
D folder
C:\svntest\co1>svn commit -m ""
Deleting folder
Committed revision 2.
C:\svntest\co1>mkdir folder
C:\svntest\co1>svn add folder
A folder
C:\svntest\co1>svn commit -m ""
Adding folder
Committed revision 3.
C:\svntest\co1>cd C:\svntest\co2
C:\svntest\co2>echo changed_content 1>folder\file.txt
C:\svntest\co2>svn up
C folder
At revision 3.
Summary of conflicts:
Tree conflicts: 1
C:\svntest\co2>svn resolve --accept working folder
Resolved conflicted state of 'folder'
C:\svntest\co2>svn commit -m ""
Adding folder
svn: Commit failed (details follow):
svn: Directory '/folder' is out of date
C:\svntest\co2>svn up folder
C folder
At revision 3.
Summary of conflicts:
Tree conflicts: 1
C:\svntest\co2>svn resolve --accept working folder
Resolved conflicted state of 'folder'
C:\svntest\co2>svn commit -m ""
Adding folder
svn: Commit failed (details follow):
svn: Directory '/folder' is out of date
- J'ai mis à jour ma réponse, pouvez-vous me dire quelle est la version de svn vous utilisez ?
- Désolé pour le long temps de réponse, j'ai dû obtenir cette non compte fusionné avec mon compte réel. Voir ma réponse dans les commentaires de votre réponse.
Vous devez vous connecter pour publier un commentaire.
J'ai compris avec le
qui doit:
Résolu état conflictuel de "CHEMIN_VERS_FICHIER'
Arbre De Conflits donne un bel aperçu de arbre conflits et de leur résolution. Dans certains cas,
svn revert
pourrait aider ainsi, alors que de perdre toutes vos modifications locales. En dernier recours, une nouvelle copie de travail avec fusionnés manuellement les modifications de l' "brisées" on va vous ramener sur la bonne voie. Certainement le côté sombre de la subversion.Essayer
Svn doit alors apporter une nouvelle
folder
répertoire de version identique à celle deco1
. Vous pouvez ensuite remplacer par le contenu defolder.SAVE
.Je ne suis pas en mesure de reproduire ce que vous avez mentionné. Voici ce que j'ai essayé.
Apparemment, j'ai tenté la même approche que vous n'avez et n'a pas face à tout problème nouveau. Quelle est la version de svn utilisez-vous ?
Dans ce cas particulier, je pense que vous aurez à ré-appliquer les modifications locales manuellement. C'est, de créer un fichier de correctif (svn diff > le mien.patch, ou copier des fichiers à un autre endroit), annuler vos modifications, ou de les résoudre à l'aide de la leur, puis appliquer le patch (ou copier des fichiers). Peut-être que vous aurez besoin de svn copie de la base de vos fichiers dans le recréé le dossier avant d'appliquer vos modifications.
Comme zellus dit, c'est le côté sombre de la subversion, et c'est quelque chose que l'implémentation actuelle est incapable de gérer. Puis de nouveau, la suppression d'un dossier et l'ajout d'un nom identique, en ne sonne pas tout à fait droit. Qu'attendez-vous de la subversion à faire? Que faire si le fichier n'est pas recréé dans le dossier? Que faire si son contenu est différent?
Essayez d'éviter la situation tout à fait par pas de supprimer un dossier que vous voulez garder 🙂