En mi proyecto, tengo una carpeta con resources que no quiero agregar o eliminar manualmente al repository cuando los agrego o elimino en mi copy de trabajo.
Escribí un script bash simple que comtesting el svn state
y llama a svn add
para los files marcados con un ?
y svn remove
para files con a !
. Agregué este script bash a mi script de compilation. El problema es que svn remove
devuelve un error cuando se lo llama con un file que ya no existe. Esto da como resultado que mi secuencia de commands de compilation se anule y devuelve un error también.
¿Hay alguna forma de suprimir estos errores? Intenté --force
y --quiet
. No ayudó.
Ejemplo:
MacBook-Pro:proj Bill$ echo "test" > foo.bar MacBook-Pro:proj Bill$ svn st ? foo.bar MacBook-Pro:proj Bill$ svn add foo.bar A foo.bar MacBook-Pro:proj Bill$ rm foo.bar MacBook-Pro:proj Bill$ svn st ! foo.bar MacBook-Pro:proj Bill$ svn rm foo.bar D foo.bar svn: 'foo.bar' does not exist
Hay (al less) dos casos diferentes en los que svn stat
imprime una línea con un signo de exclamación:
svn rm
. svn add
en el file y el file ya no existe en el directory de trabajo. svn rm
funciona en el primer caso, pero sale con un error en el segundo caso. Hay varias maneras de resolver este problema, según lo que desee lograr:
touch "$filename" ; svn rm --force "$filename"
touch "$filename" ; svn rm --force "$filename"
. svn revert "$filename"
. Entonces, para responder mi pregunta, usar --keep-local
solucionó el problema.
Aquí está el guión que terminé usando. Esto verificará los files marcados como no versionados ( ?
) Y llamará a svn add
para ellos. Luego verifica los files marcados como faltantes ( !
) Y llama a svn rm
por ellos.
svn st "$Resources" | grep '^?' | sed 's_^? \(.*\)$_svn add "\1"_g' | sh svn st "$Resources" | grep '^!' | sed 's_^! \(.*\)$_svn rm --keep-local "\1"_g' | sh