25  Configuraciones remotas comunes

Aquí sólo consideramos un conjunto muy limitado de controles remotos:

Si utiliza un host diferente o nombres remotos diferentes, aún debería poder traducir estos ejemplos a su configuración.

A lo largo del camino, observamos cómo estas configuraciones se relacionan con el paquete usethis, es decir, cómo usethis puede ayudarlo a lograr una configuración favorable o cómo una configuración favorable desbloquea todo el poder de usethis. Muchas de estas operaciones, incluida la caracterización de sus controles remotos de GitHub, requieren que haya configurado un token de acceso personal de GitHub. Consulte Sección 9.3 para obtener más detalles sobre por qué y cómo hacerlo. Si no utiliza usethis, no dude en ignorar estos aspectos.

25.1 Sin GitHub

Como punto de partida, considere un repositorio de Git local que aún no esté conectado a GitHub.

Setup described as 'no_github'

Esto no es muy emocionante, pero prepara el escenario para lo que está por venir. Introducimos el ícono que usamos para un repositorio de Git, que parece una pila de monedas o un barril. Este es azul, lo que indica que tienes permiso de escritura.

Como alcanzar:

  • Línea de comando Git: git init
  • Con usethis, proyecto existente: usethis::use_git()
  • Con RStudio:
    • Proyecto existente: Tools > Version Control > Project Setup, seleccione Git como el sistema de control de versión
    • Nuevo proyecto: asegúrese de que esté seleccionado “Create a Git repository”

usethis describe esta configuración como “no_github”.

25.2 La nuestra (más específicamente, la tuya)

Un siguiente paso común es asociar un repositorio local con una copia en GitHub, de su propiedad.

Setup described as 'ours'

Se configura un control remoto llamado origin y usted tiene permiso para enviar (e importar) origin. (Es por eso que origin está coloreado en azul y hay flechas sólidas que van en ambas direcciones). El control remoto origin en GitHub es lo que llamaremos un repositorio fuente, lo que significa que no es una bifurcación (es decir, una copia). de cualquier otra cosa en GitHub. En este caso, origin es también lo que llamaremos su repositorio principal, lo que significa que es el control remoto principal con el que interactúa en GitHub (para este proyecto).

Cómo lograr si el repositorio local existe primero:

  • Las instrucciones detalladas se encuentran en Proyecto existente, GitHub último.
  • Con usethis: usethis::use_github().
  • Línea de comando Git o RStudio: no puede completar esta tarea completamente desde la línea de comando o desde RStudio:
    • Cree un nuevo repositorio de GitHub en el navegador, con el nombre correcto, y capture su URL HTTPS o SSH.
    • Configurar el repositorio como el remoto origin.
    • Push.
    • Incluso ahora, la configuración puede no ser ideal, porque las relaciones de seguimiento ascendentes probablemente no estén configuradas, lo que significa que es posible que no pueda enviar e importar fácilmente. Es posible que deba configurar explícitamente una rama upstream para una o más ramas locales. La próxima vez que quieras crear un repositorio de GitHub desde un repositorio local, considera usar usethis::use_github(), que completa toda esta configuración de una sola vez.

Cómo lograr si el repositorio remoto existe primero:

  • Las instrucciones detalladas se encuentran en Nuevo proyecto RStudio mediante git clone.
  • Con usethis: usethis::create_from_github("OWNER/REPO", fork = FALSE)
  • Línea de comando: git clone <URL>, con la URL HTTPS o SSH del repositorio de origen
  • En RStudio: capture la URL HTTPS o SSH del repositorio de origen y haga File > New Project > Version Control > Git.

usethis describe esta configuración como “ours”.

25.3 Nuestra

Aquí hay una variación sobre “ours” que es equivalente en la práctica.

Setup described as 'ours'

Se configura un control remoto llamado origin y puede enviar (e importar) origin. Como se indicó anteriormente, origin es un repositorio fuente, lo que significa que no es una bifurcación (o copia) de nada más en GitHub. Sin embargo, el control remoto origin no es de su propiedad. En cambio, es propiedad de otro usuario u organización de GitHub. origin también es su repositorio principal en esta configuración.

¿Como sucedió esto?

  1. El repositorio de origen es propiedad de una organización y su función en esta organización le confiere poder suficiente para crear repositorios o enviarlos a este repositorio.
  2. El propietario del repositorio de origen lo agregó, específicamente, como colaborador de este repositorio específico.

¿Como lograr esto? El procedimiento es el mismo que para la configuración “ours” anterior. Pero recuerde especificar usethis::use_github(organization = "ORGNAME") si desea crear un nuevo repositorio bajo una organización, en lugar de su cuenta personal.

usethis describe esta configuración como “ours”.

25.4 Suyo

Esta es una configuración en la que muchas personas se meten, cuando en realidad no es lo que necesitan. No está roto per se, pero es limitante.

Setup described as 'theirs'

No puede enviar al origin, que es tanto el repositorio de origen como el repositorio principal. (Esto se indica con el color naranja de origin y la flecha de “enviar” discontinua y atenuada). origin es de solo lectura para usted.

Si está realizando un repositorio para una prueba rápida, esta configuración está bien. Pero no hay forma de recuperar los cambios en el repositorio de origen, ya que no puede enviarlos y no ha creado una bifurcación, que es necesaria para una solicitud de fusión.

