2012-05-24 7 views
19

Quiero confirmar todos los archivos modificados excepto uno que utiliza Subversion.Cómo confirmar todos los archivos, excepto uno con SVN

Así que aquí está el panorama:

$ svn st 
M file1 
M file2 
M file3 
M file4 

que puede hacer algo como esto:

svn ci -m "Commit 1" file1 file2 file3 
svn ci -m "Commit 2" file4 

Pero cuando un gran número de archivos, estoy tratando de simplificar mi trabajo:

svn ci -m "Commit 1" `svn st | awk '{print $2}' | grep -v file4` 
svn ci -m "Commit 2" file4 

Esta solución es muy frágil, porque con este escenario no funciona:

$ svn st 
M file1 
M file2 
D file3 
A + file4 

Creo que SVN no tiene una solución integrada para mi problema, pero no estoy seguro. Cualquier otro enfoque?

Respuesta

21

Opción 1, AWK:

svn ci -m "Commit 1" `svn st | awk '{print $NF}' | grep -v file4` 
svn ci -m "Commit 2" file4 

Opción 2, --targets:

svn ci -m "Commit 1" --targets filesToCommit.txt 
svn ci -m "Commit 2" file4 

Opción 3, --changelist:

svn changelist my-changelist file1 file2 file3 
svn ci -m "Commit 1" --changelist my-changelist 
svn ci -m "Commit 2" file4 
2

Aunque estoy seguro de que podría encontrar una solución como la que propone utilizar una línea de comandos awk más complejo, ya que estamos hablando de un solo archivo, por qué no

  1. Copia el archivo a un temporal ubicación
  2. svn revert el archivo modificado para obtener el original de nuevo
  3. commit todo el repositorio
  4. Copia el archivo modificado

Simple, fácil, rápido.

4

Puede mejorar algo su enfoque agregando sus archivos con un script a change list y comprometiéndolo. Puede inspeccionar la lista para asegurarse de que contiene los elementos correctos antes de comprometerse.

Ver svn changelist --help y --changelist opción en svn ci --help.

13

Puede hacerlo de esta manera:

svn diff file4 > tmp.patch 
svn revert file4 
svn ci -m "Commit 1" 
svn patch tmp.patch 

En este punto, todos los archivos están comprometidos con excepción file4

+1

'patch' svn en 1.7. Usé 'patch -p0 -i tmp.patch' en lugar de la línea final en este ejemplo. – Rich

0

Simplemente confirme la lista filtrada de archivos.

svn ci `ls | grep -v file4` 
4

Comprometerse todos excepto uno utilizando listas de cambios: se añadió

svn changelist my-list -R . 
svn changelist --remove file4 
svn ci -m "Commit 1" --changelist my-list 
svn ci -m "Commit 2" file4 
Cuestiones relacionadas