Repository compartido en Git


Lección 33 / 53

Repository compartido en Git

Git Guía Git Guía Git español

En la sección introductoria, dijimos que una de las ventajas de Git es que ofrece un modelo de colaboración distribuida. También ya hemos explicado cómo "recuperar" un proyecto preexistente alojado en un servidor remoto usando el comando git clone.

Entremos en más detalles sobre el uso de un repositorio remoto por parte de múltiples colaboradores, comenzando por el modelo más simple, el del "repositorio compartido".


Repository condiviso

Repository compartido

La forma más sencilla de colaborar utilizando Git es la denominada “modello shared repository”.

En la práctica, dado que un repositorio de Git contiene todo el historial del proyecto, en este modo hay un repositorio compartido ubicado en una computadora remota al que pueden acceder todos los colaboradores y que se utiliza para recuperar o enviar nuevos commit.

Los desarrolladores web colaboradores individuales recuperan una copia local del repositorio remoto compartido en sus computadoras usando el comando git clone. Los commit agregados por colaboradores individuales en sus copias locales se pueden enviar a la copia remota compartida mediante el comando git push. Los commit agregados por otros colaboradores a la copia remota compartida se pueden recuperar y devolver a su copia local mediante los comandos git fetch y git pull.

De esta forma, el repositorio remoto compartido actúa como una “master copy” (la versión original de un contenido, por ejemplo, un álbum de música o una película de la que se hacen copias) de la historia del repositorio, es decir, es el historia original y oficial de los repositorios que todos pueden acceder.

 

History originale

History original

 

Obviamente, la otra característica fundamental de Git entra en juego al enviar y recuperar nuevos commit, es decir, la protección de los cambios en el historial. En el caso que se muestra en la imagen de arriba, dos colaboradores agregaron un commit (D y E respectivamente) a la misma secuencia de commit (A-B-C) recuperada de un repositorio remoto.

En esta situación, el histy de los dos repositorios locales es "localmente" correcto. Ambos saben que tienen una confirmación más que el repositorio remoto, y ambos pueden enviar potencialmente su propio commit adicional al repositorio remoto.

En el momento en que uno de los dos colaboradores envía su commit al repositorio remoto original, la situación cambia.

 

You shall not push

You shall not push

 

Una vez que la confirmación del colaborador con el cilindro (E) se haya convertido en parte del repositorio remoto original, ya no será posible que el otro colaborador envíe su commit (D) al repositorio remoto. De hecho, para Git un commit no se compone solo de los cambios realizados en los archivos que forman parte del proyecto, sino que es un snapshot dentro de una secuencia de snapshot.

El colaborador sin cilindro tiene dos opciones:

  • recupera del repository remoto la history actualizada (A-B-C-E), agrega a esta su commit y luego lo envía al repository remoto
  • fuerza el envío de su history (A-B-C-D) al repository remoto, sobrescribiendo y eliminando así todos los rastos del commit E del repository remoto

La segunda opción es obviamente la que no debe usarse en situaciones normales. Git permite sobrescribir el historial, pero solo se debe hacer cuando realmente se hace, es decir, para corregir algo, no para frustrar el trabajo de otros.

En cuanto a la primera opción, existen varias situaciones posibles cuando recuperas el historial remoto actualizado y lo vuelves a copiar a tu copia local, que veremos en las siguientes secciones.

Una nota final: obviamente, el repositorio remoto compartido también se usa para mantener sincronizados el branch y tag.

Guía Git en español 1 ¿Qué es Git? 2 Nacimiento de Git 3 Principales características de Git 4 Línea de comando UI en Git 5 Cómo instalar Git 6 5 comandos Git para desarrolladores individuales 7 5 comandos Git para desarrollar en colaboración 8 Repository en Git 9 Commit en Git 10 Working Copy en Git 11 Staging Area en Git 12 Branch en Git 13 Remote en Git 14 Inicializar un nuevo repository con git init 15 Crear una copia de un repository remoto en Git con git clone 16 Configurar las opciones de Git con git config 17 El comando Git add en Git 18 El comando Git commit en Git 19 El comando Git diff en Git 20 El comando Git stash en Git 21 .gitignore : los archivos ignored en Git 22 El comando Git status en Git 23 El comando Git log en Git 24 El comando Git tag en Git 25 El comando Git blame en Git 26 El comando Git checkout en Git 27 El comando Git revert en Git 28 El comando Git reset en Git 29 El comando Git rm en Git 30 La opción Git commit –amend en Git 31 Git rebase –interactive en Git 32 Atajos para comandos frecuentes en Git 33 Repository compartido en Git 34 El modelo Fork & pull 35 El comando Git remote en Git 36 Los principales repository remote de Git: Github, Gitlab y Bitbucket 37 El comando Git fetch en Git 38 El comando Git push en Git 39 El comando Git pull en Git 40 El comando Git branch en Git 41 El comando Git checkout en Git 42 El comando Git merge en Git 43 Resolver un merge conflict en Git 44 Entender mejor el contenido de los commit durante un conflicto de merge en Git 45 Workflow Git centralizado 46 Workflow Git feature branching 47 Workflow Git trunk-based 48 Enfoque “forking” en Git 49 Gitflow en Git 50 Mensajes de commit en Git 51 Tagging & Versioning en Git 52 La opción merge en Git 53 La opción rebase en Git

© 2022 Aulab. Todos los derechos reservados • P.IVA: IT07647440721 • Política de privacidad