¿Cuál es la diferencia entre ''origen'' y ''remoto'' en los comandos de git?
git-remote (5)
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué es el "origen" en Git? 11 respuestas
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?
- "empuje todo hacia el repositorio remoto llamado ''origen'' y su rama ''maestro''"
- "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í:
-
origin
refiere al repositorio remoto, en lugar de la copia local clonada del repositorio remoto. Esto no está claro cuando uno lee que elorigin
es un alias deremote
y se crea en el momento de lagit clone
degit clone
-
origin
refiere al repositorio remoto engit 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.
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).