23  Remotos

Los repositorios remotos son versiones de su proyecto que están alojadas en Internet o en otra red. Un solo proyecto puede tener 1, 2 o incluso cientos de controles remotos. Usted importa los cambios de otros desde los controles remotos y envía sus cambios a los controles remotos.

23.1 Listar qué controles remotos existen

git remote enumera los nombres de los controles remotos disponibles, pero generalmente es más útil ver a qué URL corresponde cada nota (con -v).

git remote -v
origin  https://github.com/davidrsch/hg-gh4res (fetch)
origin  https://github.com/davidrsch/hg-gh4res (push)

23.2 Agregar un nuevo control remoto

git clone agrega automáticamente un nuevo control remoto, por lo que a menudo no es necesario hacerlo manualmente inicialmente. Sin embargo, después de la clonación inicial, suele ser útil agregar controles remotos adicionales.

Utilice git remote add para agregar un nuevo control remoto:

git remote add happygit https://github.com/jennybc/happy-git-with-r.git

Nota: cuando agregas un control remoto, le asignas un apodo (aquí happygit), que puedes usar en los comandos de git en lugar de la URL completa.

git fetch happygit

Barra lateral sobre apodos: existe una fuerte convención para usar origin como apodo de su control remoto principal. En este punto, es común que el control remoto principal de un repositorio esté alojado en GitHub (o GitLab o Bitbucket). Es tentador utilizar un apodo más descriptivo (como github), pero es posible que valga la pena seguir la convención. Hace que su configuración sea más fácil de entender para otros y para que usted transfiera información que lee en la documentación, en Stack Overflow o en blogs.

Una razón común para agregar un segundo control remoto es cuando ha realizado una “bifurcación y clonación” de un repositorio y su copia personal (su bifurcación) está configurada como el control remoto origin. Con el tiempo, querrás importar los cambios del repositorio original. Es común utilizar upstream como apodo para este control remoto.

git remote add upstream https://github.com/TRUE_OWNER/REPO.git

23.3 Obteniendo datos de controles remotos

Para obtener nuevos datos desde un uso remoto git fetch <remote_name>. Esto recupera los datos localmente, pero lo más importante es que no cambia el estado de sus archivos locales de ninguna manera. Para incorporar los datos a su repositorio, necesita fusionar o cambiar la base de su proyecto con el proyecto remoto.

# Obtener los datos
git fetch happygit

# Fusionar con main local
git merge happygit/main main

# git pull es un atajo que hace lo anterior en un solo comando
git pull happygit main

Para obtener más detalles sobre los flujos de trabajo git pull, consulte Capítulo 29.

23.4 Enviar a controles remotos

Utilice git push <remote> <branch> para enviar sus cambios locales a la rama <branch> en el control remoto <remote>.

# enviar mis cambios locales a la rama principal del control remoto de origen
git push origin main

# enviar mis cambios locales a la rama de prueba del control remoto happygit
git push happygit test

23.5 Cambiar el nombre y cambiar los controles remotos

git remote rename se puede utilizar para cambiar el nombre de un control remoto:

git remote rename happygit hg

git remote set-url se puede utilizar para cambiar la URL de un control remoto. Esto a veces es útil si inicialmente configuró un control remoto usando HTTPS, pero ahora desea usar SSH en su lugar (o viceversa).

git remote set-url happygit git@github.com:jennybc/happy-git-with-r.git

Un flujo de trabajo bastante común es que inicialmente clonaste un repositorio en GitHub localmente (sin bifurcarlo), pero ahora quieres crear tu propia bifurcación y enviarle cambios. Como se describió anteriormente, es común llamar al repositorio de origen upstream y llamar a su bifurcación origin. Entonces, en este caso, primero debe cambiar el nombre del control remoto existente (de origin a upstream). Luego agrega tu tenedor como un nuevo control remoto, con el nombre origin.

git remote rename origin upstream
git remote add origin git@github.com:jimhester/happy-git-with-r.git

23.6 Upstream seguimiento de ramas

Es posible configurar la rama en el control remoto al que corresponde cada uno de sus controles remotos locales. git clone configura esto automáticamente, por lo que para tu propia rama main esto no es algo con lo que te toparás. Sin embargo, de forma predeterminada, si crea una nueva rama e intenta acceder a ella, verá algo como esto:

git checkout -b mybranch
git push
# fatal: The current branch foo has no upstream branch.
# To push the current branch and set the remote as upstream, use
#
#     git push --set-upstream origin foo

Puede hacer lo que dice el mensaje de error y configurar explícitamente la rama upstream con --set-upstream. Sin embargo, recomendaría cambiar el comportamiento predeterminado de push para configurar automáticamente la rama upstream en la rama con el mismo nombre en el control remoto.

Puedes hacer esto cambiando la opción git push.default a current.

git config --global push.default current

Consulte también Trabajar con controles remotos:

https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes