Cómo comprometer todos los files excepto uno con SVN

Quiero enviar todos los files modificados excepto uno que use Subversion.

Así que aquí está el escenario:

$ svn st M file1 M file2 M file3 M file4 

Puedo hacer algo como esto:

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

Pero cuando hay una gran cantidad de files, bash 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?

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, – objectives:

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

Opción 3, –cangelist:

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

Puedes hacerlo así:

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

En este punto, todos los files están comprometidos excepto el file4

Puede mejorar algo su enfoque agregando sus files con una secuencia de commands a una list de cambios y comprometiéndolos. Puede inspeccionar la list para asegurarse de que contiene los elementos correctos antes de comprometerse.

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

Comprometer a todos excepto uno usando lists de cambios:

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

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

  1. Copie el file a una location temporal
  2. svn revert el file modificado para recuperar el original
  3. Comprometer todo el repository
  4. Copie el file modificado de nuevo

Simple, fácil, rápido.

Simplemente comprometa la list filtrada de files.

 svn ci `ls | grep -v file4`