¿Cómo me comprometo en Subversion y agrego nuevos archivos / carpetas y elimino archivos / carpetas viejos automáticamente?

StackOverflow https://stackoverflow.com/questions/1209997

  •  06-07-2019
  •  | 
  •  

Pregunta

Después de haber sido mimado por TortoiseSVN , ahora estoy usando la línea de comando en Linux para interactuar con un repositorio SVN.

En TortoiseSVN simplemente confirmaría los cambios, y me mostraría una lista de lo que se agregó, lo que se eliminó y lo que se modificó. Marcaría todas las casillas y haría clic en Aceptar .

Con la línea de comando, parece que tengo que hacer svn add cuando agrego archivos y svn rm cuando elimino archivos y cuando todo está listo, escribo svn commit , y confirma lo agregado, lo eliminado y lo modificado.

¿Hay algún comando que pueda usar que solo confirme los archivos / carpetas que eliminé, los archivos / carpetas que agregué y los archivos que modifiqué todo de una vez?

¿Fue útil?

Solución

Con las herramientas SVN estándar, no existe tal cosa: se menciona en el Preguntas frecuentes como algo malo.

Otros consejos

En Windows, el siguiente archivo por lotes funcionaría:

for /f "tokens=2*" %%i in ('svn status %1 ^| find "?"') do svn add "%%i"  
for /f "tokens=2*" %%i in ('svn status %1 ^| find "!"') do svn delete "%%i"  
svn commit -m "Automatic commit" %1  

Simplemente guarde las tres líneas anteriores en un archivo llamado 'autocommit.bat'. Si lo ejecuta desde el directorio de trabajo, no necesita especificar un parámetro. Si está en otro directorio, puede llamarlo como autocommit.bat c: \ MyProjectFolder .

Nader Shirazie tenía el comando correcto en el script publicado . Aquí está la versión de línea única para Linux:

svn add  $(svn st | sed -n 's/^[A?] *\(.*\)/\1/p')

¡He querido esa funcionalidad durante mucho tiempo y me alegro de haber buscado aquí!

No hay un comando SVN, pero estoy seguro de que hay un script o dos que pueden buscar archivos no versionados / faltantes y emitir los comandos apropiados ...

Encontré uno aquí: http://gael-varoquaux.info/computers/ svnautocommit / index.html

Agregar el script completo

#!/bin/bash


#------------------------------- Subroutines ---------------------------------
usage(){
echo " Usage: $(basename <*>) PATH"
echo ""
echo "Automatically commits the changes of svn working copy located in PATH."
echo "The new files are automatically added and the files that have been removed"
echo "are removed."
echo ""
echo "By Gael Varoquaux"
}

