Sincronización

Sincronización de Git

SVN utiliza un único repositorio centralizado para funcionar como un centro de comunicaciones para los desarrolladores; además, a la hora de colaborar, se pasan conjuntos de cambios entre las copias de trabajo de los desarrolladores y el repositorio central. El modelo de colaboración distribuida de Git es completamente diferente, ya que proporciona a cada desarrollador su propia copia del repositorio, con su propio historial local y estructura de ramas. Los usuarios, por lo general, necesitan compartir una serie de confirmaciones, en lugar de un solo conjunto de cambios. En vez de confirmar un conjunto de cambios de una copia de trabajo en el repositorio central, Git te permite compartir ramas enteras entre repositorios.

Git remote

El comando git remote te permite crear, ver y eliminar conexiones con otros repositorios. Las conexiones remotas se asemejan más a marcadores que a enlaces directos con otros repositorios. En lugar de brindar acceso en tiempo real a otro repositorio, funcionan como nombres prácticos que pueden emplearse para hacer referencia a una URL no tan sencilla.

Por ejemplo, en el siguiente diagrama pueden verse dos conexiones remotas desde tu repositorio hasta el repositorio central y el repositorio de otro desarrollador. En lugar de hacer referencia a ellas mediante sus URL completas, puedes pasar los atajos del origen y John a otros comandos de Git.

Uso de git remote para conectar otros repositorios

Descripción general del uso de git remote

El comando git remote es, en esencia, una interfaz para gestionar una lista de entradas remotas almacenadas en el archivo ./.git/config del repositorio. Para ver el estado actual de la lista remota, se utilizan los siguientes comandos.

Visualización de configuraciones de git remote

git remote

Enumera las conexiones remotas que tienes con otros repositorios.

git remote -v

Lo mismo que el comando anterior, pero incluye la URL de cada conexión.

Creación y modificación de configuraciones de git remote

El comando git remote es también un método sencillo y útil para modificar el archivo ./.git/config de un repositorio. Los comandos que se presentan a continuación te permiten gestionar las conexiones con otros repositorios. Los siguientes comandos modificarán el archivo /.git/config del repositorio. El resultado de dichos comandos también puede conseguirse editando directamente el archivo ./.git/config con un editor de texto.

git remote add <name> <url>

Create a new connection to a remote repository. After adding a remote, you’ll be able to use <name> as a convenient shortcut for <url> in other Git commands.

git remote rm <name>

Remove the connection to the remote repository called <name>.

git remote rename <old-name> <new-name>

Rename a remote connection from <old-name> to <new-name>.

Análisis de git remote

Git está diseñado para proporcionar a cada desarrollador un entorno de desarrollo totalmente aislado. Esto significa que la información no se envía automáticamente entre repositorios. En su lugar, los desarrolladores deben extraer commits de nivel superior hacia su repositorio local o enviar sus commits locales al repositorio central de forma manual. El comando git remote es una manera más simple de enviar URL a estos comandos de "compartición".

Origen remoto

Al clonar un repositorio con git clone, se crea automáticamente una conexión remota llamada “origin” (origen) que apunta al repositorio clonado. Esto resulta útil para los desarrolladores que crean una copia local de un repositorio central, ya que permite incorporar cambios de nivel superior o publicar confirmaciones locales de forma sencilla. Este comportamiento es también la razón por la que la mayoría de los proyectos basados en Git llaman "origin" a su repositorio central.

URL de repositorios

Git admite numerosas formas de hacer referencia a un repositorio remoto. Una de las maneras más fáciles de acceder a uno de ellos es a través de los protocolos HTTP y SSH. El protocolo HTTP brinda un acceso sencillo, anónimo y de solo lectura a un repositorio. Por ejemplo:

http://host/path/to/repo.git

Sin embargo, por lo general, no se pueden enviar confirmaciones a una dirección HTTP (de todos modos, no convendría permitir envíos anónimos). Para acceder con permisos de lectura y escritura, debes usar SSH en su lugar:

ssh://user@host/path/to/repo.git

Necesitarás una cuenta SSH válida en el equipo host, pero, aparte de eso, Git admite el acceso autenticado mediante SSH listo para usarse. Las modernas y seguras soluciones de alojamiento de terceros, como Bitbucket.com, te proporcionarán estas URL.

Comandos de git remote

El comando git remote es uno de los muchos comandos de Git que se combinan con “subcomandos” adicionales. A continuación, encontrarás un análisis de los subcomandos de git remote más utilizados.

ADD <NAME> <URL>

Adds a record to ./.git/config for remote named <name> at the repository url <url>.

Acepta la opción -f, que aplicará el comando git fetch inmediatamente después de que se cree el registro remoto.

