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.
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 ./.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.