2009-05-18 15 views
7

Intenté usar svn ci dir/a dir/b -m "mi comentario" pero esto no funciona. También utilicé svn ci dir/a/* dir/b/* -m "mi comentario" y tampoco funciona.¿Cómo puedo comprometer múltiples directorios a la vez usando subversion?

Sé que puede especificar varios archivos, pero ¿cómo puedo decirle a subversión que compruebe todos los archivos modificados en estas carpetas? Principalmente quiero hacer esto para que todos mis cambios entren en una revisión. Puedo checkin un directorio al mismo tiempo, pero esto termina por darme diferentes revisiones para cada directorio ..

+0

por lo que hay muchos otros archivos modificados en decir dir/c que no desea que se envíen? – dotjoe

+0

Hay muchos archivos modificados en los directorios que quiero registrar. Sé que svn commit solo registrará los archivos que modifiqué, que es lo que quiero. No me preocupan los archivos que no quiero que se envíen, si eso responde a su pregunta. –

Respuesta

1

que sólo piensa tiene 1 opción: verificar en el directorio contenedor - el que tiene estos dos como subdirectorios.

Si ya no están organizados de esa manera (es decir, ambos son directorios de nivel superior en el repositorio), entonces no hay mucho que pueda hacer: los comandos svn solo funcionan en un único directorio.

+0

Ambos comparten un directorio de nivel superior común, pero ese directorio es bastante ... enorme, con muchas otras carpetas secundarias. –

+0

es bastante justo, eso solo significa que svn tardará más tiempo en buscar a través de ellos para encontrar todos los archivos que necesitan confirmación. Si ninguno lo hace, entonces es sorprendentemente rápido. Pruébelo usando svn status para ver (el estado tardará más que ci BTW) – gbjbaanb

+0

svn commit funcionará en múltiples directorios, pero solo si están todos en la misma copia de trabajo. Si hay cosas que no desea, puede usar los directorios dispersos de subversion 1.5 para hacer una copia de trabajo más pequeña y más concisa. – crashmstr

4
svn add dir/a 
svn add dir/b 
svn commit 

Sin embargo, es más probable, que estás pensando:

svn add dir/* 
svn commit 
+0

Los directorios ya están en el repositorio, solo quiero verificar los archivos que están modificados en mi local. –

+0

Si ya están agregados, simplemente haciendo "svn commit" lo cubrirá. –

0

Esto es fácil si se realiza el check-out desde una carpeta de nivel superior donde a y b están. Entonces, si su copia de trabajo es "dir" y a y b tienen cambios, confirme "dir" para confirmar los cambios en ambos. Hago esto todo el tiempo.

Editar:
Para cometer más de una carpeta, que se necesitan para que estén en la misma copia de trabajo.

Si usted está preocupado por tener demasiado a proceso, se podría intentar una salida más escaso con sólo las carpetas que necesita, y luego usted podría cometer el directorio base o los subdirectorios según sea necesario sin la sobrecarga de la otra proyectos.

Sparse Directories Information

8

Es posible que tenga que especificar lo que hace "pero esto no funciona" significa, ya que funciona bien aquí:

D:\Projects>svn commit -m 'test1' test\aaa "test\aaa bbb ccc" 
Sending  test\aaa\aaa222\xxx.txt 
Sending  test\aaa bbb ccc\aaa.txt 
Transmitting file data .. 
Committed revision 8. 

D:\Projects> 
+0

Me pregunto si son copias separadas de trabajo. ¿Eso fallaría? – crashmstr

+0

Sí, fallará. OTOH no conocemos el diseño de las copias de trabajo de OP, por lo que puede o no ser la razón por la que "no funciona". –

+0

C: \ zoo> svn ci c: \ zoo \ tiger c: \ zoo \ lion -m "mi comentario" svn: 'C: \ zoo' no es una copia de trabajo este es el error que obtengo. Funcionará si solo le paso un directorio, pero cuando le doy un segundo directorio, se equivoca. –

0

Considere el uso de propiedad svn: externos para el control de parte de la repositorio. Puede seleccionar y elegir qué directorios obtener, luego comprometerse con múltiples destinos en un solo paso. Hemos estado utilizando este enfoque por un tiempo con gran éxito.

+0

Estoy hablando del cliente de TortoiseSVN ... – GregC

+0

Sugiero encarecidamente buscar en directorios dispersos en SVN ahora, si está usando Tortoise, entonces es tan simple como puede obtener, es genial. – gbjbaanb

0

Teniendo en cuenta el siguiente es la consulta

  1. usted tiene muchos archivos desprotegido desde el repositorio en múltiples directorios y muchos de ellos se modificó y no recuerda qué archivos han modificado y que será difícil fusionar un archivo al mismo tiempo, a continuación, haga lo siguiente

vaya al directorio de nivel superior y ejecute el comando

svn ci -m "comments" 

esto registrará todos los archivos modificados bajo el directorio de nivel superior y muchos subdirectorios debajo de él.

0

A encontró un problema similar. Tenía un repositorio y necesitaba tener dos copias separadas de trabajo de algunas de las subcarpetas del repositorio.Repositorio era así:

/web/lib 
/web/htdocs 
... 

... lo que tenía que tener en copias de trabajo separadas (respectivamente):

C:/.../web/lib 
C:/.../htdocs/cbs 

He resuelto esto por tener un "maestro" copia de /web trabajar en C:/.../web y crear un enlace fijo (o unión NTFS) en C:/.../htdocs/cbs "apuntando" al C:/.../web/htdocs. Entonces, cada vez que hago cambios locales en una de esas copias de trabajo, siempre cometo el C:/.../web, que naturalmente contiene cambios de ambas copias de trabajo.

Espero que esto sea útil para usted.

0

Ha pasado mucho tiempo desde que se hizo esta pregunta, pero tengo una actualización para las llegadas tardías.

Asumiendo que tiene un árbol como dir/a, dir/b, dir/c, dir/d .... y desea confirmar los cambios sólo en las subcarpetas A y B, las siguientes obras: comando

svn ci dir/a/* dir/b/* -m "mi comentario"

Si esto realmente no funcionó cuando lo intentó hace siete años, solo puedo suponer que esta característica se agregó en versiones posteriores.

Cuestiones relacionadas