Acepta la opción --tags, que aplicará el comando git fetch de inmediato e importará todas las etiquetas del repositorio remoto.

RENAME <OLD> <NEW>

Updates ./.git/config to rename the record <OLD> to <NEW>. All remote-tracking branches and configuration settings for the remote are updated.

REMOVE or RM <NAME>

Modifies ./.git/config and removes the remote named <NAME>. All remote-tracking branches and configuration settings for the remote are removed.

GET-URL <NAME>

Genera las URL de un registro remoto.

Acepta --push. Se consultan las URL del comando push en lugar de las del comando fetch.

Con --all, se enumerarán todas las URL de los repositorios remotos.

SHOW <NAME>

Outputs high-level information about the remote <NAME>.

PRUNE <NAME>

Deletes any local branches for <NAME> that are not present on the remote repository.

Acepta la opción --dry-run, que enumerará las ramas que estén configuradas para eliminarse, pero en realidad no las elimina.

Ejemplos de git remote

Además del origen, normalmente, conviene tener una conexión con los repositorios de tus compañeros de equipo. Por ejemplo, si tu compañero John cuenta con un repositorio de acceso público en dev.example.com/john.git, puedes añadir una conexión de la siguiente manera:

git remote add john http://dev.example.com/john.git

Disponer de este tipo de acceso a los repositorios de cada desarrollador posibilita la colaboración fuera del repositorio central. Esto puede resultar de mucha utilidad para los equipos pequeños que trabajan en un proyecto de gran envergadura.

Visualización de las conexiones remotas

De forma predeterminada, el comando git remote mostrará una lista de las conexiones remotas con otros repositorios previamente almacenadas. Esto generará un resultado de una sola línea con los nombres de los “marcadores” de los repositorios remotos.

$ git remote
origin
upstream
other_users_repo

Al invocar git remote con la opción -v, se imprimirá la lista de nombres de repositorios guardados como marcadores y, además, la URL del repositorio correspondiente. La opción -v significa "verbose" (detallado). A continuación, se muestra un ejemplo de resultado detallado de git remote.

git remote -v
origin  git@bitbucket.com:origin_user/reponame.git (fetch)
origin  git@bitbucket.com:origin_user/reponame.git (push)
upstream    https://bitbucket.com/upstream_user/reponame.git (fetch)
upstream    https://bitbucket.com/upstream_user/reponame.git (push)
other_users_repo    https://bitbucket.com/other_users_repo/reponame (fetch)
other_users_repo    https://bitbucket.com/other_users_repo/reponame (push)

Adición de repositorios remotos

El comando git remote add creará un nuevo registro de conexión con un repositorio remoto. Tras añadir el repositorio remoto, podrás usar como un práctico atajo para en otros comandos de Git. Si quieres más información sobre la sintaxis de URL aceptada, consulta la sección "URL de repositorios" de este artículo. Este comando creará un nuevo registro en el archivo ./.git/config del repositorio. A continuación, se muestra un ejemplo de actualización de este archivo de configuración:

$ git remote add fake_test https://bitbucket.com/upstream_user/reponame.git; [remote "remote_test"] 
   url = https://bitbucket.com/upstream_user/reponame.git 
   fetch = +refs/heads/*:refs/remotes/remote_test/*

Inspección de un repositorio remoto

Se puede añadir el subcomando show a git remote para presentar un resultado detallado sobre la configuración de un repositorio remoto. Dicho resultado incluirá una lista de las ramas asociadas al repositorio remoto y, además, los extremos conectados para la recuperación y el envío.

git remote show upstream
* remote upstream
   Fetch URL: https://bitbucket.com/upstream_user/reponame.git
   Push URL: https://bitbucket.com/upstream_user/reponame.git
   HEAD branch: main
   Remote branches:
      main tracked
      simd-deprecated tracked
      tutorial tracked
   Local ref configured for 'git push':
      main pushes to main (fast-forwardable)

Captura e incorporación de cambios de repositorios remotos de Git

Aplicación del comando push en repositorios remotos de Git

El comando git push se emplea para escribir en un repositorio remoto.

git push <remote-name> <branch-name>

This example will upload the local state of <branch-name> to the remote repository specified by <remote-name>.

Cambio de nombre y eliminación de repositorios remotos

git remote rename <old-name> <new-name>

The command git remote rename is self-explanatory. When executed, this command will rename a remote connection from <old-name> to <new-name>. Additionally, this will modify the contents of ./.git/config to rename the record for the remote there as well.

git remote rm <name>

The command git remote rm will remove the connection to the remote repository specified by the <name> parameter. To demonstrate let us 'undo' the remote addition from our last example. If we execute git remote rm remote_test, and then examine the contents of ./.git/config we can see that the [remote "remote_test"] record is no longer there.