subir - svn eliminar archivos del repositorio
svn eliminar archivos eliminados (3)
Tengo una copia de trabajo de un proyecto SVN. Los archivos se eliminan de esta copia de trabajo por una aplicación. Cuando confirme la copia de trabajo utilizando la línea de comandos SVN, me gustaría eliminar estos archivos eliminados del repositorio.
Si confirmo la copia de trabajo con svn commit
, no se eliminarán los archivos del proyecto (porque no se eliminaron localmente con svn delete
. ¿Hay alguna manera de que le pida a SVN que elimine (del repositorio) cualquier archivo que ¿faltan en la copia de trabajo?
Lo siguiente funciona cuando le han entregado una pila de archivos o directorios de ruta con nombres de archivos en ellos. Funcionará en OSX, IOS y Linux.
svn st | grep ^! | awk ''{$1=""; print " --force /""substr($0,2)"@/"" }'' | xargs svn rm
Su pregunta como redactada ( ¿Hay alguna forma de que le pida a SVN que elimine (del repositorio) cualquier archivo que falte en la copia de trabajo? ) Es realmente un duplicado del comando svn de la pregunta relacionada para eliminar todos los archivos que faltan localmente . En respuesta a esa pregunta, proporcioné una secuencia de comandos de PowerShell de una línea para que pueda identificar y eliminar automáticamente los archivos necesarios de su repositorio. Lo reproduzco aquí por conveniencia:
svn status | ? { $_ -match ''^!/s+(.*)'' } | % { svn rm $Matches[1] }
Eso supone, por supuesto, que estás en Windows. Here hay una solución análoga si está en Linux / Unix.
Sin embargo, cuando agrega en la parte dos de su pregunta, que reveló inadvertidamente :-) en un comentario posterior: ¿Hay alguna forma de hacer que esto suceda automáticamente después de un compromiso? --Entonces tu pregunta es única.
La única avenida que podría ver para responder a la segunda parte es usar un gancho de confirmación previa , es decir, un script de enganche ejecutado al iniciar una confirmación, pero antes de que ocurra la confirmación. Normalmente, usaría un gancho de confirmación previa para validar un conjunto de condiciones y permitir que la confirmación proceda o finalice. Lamentablemente, no creo que esté permitido, y mucho menos aconsejable, modificar el conjunto de archivos que se cometen durante la confirmación. Pero no he encontrado este punto documentado, por lo que es posible que desee profundizar más en este punto.
2012.06.19 Aclaración por el comentario de Don
Don tiene razón en que necesita un enlace del lado del cliente , no un enlace del lado del servidor porque los archivos eliminados para procesar están en el cliente. La línea de comando svn no tiene esta opción, pero TortoiseSVN ofrece enlaces del lado del cliente . De hecho, después de leer detenidamente la página de manual a la que se hace referencia, se me recordó que TortoiseSVN no solo ofrece un enlace de confirmación previa , sino que también ofrece un enlace de inicio de confirmación , que es ideal para esta situación. La diferencia es que el enlace de confirmación previa se ejecuta después de abrir el cuadro de diálogo de confirmación y después de presionar Aceptar para intentar ejecutar la confirmación. Por otra parte, el enlace de inicio-confirmación se ejecuta antes de que se abra el cuadro de diálogo de confirmación. Por lo tanto, con el script de enganche en su lugar, cuando vea la lista de archivos para confirmar, incluirá los archivos que también eliminará.
usa un
svn status
Enumera los cambios con la copia de trabajo. (los archivos borrados comienzan con un!)
Entonces tú puedes :
svn delete file_to_del1 file_to_del2 etc
y finalmente comprometer
También puedes escribir un pequeño fragmento de código para automatizar esto:
svn status | grep ''^!'' | awk ''{print $2}'' | xargs svn delete
Y eventualmente agregar un alias:
alias svn_precommit="svn status | grep ''^!'' | awk ''{print $2}'' | xargs svn delete"
Como nota al margen: podría complicar en exceso el fragmento de código con una variante que admita space / @ en los nombres de archivo.
Pero, ¿por qué demonios crearías tales archivos en Linux en tu repositorio de SCM? Poner un espacio en un directorio / nombre de archivo en Linux es simplemente estúpido.
Cada fragmento de código para administrar dichos archivos está demasiado complicado, solo porque quería "" en lugar de "_".
Entonces NO, no actualizaré los fragmentos de código que proporcioné, porque responde al 99% de los casos de uso sin complicarlos en exceso para el 1% que es lo suficientemente estúpido como para poner espacio en los nombres de los archivos.