Rama (control de versiones)
# Rama (control de versiones)

Una rama, en el ámbito del control de versiones, es una copia de los archivos de un programa que se mantiene aislada del directorio principal (que también es considerado una rama) pero que sigue estando dentro del proyecto. Al proceso de crear una rama se le conoce como «ramificación». Las ramas pueden ser creadas a partir de otras y, porsteriormente, fusionadas con la rama principal. Las ramas pueden clasificarse en la rama principal (la rama con la que se comienza el proyecto) y las ramas secundarias, creadas a partir de la rama principal y a partir de otras ramas secundarias.

Sistemas de control de versiones populares como Git incluyen comandos para crear y eliminar ramas, así como para solucionar posibles conflictos a la hora de ejecutar acciones de este tipo.

Las ramas se diferencian de las bifurcaciones en que estas últimas son copias que se separan completamente del proyecto original: son independientes; por el contrario, las ramas son copias del código de un proyecto que no dejan de estar vinculadas al proyecto original, y dependen unas de las otras. Si se borra el código del proyecto original, todas las ramas desaparecen; las bifurcaciones, sin embargo, seguirán existiendo sin cambio alguno.

## Utilidad

Las ramas son útiles por muchos motivos:

* Permiten probar funciones peligrosas o que pueden dañar versiones anteriores del programa. Puede crearse una rama dedicada al trabajo de una nueva función. Si esta no tiene problemas, se fusiona en la rama principal; si los tiene, entonces puede ser fácilmente eliminada.
* Hacen posible la creación de «ramas de trabajo en desarrollo», las cuales son útiles para trabajar en funciones que podrían ser implementadas en el futuro. Funcionan a modo de versiones alpha o beta de un programa.
* Permiten crear copias dedicadas al trabajo de una porción específica del proyecto. Por ejemplo, puede crearse una rama en la que solo se desarrollará una nueva función de un programa, una rama en la que se hará un cambio en el diseño de la interfaz de usuario o una rama en la que se corregirá un bug.
* Organizan al equipo que está trabajando en el proyecto. De esta manera, los desarrolladores que se encargan de un aspecto en concreto tendrán una rama en la que solo ellos podrán hacer cambios. Esto, asimismo, permite el trabajo colaborativo simultáneo, pues, al estar cada equipo de desarrolladores trabajando en ramas diferentes, no se sobrescribirá en los archivos de código.
* Acoplan trozos de código nuevos aislados y revisados aparte, sin la necesidad de tocar código importante de la rama principal.
* Facilitan la organización del proyecto, evitando crear carpetas y archivos innecesarios o en directorios distintos.