#------------------------------- Process the options -------------------------
if [ $# -eq 1 ]
then
    workingdir="$1"
else
    usage
    exit 1
fi

if ! cd $workingdir
then
    echo $workingdir is not a accessible path.
    usage
    exit 1
fi

#------------------------------- Find out what has changed -------------------

# A warning if this fails :
echo "SVN autocommit failed" > $HOME/local/motd

svnstatus=$(svn status $workingdir)
added=$(printf "$svnstatus" | sed -n 's/^[A?] *\(.*\)/\1/p')
removed=$(printf "$svnstatus" | sed -n 's/^! *\(.*\)/\1/p')

if [ "x$added" != "x" ]
then
    echo adding "$added" to repository
    svn add $added
fi

if [ "x$removed" != "x" ]
then
    echo removing "$removed" to repository
    svn remove $removed
fi

svn commit -m "autocommit" && rm $HOME/local/motd

La versión de Python parece no estar allí desafortunadamente.

Es posible que desee modificar el script para tomar un parámetro para comentarios, pero es un comienzo. También puede modificarlo para que sea una manera fácil de agregar / eliminar por usted, y hacer la confirmación manualmente.

Para agregar:

svn status | grep "^\?" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn add

Para eliminar:

svn status | grep "^\!" | sed -e 's/! *//' | sed -e 's/ /\\ /g' | xargs svn remove

Funciona bien para mí.

Si desea hacerlo con PowerShell, aquí hay una función fácil que utiliza svn status :

svn status | ? { 

Si desea hacerlo con PowerShell, aquí hay una función fácil que utiliza svn status :

# Delete missing files
svn status | ? { 

Si desea hacerlo con PowerShell, aquí hay una función fácil que utiliza svn status :

svn status | ? { 

Si desea hacerlo con PowerShell, aquí hay una función fácil que utiliza svn status :

<*>

Los créditos van a una respuesta a la pregunta de Stack Overflow Comando SVN para eliminar todos los archivos que faltan localmente . Ajusté el suyo para trabajar con nuevos archivos.

El archivo de PowerShell lo hice ver así:

<*> -match '^\?\s+(.*)' } | % { svn add $Matches[1] }

Los créditos van a una respuesta a la pregunta de Stack Overflow Comando SVN para eliminar todos los archivos que faltan localmente . Ajusté el suyo para trabajar con nuevos archivos.

El archivo de PowerShell lo hice ver así:

<*> -match '^!\s+(.*)' } | % { svn rm $Matches[1] } # Added new files svn status | ? {

Si desea hacerlo con PowerShell, aquí hay una función fácil que utiliza svn status :

svn status | ? { 

Si desea hacerlo con PowerShell, aquí hay una función fácil que utiliza svn status :

<*>

Los créditos van a una respuesta a la pregunta de Stack Overflow Comando SVN para eliminar todos los archivos que faltan localmente . Ajusté el suyo para trabajar con nuevos archivos.

El archivo de PowerShell lo hice ver así:

<*> -match '^\?\s+(.*)' } | % { svn add $Matches[1] }

Los créditos van a una respuesta a la pregunta de Stack Overflow Comando SVN para eliminar todos los archivos que faltan localmente . Ajusté el suyo para trabajar con nuevos archivos.

El archivo de PowerShell lo hice ver así:

<*> -match '^\?\s+(.*)' } | % { svn add $Matches[1] } # Commit repository svn commit -m "This commit is done by a PowerShell bat"

Los créditos van a una respuesta a la pregunta de Stack Overflow Comando SVN para eliminar todos los archivos que faltan localmente . Ajusté el suyo para trabajar con nuevos archivos.

El archivo de PowerShell lo hice ver así:

<*> -match '^\?\s+(.*)' } | % { svn add $Matches[1] }

Los créditos van a una respuesta a la pregunta de Stack Overflow Comando SVN para eliminar todos los archivos que faltan localmente . Ajusté el suyo para trabajar con nuevos archivos.

El archivo de PowerShell lo hice ver así:

<*>

En resumen, no. Debe svn add y svn delete cada elemento.

Si no está vinculado a SVN, algunos otros sistemas de control de fuente ofrecen esta función; por ejemplo, Mercurial & # 8217; s hg addremove .

Si bien los comandos breves que utilizan argumentos de línea son potentes, pueden fallar (o fallar) al incluir nombres de archivos con espacios. El siguiente comando es de una respuesta a una pregunta similar que incluirá todos los archivos.

svn add --force * --auto-props --parents --depth infinity -q

Agregar automáticamente nuevos archivos:

svn st | sed -rn '/^\?/s/^.{8}(.+)$/\1/p' | xargs -r svn add

Eliminar automáticamente los archivos eliminados:

svn st | sed -rn '/^!/s/^.{8}(.+)$/\1/p' | xargs -r svn rm

Explicación

Esta es básicamente una versión condensada de la respuesta de luca que combina grep y dos < code> sed llama en uno.

sed

  • -r usa expresiones regulares extendidas
  • -n no pasa a través de la entrada
  • filtros líneas que comienzan con ? o ! ( / ^ \? / y / ^! / , respectivamente)
  • corta los primeros 8 caracteres (que contienen banderas): s / ^. {8} //
  • imprime el resto de la línea a la salida: < code> s / (. +) $ / \ 1 / p

Consulte también: http://www.grymoire.com/Unix/sed.html

xargs

La opción -r (o --no-run-if-empty ) para xargs (versión GNU) detiene el procesamiento cuando no hay entrada de sed , eliminando así el error SVN No se proporcionaron suficientes argumentos .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top