gitEs 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, gites un sistema de control de versiones distribuido. La mayoría de las operaciones se realizan localmente. Para comunicarse con el mundo exterior, gitutiliza lo que se llama remotes. Estos son repositorios distintos del que está en su disco local en el que puede realizar pushsus cambios (para que otras personas puedan verlos) o pulldesde (para que pueda obtener otros cambios). El comando git remote add origin [email protected]:peter/first_app.gitcrea un nuevo control remoto llamado originubicado en [email protected]:peter/first_app.git. Una vez que haga esto, en sus comandos push, puede presionar en originlugar 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 masteral 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 gitservidor.
Ahora la verbosidad. El comando que ha escrito es el general. Es posible decirle a git algo como "la rama llamada masteraquí es un espejo local de la rama llamada fooen 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 mastery 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 pushy lo hará. El comando más largo está disponible en caso de que lo necesite (por ejemplo, git pushpodría pasar al repositorio público oficial y git push review masterpuede 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-upstreamopción del git branchcomando.
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 gitusuarios, 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.gites lascpsintaxis de estilo para las URL ssh en git. Otro punto es que, de manera predeterminada, la configuración ascendente demasterno afecta el comportamiento de agit pushmenos que hayapush.defaultconfiguradotracking(oupstreamen versiones posteriores). Hice una publicación de blog sobre esta fuente de confusión: longair.net/blog/2011 / 02/27 /…push.defaultla 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 scpgitse 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.urlse utiliza el control remoto configurado para la rama actual ( en su caso). Si eso no está configurado, entoncesoriginse 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 llamadamasteren común entre su repositorio y el remoto, eso será lo mismo que empujarlomasteral 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
.gitfinal 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.gitcuándo soloprojectse especifica.git://[email protected]/peter/first_app.gitno 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.gites lasshurl mencionada en esa página.gitEs flexible. Le permite rastrear su sucursal local contra casi cualquier sucursal de cualquier repositorio. Si bienmasterel 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 pushes tan detallado. Le dice a git qué hacer con lamastersucursal local cuando haces unagit pullo unagit push.El valor predeterminado para
git pushygit pulles 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í .gites bastante elegante y comprensible, pero hay una curva de aprendizaje por la que caminar.fuente
git pushno utiliza las variables de configuración configuradasgit branch/checkout --trackpara 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