sábado, julio 25, 2009

Breves notas sobre svn (II): Como evitar que ficheros y directorios no estén bajo el control de versiones

Sigo trabajando con subversion como sistema de gestión de código fuente (aunque he tomado buena nota de los comentarios que me dejaron en la primera entrada, probaré otros sistemas de gestión cuando tenga un hueco).

Ahora me he encontrado el problema, tras haber importado un árbol completo de directorios, que necesito que ciertos ficheros y ciertos directorios no estén bajo el control de versiones. ¿Cómo se puede realizar esta exclusión?. Pues hay que seguir varios pasos:

  1. Si los ficheros están bajo el control de versiones, eliminar del repositorio los mismos.
    Por ejemplo, si estamos en la raíz de nuestro proyecto, y quisiéramos eliminar el directorio build:
    svn delete build
    svn commit
    O por ejemplo, si queremos que no estén bajo el control de versiones todos los ficheros intermedios del proceso de compilación, que son de la forma moc_*.cpp:
    svn delete moc_*.cpp
    svn commit
  2. Añadir una propiedad a los directorios donde queremos que se ignores los ficheros. Esta propiedad es svn:ignore. Así por ejemplo, para ignorar en el directorio raíz todos los ficheros cuyo nombre coincidan con el patrón moc_*.cpp:
    svn propset svn:ignore moc_\*.cpp .
    svn commit
    Ojo en este caso: la contrabarra, \, se utiliza para escapar el asterisco del shell y el . es necesario para indicar que se va a modificar las propiedades del directorio actual, que es donde queremos ignorar
  3. Como puede verse, la propiedad se almacena en el servidor, por lo cual es imprescindible hacer un commit de los cambios para que estos queden reflejados en el repositorio.

¿Qué pasaría si quisiéramos ignorar varios archivos o varios subdirectorios?. En este caso, cada uno de los patrones de archivos o subdirectorios debe de estar separado por un carácter de nueva línea. Hay varias maneras de conseguir este efecto:

  1. Usar un fichero y la opción -F del svn. Supongamos que queremos ignorar todos los ficheros contenidos en los directorios build y Debug. Para ello creamos un fichero que por simplicidad vamos a llamar ignore.txt, donde cada línea corresponde a cada uno de los directorios que queremos ignorar:
    svn propset svn:ignore -F ignore.txt .
    svn commit
  2. Otra opción es usar las comillas e ir introduciendo cada patrón de ficheros en una nueva línea. Para ignorar los mismos directorios que en el caso anterior:
    svn propset svn:ignore 'build[ENTER]
    Debug[ENTER]
    ' .
    svn commit

Para obtener el listado de ficheros que está ignorando actualmete svn se consulta el estado y se pasa la opción --no-ignore:

svn status --no-ignore

También existe la posibilidad de hacer que subversion ignore los ficheros a nivel global. Para ello debe de editarse el fichero de configuración, config, y modificar en la sección miscellany, el parámetro global-ignores. Por defecto subversion ignora los ficheros con las cuyos nombres coincidan con los patrones*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store

Referencias

  1. How to … Make Subversion ignore files and folders
  2. Version Control with Subversion
  3. Subversion (SVN)

Technorati Tags:

No hay comentarios: