skipped - tortoise svn resolve conflict
SVN cómo resolver "add local, adding upon update" en una*carpeta*? (5)
En este caso particular, creo que deberá volver a aplicar los cambios locales manualmente. Es decir, crea un archivo de parche (svn diff> mine.patch, o copia archivos en otro lugar), revierte los cambios o resuelve usando los de ellos, luego aplica el parche (o copia los archivos nuevamente). Quizás necesite svn copiar la base de sus archivos nuevamente en la carpeta recreada antes de aplicar sus cambios.
Como dijo zellus, es el lado oscuro de la subversión, y esto es algo que la implementación actual no puede manejar. Por otra parte, borrar una carpeta y volver a agregar un nombre idéntico no suena del todo bien. ¿Qué esperarías que haga la subversión? ¿Qué ocurre si el archivo no se recrea en la carpeta? ¿Qué pasa si su contenido es diferente?
Intenta evitar la situación por completo al no eliminar una carpeta que quieras conservar :)
Aquí está mi escenario:
Supongamos que tenemos un repositorio SVN con el siguiente contenido: myfolder myfolder / file.txt
Ahora creo dos cajas de este repositorio, co1 y co2.
En co1 modificamos file.txt. En co2 nosotros:
- svn eliminar myfolder
- svn commit
- Crea una nueva carpeta llamada myfolder
- svn agregar myfolder
- svn commit
Ahora bien, si intento una actualización en co1, aparece un conflicto de árbol:
A + C myfolder > local edit, incoming delete upon update
M + myfolder/file.txt
Quiero mantener myfolder y el archivo modificado, por lo que resuelvo el conflicto del árbol:
svn resolve --accept working folder
Ahora si intento comprometerme, obtengo "svn: Directory ''/ myfolder'' está desactualizado". Si trato de resolver esto usando svn up myfolder, aparece un conflicto de árbol de nuevo:
A + C folder > local add, incoming add upon update
M + myfolder/file.txt
De acuerdo, intentamos svn resolver --accept working folder again. Pero todavía no podemos comprometernos, obtenemos el mismo mensaje que "svn: Directorio ''/ mi carpeta'' está desactualizado '', si hacemos svn up myfolder, volvemos al último conflicto de árbol.
¿Cuál es el procedimiento correcto para resolver este tipo de conflicto (cuando deseamos mantener myfolder y sus cambios)?
EDITAR: script de línea de Windows cmd para ilustrar:
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 ""
Y aquí está el resultado de ejecutar ese script (fíjese en los errores de confirmación al final):
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
Me di cuenta con
svn resolve --accept working PATH_TO_FILE
que debería terminar con:
Se resolvió el estado conflictivo de ''PATH_TO_FILE''
No puedo reproducir lo que has mencionado. Esto es lo que he intentado.
test@test:/tmp$ cd /tmp/
test@test:/tmp$ svn co http://localhost:8080/svn/ so --username=admin
A so/trunk
A so/branches
A so/tags
Checked out revision 1.
test@test:/tmp$ cd so/trunk/
test@test:/tmp/so/trunk$ mkdir x
test@test:/tmp/so/trunk$ ls /tmp > x/test.txt
test@test:/tmp/so/trunk$ svn add x/
A x
A x/test.txt
test@test:/tmp/so/trunk$ svn ci -m "test"
Adding trunk/x
Adding trunk/x/test.txt
Transmitting file data .
Committed revision 2.
test@test:/tmp/so/trunk$ cd /tmp/
test@test:/tmp$ svn co http://localhost:8080/svn/ so1 --username=admin
A so1/trunk
A so1/trunk/x
A so1/trunk/x/test.txt
A so1/branches
A so1/tags
Checked out revision 2.
test@test:/tmp$ cd /tmp/so1/trunk/
test@test:/tmp/so1/trunk$ svn remove x
D x/test.txt
D x
test@test:/tmp/so1/trunk$ svn ci -m ""
Deleting trunk/x
Committed revision 3.
test@test:/tmp/so1/trunk$ mkdir x
test@test:/tmp/so1/trunk$ cp ../../so/trunk/x/test.txt x
test@test:/tmp/so1/trunk$ ll /tmp > x/test.txt
test@test:/tmp/so1/trunk$ svn add x/
A x
A x/test.txt
test@test:/tmp/so1/trunk$ svn ci -m ""
Adding trunk/x
Adding trunk/x/test.txt
Transmitting file data .
Committed revision 4.
test@test:/tmp$ cd so/trunk/
test@test:/tmp/so/trunk$ svn up
D x
A x
A x/test.txt
Updated to revision 4.
test@test:/tmp/so/trunk$
Aparentemente probé el mismo enfoque que tú y no volviste a enfrentar ningún problema. ¿Qué versión de svn estás usando?
export REPOPATH=/tmp/svntest
test@test:/tmp/co2/trunk$ rm -rf $REPOPATH
test@test:/tmp/co2/trunk$ mkdir $REPOPATH
test@test:/tmp/co2/trunk$ svnadmin create $REPOPATH/repo
test@test:/tmp/co2/trunk$ svn co file:///$REPOPATH/repo co1
svn: Repository UUID ''2d803eb8-2030-4dd3-bb6f-34ab07c74813'' doesn''t match expected UUID ''82764ae8-6410-4565-933f-9a420cb60013''
test@test:/tmp/co2/trunk$ svn co file:///$REPOPATH/repo co2
svn: Repository UUID ''2d803eb8-2030-4dd3-bb6f-34ab07c74813'' doesn''t match expected UUID ''82764ae8-6410-4565-933f-9a420cb60013''
test@test:/tmp/co2/trunk$
test@test:/tmp/co2/trunk$ cd $REPOPATH/co1
bash: cd: /tmp/svntest/co1: No such file or directory
test@test:/tmp/co2/trunk$ mkdir folder
mkdir: cannot create directory `folder'': File exists
test@test:/tmp/co2/trunk$ echo content > folder/file.txt
test@test:/tmp/co2/trunk$ svn add folder
svn: warning: ''folder'' is already under version control
test@test:/tmp/co2/trunk$ svn commit folder -m ""
test@test:/tmp/co2/trunk$
test@test:/tmp/co2/trunk$ cd $REPOPATH/co2
bash: cd: /tmp/svntest/co2: No such file or directory
test@test:/tmp/co2/trunk$ svn up
At revision 10.
test@test:/tmp/co2/trunk$
test@test:/tmp/co2/trunk$ cd $REPOPATH/co1
bash: cd: /tmp/svntest/co1: No such file or directory
test@test:/tmp/co2/trunk$ svn del folder
svn: Use --force to override this restriction
svn: ''folder/file.txt'' is not under version control
test@test:/tmp/co2/trunk$ svn commit -m ""
test@test:/tmp/co2/trunk$ mkdir folder
mkdir: cannot create directory `folder'': File exists
test@test:/tmp/co2/trunk$ svn add folder
svn: warning: ''folder'' is already under version control
test@test:/tmp/co2/trunk$ svn commit -m ""
test@test:/tmp/co2/trunk$
test@test:/tmp/co2/trunk$ cd $REPOPATH/co2
bash: cd: /tmp/svntest/co2: No such file or directory
test@test:/tmp/co2/trunk$ echo changed_content > folder/file.txt
test@test:/tmp/co2/trunk$ svn up
At revision 10.
test@test:/tmp/co2/trunk$ svn --version
svn, version 1.6.6 (r40053)
compiled Dec 12 2009, 05:04:54
Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).
The following repository access (RA) modules are available:
* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
- handles ''http'' scheme
- handles ''https'' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- with Cyrus SASL authentication
- handles ''svn'' scheme
* ra_local : Module for accessing a repository on local disk.
- handles ''file'' scheme
Tratar
C:/svntest/co2>move folder folder.SAVE
C:/svntest/co2>svn revert folder
C:/svntest/co2>svn update
Svn debería traer una nueva versión de directorio de folder
idéntica a la de co1
. A continuación, puede sobrescribir con el contenido de la folder.SAVE
.
Tree Conflicts ofrece una buena visión general de los conflictos de los árboles y su resolución. En algunos casos, svn revert
podría ayudar también, al perder todas las modificaciones locales. Como último recurso, una nueva copia de trabajo con cambios fusionados manualmente desde el ''roto'' lo hará volver al camino correcto. Definitivamente el lado oscuro de la subversión.