¿Como sucedió esto?

  • Clonando el repositorio de origen, ya sea mediante git clone <URL> (línea de comando) o mediante un cliente Git, p. Flujo de trabajo Archivo > Nuevo proyecto > Control de versiones > Git de RStudio.
  • Ejecutando usethis::create_from_github("OWNER/REPO", fork = FALSE).

usethis describe esta configuración como “theirs”.

¿Qué sucede si desea realizar una solicitud de fusión? Esto significa que deberías haber hecho fork-and-clone en lugar de clone. Si no ha realizado cambios o es fácil guardarlos en algún lugar temporalmente, simplemente comience de nuevo con un flujo de trabajo de bifurcación y clonación (explicado completamente en Capítulo 31) y vuelva a introducir sus cambios. También es posible conservar su trabajo en una rama local, bifurcar el repositorio de origen, reconfigurar sus controles remotos, volver a sincronizar con el repositorio de origen y volver a la normalidad. Pero es mucho más fácil equivocarse. ¡Y recuerda bifurcar y clonar (no sólo clonar) en el futuro!

25.5 Fork (theirs)

Esta es una configuración ideal si desea realizar una solicitud de fusión y, en general, seguir el desarrollo de un repositorio fuente propiedad de otra persona.

Setup described as 'fork'

Esto muestra un “fork-and-clone” exitoso. Su repositorio local puede importar cambios del repositorio de origen, que está configurado como “upstream”, al cual no puede enviar cambios (pero sí puede importarlos). Tienes un fork del repositorio fuente (una copia muy especial, en GitHub) y está configurado como origin. origin es su repositorio principal. Puede enviar e importar desde el origin. Puede realizar una solicitud de fusión al repositorio de origen a través de su bifurcación.

usethis describe esta configuración como “fork”.

Como alcanzar:

  • Las instrucciones detalladas se dan en Fork y clone.
  • Con usethis: usethis::create_from_github("OWNER/REPO", fork = TRUE)
  • Línea de comando Git o RStudio: no puede completar esta tarea completamente desde la línea de comando o RStudio:
    • Bifurca el repositorio fuente en el navegador, captura la URL HTTPS o SSH de tu bifurcación, luego usa git clone <FORK_URL> (línea de comando) o RStudio. File > New Project > Version Control > Git flujo de trabajo. Pero espera, ¡aún no has terminado! Si se detiene aquí, tendrá la configuración incompleta a la que nos referimos como “fork (salvageable)”.
    • Aún necesita agregar el repositorio de origen como control remoto upstream. Capture la URL HTTPS o SSH del repositorio de origen. En la línea de comando, haga git remoto add upstream <SOURCE_URL> o haga clic en el botón Nueva rama de RStudio, que abre una ventana donde puede agregar el control remoto upstream.
    • Incluso entonces, la configuración puede no ser ideal, porque su rama predeterminada local probablemente esté rastreando el origin, no el upstream, lo cual es preferible para una bifurcación. usethis::create_from_github() completa toda esta configuración de una sola vez.
    • Estos dos últimos pasos se describen en Finalizar la configuración de bifurcación y clonación.

25.6 Fork (ours)

Esta es una variación menos común en la configuración de fork.

Setup described as 'fork'

En este caso, tiene permiso para enviar al repositorio de origen, pero elige crear una bifurcación personal de todos modos. Ciertos proyectos favorecen este enfoque y ofrece la máxima flexibilidad de desarrollo para usuarios avanzados. Sin embargo, en este caso, a la mayoría de los usuarios les resulta mejor la configuración más sencilla “ours”.

Como lograrlo:

  • En general, es lo mismo que la configuración de bifurcación normal anterior.
  • Con usethis, asegúrese de especificar explícitamente fork = TRUE, es decir, ejecute usethis::create_from_github("OWNER/REPO", fork = TRUE).

usethis describe esta configuración como “fork”.

25.7 Fork (salvageable)

Aquí hay una última configuración de bifurcación que no es óptima, pero se puede salvar.

{fig-align=“center” fig-alt = “Setup described as ‘fork_upstream_is_not_origin_parent’” width=“60%”}

Esto es lo que sucede cuando haces bifurcación y clonación y solo haces bifurcación y clonación. Lo que falta es una conexión con el repositorio de origen.

¿Como sucedió esto?

  • Clonar su propia bifurcación, ya sea mediante git clone en el shell o mediante un cliente Git, como RStudio. Y luego parando aquí.

Si solo planea realizar una solicitud de cambios, esta configuración está bien. Cuando finalice el intercambio, elimine su repositorio local y su bifurcación y continúe con su vida. Siempre puedes volver a bifurcar en el futuro. Pero si su solicitud de cambios permanece abierta por un tiempo o si planea realizar contribuciones repetidas, deberá incorporar los desarrollos en curso en el repositorio fuente a su copia local.

Puedes convertir esto en la configuración de bifurcación ideal así:

  • Las instrucciones detalladas se encuentran en Finalizar la configuración de bifurcación y clonación.
  • Agregue el repositorio de origen como remoto upstream.
  • Establezca upstream/main como la rama de seguimiento ascendente para main local (sustituya el nombre de su rama predeterminada).

La próxima vez que hagas fork-and-clone, considera usar usethis::create_from_github(fork = TRUE) en su lugar, lo que completa toda esta configuración de una sola vez.

usethis describe esta configuración como “fork_upstream_is_not_origin_parent”.