Git

3. Operaciones con remotos

Hasta ahora se han visto funcionalidades de Git que nos permiten versionar nuestros proyectos de forma local. Cuando mas de un usuario trabaja sobre un mismo proyecto, Git ofrece funcionalidades que facilitan el trabajo colaborativo.

Consideraciones

Locales y remotos

Cada usuario posee una copia del repositorio completo. Cada usuario se refiere a su copia particular como local” y las copias presentes en maquinas ajenas a la suya como “remotes” (remotos).

Git es no centralizado por naturaleza. Un usuario puede trabajar con su copia local, independientemente de lo que hagan los demás. Git permite que un usuario sincronice su repositorio local contra cualquier repositorio remoto. En este contexto, sincronizar se refiere a compartir cambios. Así, un usuario puede pasarle sus cambios a otro o descargar en su repositorio local las modificaciones que otro usuario ha hecho en su propio repositorio (que sería un repositorio remoto desde el punto de vista del usuario que descarga estas modificaciones).

Push y pull

Una operación de push implica que el usuario que la ejecuta aplica sus cambios a un repositorio remoto. Por otra parte, una operación de pull implica que el usuario que la ejecuta aplica en su repositorio los cambios que existen en un repositorio remoto.

Origin

Se ha mencionado anteriormente que Git no requiere centralización. No obstante, por cuestiones de logística, lo mas común es definir un repositorio particular como el central contra el que todos los colaboradores sincronizan sus cambios. A este repositorio central se le suele dar el alias “origin”.

Entonces, “origin” es un remoto contra el que “pusheamos” nuestros cambios o “pulleamos” los cambios que otros colaboradores han hecho.

¿Donde vive “origin”?

Origin puede existir en un servidor o computadora de la organización (self hosting), o en la nube. Existen varios servicios gratuitos de hosting de código en la nube que ofrecen funcionalidades montadas sobre Git. Algunos de los mas conocidos al momento de escribir este papiro son GitHub, GitLab, Codeberg y NotABug.

Como establecer una copia remota de un repositorio local

Supongamos que se ha trabajado en un proyecto de forma local utilizando versionado con Git. El comando

$git remote

revela los remotos asociados a este repositorio local. Siendo que este proyecto nació en forma local, via $git init, no existen remotos asociados a el. Supongamos ahora que queremos dar acceso a colaboradores mediante un repositorio central en algún servicio en la nube.

Primero, utilizando la interfaz provista por el servicio en cuestión, creamos un repositorio nuevo. El servidor le asigna una url, que sera la url del remoto “origin”. Para asociar nuestro repositorio local con el “origin” recién creado utilizamos el comando:

$git remote add origin https://url.de.repo.remoto

y seguidamente hacemos:

$git push origin branch_actual

para subir nuestros cambios (esto es, el estado actual del repositorio local) a origin, que hasta ese momento era un repositorio vacío. Git pedirá nuestras credenciales (usuario y contraseña) de la plataforma para completar el proceso.

Es necesario tener en cuenta que se debe dar acceso a los colaboradores utilizando la interfaz provista por el servidor.

Clonando un repositorio existente

Un usuario puede descargar un repositorio ya existente utilizando el comando:

$git clone https://url.de.repo.remoto

Si el repositorio en cuestión es de tipo publico, el comando se completara sin mas y se tendrá una copia del repositorio en el directorio actual. Por otra parte, si el repositorio es privado, la interfaz de Git consultará por las credenciales del usuario, quien deberá estar autorizado (esto es, debe ser colaborador) por el dueño del repositorio para completar la operación.

Sincronizando cambios de otros colaboradores

Si un colaborador sube cambios a origin, es posible descargar estos cambios a nuestro repositorio local mediante el comando:

$git pull origin branch_a_actualizar

Sincronizando nuestros cambios

Para aplicar los cambios que hemos hecho en el repositorio local al remoto origin, se utiliza el comando:

$git push origin branch_actual

Git pedirá nuestras credenciales de la plataforma donde se encuentra alojado origin. Si nuestro usuario se encuentra autorizado como colaborador del repositorio remoto, los commits que se hayan realizado en el repositorio local se aplicarén también al remoto origin.