¿Cómo me comprometo en Subversion y agrego nuevos archivos / carpetas y elimino archivos / carpetas viejos automáticamente?
-
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?
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
.