lunes, abril 07, 2008

SCM - Manejando grandes archivos en un repositorio

Siguiendo fielmente a la premisa de que todo entregable, producto o artefacto digital de un proyecto de software tiene que estar en el repositorio, tuve problemas con uno que llegó a albergar archivos muy grandes que eran actualizados constantemente, pero no necesarios para desarrollar el producto ya que eran los entregables que teníamos que hacer cada dos semanas. Básicamente no quería que el equipo de desarrollo tuviera que soportar bajarlos cada ver que hacían update.

Para resolver este problema recurri a SVNForum.org donde hice el siguiente post:

Gents,

There's a huge folder in our repository that contains database backups, which are essentially deliverables that we send out every two weeks (which is part of our release process).

Those files are added in the repository for historical purposes. Once they are downloaded by the client, they aren't downloaded again. Those files aren't changed as well.

Do they need to be in the repository? They have to, because we give the possibility to our client to download old deliverables.

The problem is that everytime a person checks out the whole repository, the download process of all the deliverables is really slow and painful. Is there a way to mark that folder (and it's subfolders) so that when the whole project folder (which contains this huge folder with the big files )is checked out, this folder is not downloaded?

Thanks for your help!
Luego de 12 horas aproximadamente me respondieron lo siguiente:

No such mechanism exists. If someone chooses to check out the whole repository, they have to deal with the consequences.

If your repository is structured such that one must check the whole thing out, then it may be time to restructure things so these "archived" items are separated from the "active" portions a little more.
Entonces tuve una idea y la publique luego de esta pregunta:

I have the following folder structure

main\database
main\web development
main\documentation

inside "main\database" i have "main\database\deliverables". That's where the big files are located.

Perhaps i can change the structure to:

main\archive\deliverables
main\active\database
main\active\web development
main\active\documentation

so, the next time a user checks out the repo, he'll be told to download only the active part.

what do you think?

Lamentablemente nadie me respondió, pero igual recibí comentarios del equipo de que era una buena idea y fui adelante con el plan.

El post sigue online y puede verse acá.

Luego, leí el libro que recomendé en un post anterior (Leer) y realicé la siguiente reestructuración, con la estructura recomendada en otro post anterior (Leer). Creé las carpetas trunk, branches y tags dentro de active quedando el repositorio de la siguiente manera:

main\archive\deliverables
main\active\trunk\database
main\active\
trunk\web development
main\active\
trunk\documentation
main\active\branches\
main\active\tags\

No hay comentarios.: