2009-10-04 12 views
184

¿Hay alguna manera de confirmar solo una lista de archivos específicos (por ejemplo, solo uno de la lista de archivos que SVN desea confirmar).SVN Archivos específicos de confirmación

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

Respuesta

293

Sure. Solo haga una lista de los archivos:

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

No conozco una forma de decirle que ignore un cierto conjunto de archivos. Por supuesto, si los archivos que desea comprometerse son fácilmente enumeran por el shell, puede utilizar lo siguiente:

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

También puede hacer que el comando svn leyó la lista de archivos para cometer desde un archivo:

$ svn ci -m "Now works" --targets fix4711.txt 
+1

así que, básicamente, ¿debo nombrar los archivos explícitamente? No puedo decir simplemente que no toques este archivo en particular. – 0100110010101

+13

puedes hacer: svn st | cortar -c 9-> targets.txt, luego edite el archivo targets.txt para eliminar el archivo específico y use el parámetro --targets para especificar la lista de archivos. – rein

+14

Creo que mi nuevo desafío es * crear * un error que prende fuego a la impresora. –

38

Es, básicamente, poner los archivos que desea comprometerse en la línea de comandos

svn ci file1 file2 dir1/file3 
+1

entonces, básicamente, ¿debería nombrar los archivos explícitamente? No puedo decir simplemente que no toques este archivo en particular. – 0100110010101

+2

si se ejecuta sin argumentos svn confirma todos los archivos modificados si se ejecuta con un archivo como argumento este archivo está comprometido si se ejecuta con un directorio se han comprometido todos los archivos modificados en el directorio – Wienczny

9

Además de una lista de los archivos de forma explícita como se muestra por unwind y Wienczny, puede configurar listas de cambios y registrarlas. Estos le permiten administrar conjuntos disyuntos de cambios en la misma copia de trabajo.

Puede leer sobre ellos en el online version of the excellent SVN book.

7

tratar 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'` 
+0

Aletas de horquillas. Gracias ! –

22

Debido a mi estado de subversión, que tuvieron que ser creativo. svn st mostró M, A y ~ estados. Sólo quería M y por lo A ...

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

Este comando dice encontrar toda la salida líneas por svn st que comienzan con M o A, corta con delimitador de espacio, a continuación, obtener columnas 8 hasta el final. Volca eso en targets.txt y sobrescribe.

A continuación, modifique targets.txt para reducir aún más la lista de archivos. A continuación, ejecute a continuación para cometer:

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

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

+2

También puede usar 'grep -v '^ ~'' para poner en la lista negra lo que desea. –

46

Use las listas de cambios. La ventaja sobre la especificación de archivos es que puedes visualizar y confirmar que todo lo que deseas está realmente incluido antes de comprometerte.

$ 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 usted. Esto ayuda cuando hace malabares con varios cambios

$ svn status 
A  bar.c 
A  baz.c 

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

Finalmente, dígale que confirme lo que desea cambiar.

$ svn commit --changelist fix-issue-237 -m "Issue 237" 
+0

+1 para la respuesta en el punto. ¡Las listas de cambios son realmente el camino a seguir! –

+1

Si desea agregar nuevos directorios a una lista de cambios, no olvide usar primero svn add, luego use 'svn changelist fix-issue-237 --recursive path/to/directory' –

+0

En realidad las listas de cambios no se pueden usar con directorios nuevos .... "Subversion actualmente no admite el uso de listas de cambios con directorios." –

1

hago un (sub) carpeta con el nombre de "ocultar", mueva el archivo que he No quieren comprometidos con allí. Luego realice mi confirmación, ignorando la queja sobre el archivo perdido. A continuación, mueva el archivo oculto de ocultar de nuevo a ./

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

Cuestiones relacionadas