git git-remote

¿Cuál es la diferencia entre ''origen'' y ''remoto'' en los comandos de git?



git-remote (5)

Esta pregunta ya tiene una respuesta aquí:

En git lingo, ¿son el origin y el remote lo mismo? ¿O el origin refiere al directorio local?

En el caso de git push -u origin master : ¿Cuál de las siguientes interpretaciones es correcta?

  1. "empuje todo hacia el repositorio remoto llamado ''origen'' y su rama ''maestro''"
  2. "empujar todo, desde el repositorio local de origen llamado ''origen'' a la rama ''maestra'' aguas arriba"

Agradezco cualquier aclaración!

Las respuestas a mi pregunta aclararon dos cuestiones para mí:

  1. origin refiere al repositorio remoto, en lugar de la copia local clonada del repositorio remoto. Esto no está claro cuando uno lee que el origin es un alias de remote y se crea en el momento de la git clone de git clone
  2. origin refiere al repositorio remoto en git push -u origin master porque las copias locales del repositorio están implícitas y "raramente referenciadas".

En git lingo origin es solo el nombre predeterminado para un control remoto desde el que se clonó originalmente un repositorio. Igualmente podría haberse llamado source o remote1 o simplemente remote .

Recuerde que git es un sistema distribuido de igual a igual, no uno con ninguna noción incorporada de cliente / servidor, maestro / esclavo, relaciones padre / hijo (aunque un usuario podría imponerle esto en un escenario particular) )

Todos los controles remotos son iguales. origin es simplemente (y literalmente) el primero entre esos iguales (para un repositorio clonado). :)

Y como Jan señala en los comentarios, el nombre asociado con cada control remoto está destinado a su conveniencia. Si encuentra que el origin no funciona realmente para usted, puede cambiarlo.

En cuanto a sus interpretaciones de la declaración push , la primera es la más cercana a ser correcta, pero el comando push tal como está escrito empujará la rama master local a la rama master en el remoto identificado por el origin nombre (configurado localmente).

Si no hay master rama master en el control remoto, se creará una.

Los detalles completos del comando push y las banderas, opciones, etc. están, por supuesto, en los documentos .

Raramente (si alguna vez) se refiere al repositorio ''local'' explícitamente ya que sus operaciones se realizan en el contexto de un repositorio.


No, remote es una estructura de origin . Ese es solo el nombre predeterminado del Git remote crea cuando clonas un repositorio.

Más información en esta pregunta: ¿Qué es el "origen" en Git?


No, no significan lo mismo.

remote , en git -speak, se refiere a cualquier repositorio remoto, como su GitHub u otro servidor git .

origin es, por convención, el nombre remoto predeterminado en git . Cuando haces un git clone <url> , <url> se agrega automáticamente a tu repositorio local bajo el nombre de origin . Por supuesto, puede agregar otros controles remotos con diferentes nombres usando git remote add .

Cuando haces git push -u origin master , lo que significa es "empujar todo, desde mi maestro local al origin remoto llamado". La estructura de este comando es, por supuesto, más general: la forma más general es git push -u <remote> <branch> , que empujará la rama llamada branch al control remoto designado, creándola en el otro extremo si el control remoto aún no lo tiene (eso es lo que hace la bandera -u ).

Como un apéndice adicional, git push , por defecto, empujará la rama actual al origin , correspondiente al git push origin <current-branch> .


Puede tener múltiples controles remotos, cada uno con un nombre diferente, como el "origen" predeterminado

Su pregunta supone que actualmente tiene la rama maestra desprotegida.

git push -u origin master

Empuje la rama local llamada master al control remoto "origen" como la rama llamada master. La bandera -u le dice a git local que rastree esa rama remota como corriente arriba a su rama local.


Un control remoto es solo una palabra: un nombre para usar para identificar algún otro repositorio de Git en alguna parte.

El origin cadena es el nombre predeterminado del control remoto (singular) que git clone coloca automáticamente, cuando clona desde otro repositorio Git ("origen" -al). Puede elegir otro nombre y / o agregar más controles remotos. Cada control remoto tiene, al menos, una URL, que es donde se encuentra el otro repositorio.

Para git push , la tercera palabra: ajuste este número si es necesario, si agrega varias banderas; en este caso agregaste -u así que ahora es la cuarta palabra- normalmente es el nombre de algún control remoto.

Las palabras restantes son todas refspecs , que se pueden resumir (aunque no con un 100% de precisión ... de hecho, menos del 50% de precisión, dependiendo de cómo cuente :-)) como un par de nombres de rama separados por dos puntos .

Si escribe solo un nombre de rama como master , Git lo toma como "usar (parte de) el flujo ascendente si está configurado, de lo contrario use el mismo nombre después de los dos puntos". Por lo general, el flujo ascendente, si se establece, tiene el mismo nombre básico, por lo que master generalmente termina significando master:master . Git los envía, el Git en la URL del control remoto, confirma que se encuentra en su rama (el nombre a la izquierda) y luego les pide que establezcan su rama (el nombre a la derecha) en la misma sugerencia que acaba de presionar para esa rama .

Si no agrega ninguna especificación de referencia, el valor predeterminado de Git depende de su versión de Git. Desde Git versión 2.0, el valor predeterminado es empujar su rama actual a una rama del mismo nombre en el control remoto.

La bandera -u le dice a git push que, si el empuje tiene éxito, debería establecer el flujo ascendente para la rama que acaba de empujar.

El flujo ascendente de una rama se divide en dos partes: el nombre de un control remoto y el nombre de una rama en ese control remoto. Dado que le dio a git push ambos elementos, el nombre del control remoto era origin y la rama era el segundo master (post-colon) del master implícito master:master de master esto, si tiene éxito, establecerá el flujo ascendente para que el master origin/master .

( Editar : es posible que, legítimamente, se pregunte de dónde vino el / en el entorno de origin/master aguas arriba . Eso es en parte un artefacto histórico. Desafortunadamente, genera una gran confusión. Por ahora, solo tenga en cuenta que el control remoto , branch y remote-tracking branch son cosas diferentes en Git. Todas están relacionadas de varias maneras, pero es importante recordar que no son lo mismo y que los términos tienen significados muy específicos. La palabra track también está sobrecargada. El nuevo término aguas arriba es mejor, pero no todas las descripciones lo usan).