git
Es como UNIX. Fácil de usar pero exigente con sus amigos. Es casi tan poderoso y fácil de usar como una tubería de shell.
Dicho esto, una vez que comprende sus paradigmas y conceptos, tiene la misma claridad zen que esperaba de las herramientas de línea de comandos de UNIX. Debería considerar tomarse un tiempo libre para leer uno de los muchos buenos tutoriales de git disponibles en línea. El libro Pro Git es un buen lugar para comenzar.
Para responder a tu primera pregunta.
Que es git remote add ...
Como probablemente sepa, git
es un sistema de control de versiones distribuido. La mayoría de las operaciones se realizan localmente. Para comunicarse con el mundo exterior, git
utiliza lo que se llama remotes
. Estos son repositorios distintos del que está en su disco local en el que puede realizar push
sus cambios (para que otras personas puedan verlos) o pull
desde (para que pueda obtener otros cambios). El comando git remote add origin [email protected]:peter/first_app.git
crea un nuevo control remoto llamado origin
ubicado en [email protected]:peter/first_app.git
. Una vez que haga esto, en sus comandos push, puede presionar en origin
lugar de escribir la URL completa.
Que es git push origin master
Este es un comando que dice "empujar los commits en la rama local llamada master
al remoto llamado origin
". Una vez que esto se ejecute, todas las cosas que sincronizó por última vez con el origen se enviarán al repositorio remoto y otras personas podrán verlas allí.
Ahora sobre transportes (es decir, qué git://
) significa. Las URL de repositorio remoto pueden ser de muchos tipos ( file://
, https://
etc.). Git simplemente se basa en el mecanismo de autenticación proporcionado por el transporte para encargarse de los permisos y demás. Esto significa que para las file://
URL, serán permisos de archivos UNIX, etc. El git://
esquema le pide a git que use su propio protocolo de transporte interno, que está optimizado para enviar los conjuntos de cambios de git. En cuanto a la URL exacta, es como es debido a la forma en que github ha configurado su git
servidor.
Ahora la verbosidad. El comando que ha escrito es el general. Es posible decirle a git algo como "la rama llamada master
aquí es un espejo local de la rama llamada foo
en el control remoto llamado bar
". En git speak, esto significa que master
sigue bar/foo
. Cuando clones por primera vez, obtendrás una rama llamada master
y una llamada remota origin
(desde donde clonaste) con el maestro local configurado para rastrear el maestro en origen. Una vez que esté configurado, simplemente puede decir git push
y lo hará. El comando más largo está disponible en caso de que lo necesite (por ejemplo, git push
podría pasar al repositorio público oficial y git push review master
puede usarse para pasar a un control remoto separado que su equipo usa para revisar el código). Puede configurar su rama para que sea una rama de seguimiento utilizando el--set-upstream
opción del git branch
comando.
He sentido que git (a diferencia de la mayoría de las otras aplicaciones que he usado) se entiende mejor de adentro hacia afuera. Una vez que comprenda cómo se almacenan y mantienen los datos dentro del repositorio, los comandos y lo que hacen se vuelven claros. Estoy de acuerdo con usted en que hay un cierto elitismo entre muchos git
usuarios, pero también descubrí que con los usuarios de UNIX había una vez, y valió la pena pasarlos por alto para aprender el sistema. ¡Buena suerte!
[email protected]:peter/first_app.git
es lascp
sintaxis de estilo para las URL ssh en git. Otro punto es que, de manera predeterminada, la configuración ascendente demaster
no afecta el comportamiento de agit push
menos que hayapush.default
configuradotracking
(oupstream
en versiones posteriores). Hice una publicación de blog sobre esta fuente de confusión: longair.net/blog/2011 / 02/27 /…push.default
la configuración aguas arriba se usaría para encontrar el control remoto predeterminado cuando se usagit push
, pero no afectaría el mapeo de las referencias.Actualización: tenga en cuenta que la respuesta actualmente aceptada perpetúa un malentendido común sobre el comportamiento de
git push
, que no se ha corregido a pesar de un comentario que lo señala.Su resumen de lo que son los controles remotos, como un apodo para la URL de un repositorio, es correcto.
Las dos URL que ha mencionado indican que se deben usar dos protocolos de transporte diferentes. La primera
git://
es para el protocolo git, que generalmente solo se usa para el acceso de solo lectura a los repositorios. La otra[email protected]:peter/first_app.git
, es una de las diferentes formas de especificar el acceso a un repositorio a través de SSH: esta es la "sintaxis de estilo scp" descrita en la documentación . El nombre de usuario en la sintaxis de estilo scpgit
se debe a la forma en que GitHub trata con la identificación de usuarios, esencialmente ese nombre de usuario se ignora y el usuario se identifica en función del par de claves SSH que utilizaron para autenticar.En cuanto a la verbosidad de
git push origin master
, te has dado cuenta de que después del primer empujón, puedes hacerlogit push
. Esto se debe a una serie de valores predeterminados difíciles de recordar pero generalmente útiles :)remote.master.url
se utiliza el control remoto configurado para la rama actual ( en su caso). Si eso no está configurado, entoncesorigin
se usa.master
. Ej .master:my-experiment
, Etc.), el valor predeterminado de git es empujar cada rama local que tenga el mismo nombre que una rama en el control remoto. Si solo tiene una rama llamadamaster
en común entre su repositorio y el remoto, eso será lo mismo que empujarlomaster
al control remotomaster
.Personalmente, dado que tiendo a tener muchas ramas temáticas (y a menudo varios controles remotos), siempre uso el formulario:
... para evitar empujar accidentalmente otras ramas.
En respuesta a sus comentarios sobre una de las otras respuestas, me parece que está aprendiendo sobre git de arriba hacia abajo de manera muy efectiva: ha descubierto que los valores predeterminados funcionan y su pregunta es preguntar por qué;) Para ser más serio, git puedese puede usar esencialmente como SVN, pero saber un poco sobre los controles remotos y las ramas significa que puedes usarlo con mucha más flexibilidad y esto realmente puede cambiar tu forma de trabajar para mejor. Su comentario sobre un curso semestral me hace pensar en algo que dijo Scott Chacon en una entrevista de podcast: a los estudiantes se les enseña sobre todo tipo de herramientas básicas en informática e ingeniería de software, pero muy raramente en el control de versiones. Los sistemas de control de versiones distribuidos como git y Mercurial ahora son tan importantes y tan flexibles que valdría la pena impartir cursos sobre ellos para darles a las personas una buena base.
Mi opinión es que
git
, con esta curva de aprendizaje, vale la pena: trabajar con muchas ramas temáticas, fusionarlas fácilmente y empujarlas y arrastrarlas entre diferentes repositorios es fantásticamente útil una vez que tenga confianza en el sistema. Es lamentable que:fuente
Eche un vistazo a la sintaxis para agregar un repositorio remoto.
Ejemplo:
Analicemos el comando:
git remote esto se usa para administrar sus servidores centrales para alojar sus repositorios git.
Puede ser que estés usando Github para tus cosas del repositorio central. Te daré un ejemplo y explicaré el comando git remote add origin
Supongamos que estoy trabajando con GitHub y BitBucket para los servidores centrales de los repositorios git y he creado repositorios en ambos sitios web para mi proyecto de primera aplicación .
Ahora, si quiero enviar mis cambios a estos dos servidores git, tendré que decirle a git cómo llegar a estos repositorios centrales. Entonces tendré que agregar estos,
Para GitHub
Y para BitBucket
He usado dos variables (hasta ahora es fácil para mí llamarlas variables) gh_origin (gh FOR GITHUB) y bb_origin (bb for BITBUCKET) solo para explicarle que podemos llamar al origen lo que queramos.
Ahora, después de hacer algunos cambios, tendré que enviar (enviar) todos estos cambios a los repositorios centrales para que otros usuarios puedan ver estos cambios. Entonces llamo
Empujando a GitHub
Empujando a BitBucket
gh_origin tiene el valor de https://github.com/user/first-app-git.git y bb_origin tiene el valor de https: //[email protected]/user/first-app-git.git
ya que cada vez que necesito enviar mis cambios de código, necesito usar estas palabras en lugar de recordar o escribir la URL de la misma.
La mayoría de las veces no verá nada excepto el origen, ya que la mayoría de las veces se ocupará de un solo repositorio central como Github o BitBucket, por ejemplo.
fuente
El
.git
final del nombre del repositorio es solo una convención. Por lo general, en los servidores git, los repositorios se guardan en directorios con nombreproject.git
. El cliente y el protocolo git honran esta convención probandoproject.git
cuándo soloproject
se especifica.git://[email protected]/peter/first_app.git
no es una url git válida. Los repositorios de git se pueden identificar y acceder a través de varios esquemas de URL especificados aquí .[email protected]:peter/first_app.git
es lassh
url mencionada en esa página.git
Es flexible. Le permite rastrear su sucursal local contra casi cualquier sucursal de cualquier repositorio. Si bienmaster
el seguimiento (su sucursal predeterminada local)origin/master
(la sucursal predeterminada remota) es una situación popular, no es universal. Muchas veces es posible que no quieras hacer eso. Es por eso que el primerogit push
es tan detallado. Le dice a git qué hacer con lamaster
sucursal local cuando haces unagit pull
o unagit push
.El valor predeterminado para
git push
ygit pull
es trabajar con el control remoto de la sucursal actual. Este es un mejor valor predeterminado que el maestro de origen. La forma en que git push determina esto se explica aquí .git
es bastante elegante y comprensible, pero hay una curva de aprendizaje por la que caminar.fuente
git push
no utiliza las variables de configuración configuradasgit branch/checkout --track
para determinar a qué referencia remota se debe enviar. Sin embargo, tienes razón en que git pull sí los usa.Git remoto agregar origen:
Centraliza su código fuente a los otros proyectos. Está desarrollado en base a Linux, completa el código abierto y hace que su código sea útil para otros usuarios de git. Lo llamamos como referencia
Introduce tu código en el repositorio de git utilizando la url remota del git hub.
fuente