Cambiar las actualizaciones de URL remotas de Git obtener pero no enviar

3 minutos de lectura

Estoy intentando cambiar la URL remota de mi rama de origen en Git. Todo lo que quiero cambiar es el puerto SSH. Primero, enumerar mis orígenes remotos me da esto:

git remote -v


origin  user@example.com:package/name.git (fetch)
origin  user@example.com:package/name.git (push)

Luego, ejecuto el set-url comando para cambiar mi URL de origen:

git remote set-url origin ssh://user@example.com:XX/package/name.git    (XX is my port #)

Ahora, puedo obtener sin problemas, pero enviar mi rama al origen no funciona porque la URL de envío no cambió. Al enumerar mis controles remotos nuevamente, obtengo esto:

git remote -v


origin  ssh://user@example.com:XX/package/name.git (fetch)
origin  user@example.com:package/name.git (push)

¿Por qué mi set-url ¿El comando solo cambia la URL de búsqueda?

  • si escribes man git-remote en la línea de comando, puede encontrar esta información fácilmente. Esto funciona para casi todos los comandos de git, por ejemplo man git-add, man git-pushy así.

    – Connor

    26 de enero de 2017 a las 15:17

avatar de usuario
corriendo.t

De git-remote manual:

set-url
    Changes URL remote points to. Sets first URL remote points to matching regex <oldurl> (first URL if no <oldurl> is given) to <newurl>. If <oldurl> doesn’t match any URL,
    error occurs and nothing is changed.

    With --push, push URLs are manipulated instead of fetch URLs.

Así que, además, debe ejecutar:

git remote set-url --push origin ssh://user@example.com:XX/package/name.git

  • esto funciona aunque no explica por qué no se actualizó tanto como se supone que debe hacerlo

    – Jack James

    24 de julio de 2017 a las 10:59

  • @JackJames: Correcto, estaba bastante seguro de que este comando solo configuraba la URL de búsqueda de forma predeterminada. Ahora estaba tratando de encontrar una descripción exacta en la documentación, pero solo encontré varias publicaciones de blog inconsistentes, por ejemplo Éste hormiga Éste eso dice que si no se establece push, fetch se usa como respaldo. probablemente investigaré código fuente descubrir.

    – corriendo.t

    24 de julio de 2017 a las 11:45


  • @running.t No puedo encontrar ninguna opción para pull dirección remota, ¿es lo mismo obtener la dirección remota que tirar?

    – Benyamín Jafari

    5 de julio de 2018 a las 10:42

  • @BenyaminJafari: Bueno, en documentación de git-pull puedes averiguar eso pull es de hecho fetch seguido por merge. Así que sí, obtener la dirección remota es la que se usa cuando llamas git pull.

    – corriendo.t

    5 de julio de 2018 a las 11:33

  • ¿Hay alguna manera de cambiar ambas URL con un comando?

    – Jim Aho

    3 de febrero de 2021 a las 15:19

avatar de usuario
mafu

Siempre que el archivo de configuración del repositorio en cuestión contenga una entrada para la URL de inserción, set-url solo actualizará la URL de obtención de forma predeterminada.

[remote "origin"]
    url = fetch.git
    fetch = ...
    pushurl = push.git

Como explica la respuesta de running.t, puedes usar set-url --push para cambiar esta entrada. Sin embargo, tendrá que seguir haciendo esto cada vez que cambie la URL.

Para restaurar el comportamiento predeterminado de set-url (que cambia ambas URL a la vez), simplemente elimine la entrada de la configuración. O eliminarlo usando set-url --delete:

git remote set-url --delete --push origin push.git

En cuanto a por qué un repositorio alguna vez contendría una URL de inserción separada sin que usted la agregue: algunos clientes de git como Sourcetree “útilmente” hacen esto.

  • Esta respuesta fue útil para entender por qué git remote set-url estaba cambiando ambas URL para mí, cuando en realidad quería que solo cambiara la búsqueda

    – Gobe

    11 de enero a las 19:17

¿Ha sido útil esta solución?