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

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

En TortoiseSVN me limitaría a realizar cambios, y me mostraría una list de lo que se agregó, lo que se eliminó y lo que se modificó. Verificaría todas las casillas y haría clic en Aceptar .

Con la command-line, parece que tengo que hacer svn add cuando agrego files y svn rm cuando elimino los files y cuando todo está hecho, svn commit y confirma el agregado, el eliminado y el modificado.

¿Hay algún command que pueda usar que solo confirme los files / carpetas que he eliminado, los files / carpetas que he agregado y los files que he modificado de una vez?

Con las herramientas SVN estándar, no existe tal cosa, se menciona en las preguntas más frecuentes como algo malo.

En Windows, el siguiente file 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 de arriba en un file llamado 'autocommit.bat'. Si lo ejecuta desde el directory de trabajo, no necesita especificar un parámetro. Si se encuentra en otro directory, puede llamarlo como autocommit.bat c:\MyProjectFolder .

Nader Shirazie tenía el command correcto en el guión publicado. Aquí está la versión de una sola línea para Linux:

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

¡He deseado esa funcionalidad por mucho time y estoy contento de haber buscado aquí!

No hay un command SVN, pero estoy seguro de que hay un script o dos que pueden search files no versionados / perdidos y emitir los commands apropiados …

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

Agregar la secuencia de commands completa

 #!/bin/bash #------------------------------- Subroutines --------------------------------- usage(){ echo " Usage: $(basename $0) 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 forma fácil de hacer los agregados / eliminaciones por usted, y realice el compromiso 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 function fácil que usa el svn status :

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

Los créditos van a una respuesta al command Stack Overflow question SVN para eliminar todos los files que faltan localmente . Ajusté el suyo para trabajar en nuevos files.

El file de PowerShell lo hice así:

 # Delete missing files svn status | ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] } # Added new files svn status | ? { $_ -match '^\?\s+(.*)' } | % { svn add $Matches[1] } # Commit repository svn commit -m "This commit is done by a PowerShell bat" 

En resumen, no. Tienes que svn add y svn delete cada elemento.

Si no está vinculado al SVN, algunos otros sistemas de control de fuente ofrecen esta característica; por ejemplo, mercurial's hg addremove .

Si bien los commands sucintos que usan arguments de línea son poderosos, pueden pasar por alto (o no) include nombres de files con espacios. El siguiente command es de una respuesta a una pregunta similar que includeá todos los files.

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