2009-01-06 13 views
10

Hoy me encontré con un problema donde alguien había cometido accidentalmente un archivo proj.user en el repositorio SVN. Cuando vine a actualizar, obviamente causó problemas.¿Hay alguna forma de bloquear los archivos que están siendo enviados al repositorio SVN?

Me hizo preguntarme si había alguna manera de poder bloquear ciertas extensiones de archivos para que sean entregadas al repositorio.

Me doy cuenta de que hay una lista de ignorar, pero hasta donde yo sé, esto todavía depende de que la persona agregue los archivos a la lista de ignorar. Idealmente, me gustaría controlar esto centralmente para que el repositorio en lugar de la persona tenga el control.

¿Esto es posible?

Respuesta

16

Sí, en general, hay dos maneras. Puede crear commit-hooks (que probablemente no sea lo que desea hacer) o, más fácilmente, agregue la propiedad svn: ignore a su directorio. Dado que las propiedades se mantienen junto con el proyecto, esto afectará a todos. Por ejemplo, hacer caso omiso de *.user archivos, puede agregar esto al directorio en el que aparecerían:

svn propset svn:ignore '*.user' . 

A continuación, guardar los cambios de la forma habitual. A partir de ahora, los archivos *user de ese directorio ya no participarán en los comandos svn como stat, update, commit, etc. Sin embargo, debe agregar la propiedad a cada directorio que requiera un campo de ignorar. No actúa automáticamente recursivamente en su árbol de proyectos. Si, por algún motivo, desea actualizar un archivo ignorado, pasaría el indicador --no-ignores al comando.

+0

¿Esto realmente evitará que sea explícitamente '$ svn add''ed? – matpie

+0

No, si lo agrega específicamente, se agregará, pero se ignorarán las actualizaciones. –

0

En SVN, agrega archivos al repositorio manualmente. Por lo tanto, no tiene sentido tener una lista de bloqueo de extensión de archivo. Puede usar svn ignore para ignorar archivos específicos, pero nuevamente, debe agregar y eliminar manualmente archivos del repositorio.

Ver también How do you remove a file from being version controlled without deleting the file in subversion?

+0

svn en realidad no tiene un comando de ignorar ... por lo que svn ignorar simplemente dará como resultado un error. –

+1

svn: ignorar no es un comando, es una propiedad: http://svnbook.red-bean.com/en/1.1/ch07s02.html –

3

Posiblemente podría agregar un enlace de precompilación de subversión para evitar que las personas los comprometan. Esto tiene la ventaja de ser del lado del servidor, en lugar de ser una configuración por cliente.

+1

Las propiedades de Subversion también se gestionan con el proyecto, por lo que tienen la ventaja de ser revisadas y mantenidas en el servidor :) además de que no requieren codificación. –

+0

Lo hacen, pero también son más difíciles de configurar cuando tienes muchos proyectos/directorios ... oscilaciones y rotondas y todo eso :) –

+0

Estoy totalmente de acuerdo si eres un administrador experimentado de Subversion, pero si tú " Al hacer esta pregunta aquí, creo que el trabajo adicional de agregar la propiedad svn: ignore a varios directorios del proyecto podría ser la mejor opción :) –

0

Además de configurar el ignore property, también puede usar la opción de configuración de tiempo de ejecución "global-ignore" para hacer esto globalmente. Siga los enlaces para más información. Creo que la función de ignorar global es lo que podrías estar buscando.

+0

El problema con la configuración de ignorar globalmente es que es por cliente. Si existe una regla de proyecto que los archivos * .user no deben revisarse, sino algún proceso de compilación o lo que sea que los genere dentro de los directorios controlados, deberá hacer que todos actualicen sus configuraciones manualmente. –

2

En cuanto a esto:

¿Esto realmente evitar que sea explícitamente $ svn add'ed? - SirLancelot Ene '09 6 a las 18:14

No, si se agrega específicamente, se añadirá lo , pero ser ignorada cambios a la misma. - Jason Coco Ene '09 6 en 20:08

creo que no se puede hacer este juego con svn: ignore apoyos. Según svnbook 1.5 Manual:.

"El apoyo de Subversion para los patrones que pueden ignorarse de archivos se extiende sólo a la proceso de una sola vez de la adición unversioned archivos y directorios al control de versiones vez que un objeto se encuentra bajo el control de Subversion, el ignorar mecanismos patrón ya no se aplican a ella. En otras palabras, no espere que Subversion para evitar cometer los cambios que ha realizado en un fichero versionado simplemente porque el nombre del archivo que coincide con un patrón de ignorar -Subversion siempre nota todos sus objetos versionados ".

+0

Plus 1, ya que esta es una distinción importante entre svn y git, ya que git le permitirá agregar un archivo al repositorio y no rastrear los cambios, por ejemplo, archivos de audio o gráficos. – MDMoore313

2

tuve que usar

svn propset svn:ignore '*.user' . 

Para utilizar la respuesta aceptada anteriormente.

Cuestiones relacionadas