SVN Confirma archivos específicos

219

¿Hay alguna forma de confirmar solo una lista de archivos específicos (por ejemplo, una de la lista de archivos que SVN desea confirmar)?

Estoy trabajando en MAC OS X en Terminal, sin ninguna interfaz de usuario.

0100110010101
fuente

Respuestas:

331

Por supuesto. Solo enumere los archivos:

$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png

No conozco una manera de decirle que ignore un cierto conjunto de archivos. Por supuesto, si el shell enumera fácilmente los archivos que desea confirmar, puede usar eso:

$ svn ci -m "No longer sets printer on fire" printer-driver/*.c

También puede hacer que el comando svn lea la lista de archivos para confirmar desde un archivo:

$ svn ci -m "Now works" --targets fix4711.txt
relajarse
fuente
1
entonces, básicamente, ¿debería nombrar los archivos explícitamente? No puedo decir que no toque este archivo en particular.
0100110010101
16
usted podría hacer: svn st | corte -c 9-> destinos.txt, luego edite el archivo objetivos.txt para eliminar el archivo específico y use el parámetro --targets para especificar la lista de archivos.
rienda
17
Creo que mi nuevo desafío es crear un error que prende fuego a la impresora.
James Webster
3
Es patético y ridículo por igual. Sin área de espera. svn addse usa para agregar archivos a repositorios.
Kandinski
68

Utiliza listas de cambios. La ventaja sobre la especificación de archivos es que puede visualizar y confirmar que todo lo que quería se incluye antes de comprometerse.

$ svn changelist fix-issue-237 foo.c 
Path 'foo.c' is now a member of changelist 'fix-issue-237'.

Hecho esto, svn ahora mantiene las cosas separadas para ti. Esto ayuda cuando haces malabares con múltiples cambios

$ svn status
A       bar.c
A       baz.c

--- Changelist 'fix-issue-237':
A       foo.c

Finalmente, dígale que cometa lo que quería cambiar.

$ svn commit --changelist fix-issue-237 -m "Issue 237"
jcwenger
fuente
+1 por respuesta puntual. ¡Las listas de cambios son realmente el camino a seguir!
Miro Markaravanes
1
Si desea agregar nuevos directorios a una lista de cambios, no olvide usar svn add primero, luego usesvn changelist fix-issue-237 --recursive path/to/directory
Fabian Schmengler
En realidad, las
listas de cambios
1
@fschmengler: SVN es una herramienta horrible. Solo estaba tratando de sacar lo mejor del mal trabajo que hace. Cambia a git. : P
jcwenger
10
Me cambié a Git hace muchos años y nunca miré hacia atrás. Se vio obligado a usar svn nuevamente para un cliente, se siente como correr con la pelota y la cadena en ambas piernas
Fabian Schmengler
38

Básicamente, coloca los archivos que desea confirmar en la línea de comando

svn ci file1 file2 dir1/file3
Wienczny
fuente
1
entonces, básicamente, ¿debería nombrar los archivos explícitamente? No puedo decir que no toque este archivo en particular.
0100110010101
2
Si plazo sin argumentos SVN compromete a todos los archivos modificados si carrera con un archivo como argumento de este archivo está comprometida si carrera con un directorio de todos los archivos modificados en el directorio comprometidos
Wienczny
22

Debido a mi estado de subversión, tuve que ser creativo. svn stmostró M, Ay ~estados. Solo quería My Aasí ...

svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt

Este comando dice buscar todas las líneas que salen por svn stese comienzo con Mo A, cortar usando un delimitador de espacio, luego obtener las columnas 8 hasta el final. Volcar eso en targets.txt y sobrescribir.

Luego modifique blancos.txt para podar más la lista de archivos. Luego, ejecute a continuación para comprometerse:

svn ci -m "My commit message" --targets targets.txt

Probablemente no sea el caso de uso más común, pero espero que ayude a alguien.

Eric
fuente
2
También puedes usar grep -v '^~'para poner en la lista negra lo que quieres.
Martin Konecny
10

Además de enumerar los archivos explícitamente como se muestra en desenrrollar y Wienczny , puede configurar listas de cambios y registrarlos. Estos le permiten administrar conjuntos disjuntos de cambios en la misma copia de trabajo.

Puede leer sobre ellos en la versión en línea del excelente libro SVN .

sbi
fuente
7

prueba este script ...

#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`; 
     do LIST="${LIST} $f $NULL on"; 
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
Abhijit Dhariya
fuente
1

Hago una (sub) carpeta llamada "ocultar", muevo el archivo al que no quiero comprometerme allí. Luego haga mi confirmación, ignorando la queja sobre el archivo perdido. Luego mueva el archivo oculto de ocultar de nuevo a ./

No conozco ningún inconveniente de esta táctica.

George Wyche
fuente