Deja que git saque cambios del repository local al repository del server

Tengo un repository git en un server remoto al que puedo SSH. El repository remoto no es simple.

Cloné el repository remoto en mi máquina local.

¿Cómo puedo decirle al server remoto que realice cambios desde mi máquina local?

Como tanto el comentario existente como la respuesta hasta ahora, parece ser más habitual establecer un repository autoritativo, "desnudo" al que los contribuyentes presionan. Esto deja en claro que, por ejemplo, el devel sucursal en el Remote-Repo-Site designado es "la" twig de devel , y todas las demás son simplemente imitaciones débiles. 🙂 Esto es particularmente común en entornos corporativos. Tiene la ventaja de que hay líneas claras de autoridad.

Dicho esto, sin embargo, no hay nada que te impida build un sistema de igual a igual en git. Aquí, cada repository de git se mantiene perfectamente bien por sí mismo. Repo R A en el host A es tan bueno como repo R B en el host B.

Para hacer esto conveniente, en el host A, en la copy repo allí, puede crear un "control remoto" para el host B. En el host B, en la copy repo, crea un control remoto para el host A. Entonces, cualquiera sea el sistema en el que se encuentre en este momento, simplemente puede git fetch remote (donde remote es el nombre en ese host para el otro host que le interesa).

De hecho, puede ampliar este model para tener muchos pares, y tal vez varios puntos "más autorizados" en los que se puedan sincronizar varios pares. Es decir, puede build un híbrido de repositorys autoritarios y pares.

Esto funciona porque todos los repos de git son básicamente idénticos en estructura . Lo único que hace que un repository autorizado sea "autorizado" es que quienes lo usan lo tratan de esa manera. Si tengo mi repo y obtengo cosas tuyas y creo que es mejor que mis cosas anteriores, bueno, entonces, debes ser la autoridad aquí. Si elijo no creerte, entonces me convertiré en mi propia autoridad.

Es importante señalar aquí que la "desnudez" de un repository no forma parte de su autoridad (si corresponde). De hecho, el único punto de un repository desnudo es hacer que sea simple git push él. Si ingresas a un repository donde alguien está trabajando, pueden creer que están en commit 0ab7c32 en devel , pero ahora sus puntos de devel comprometen 905c4fd . 1 Un repository desnudo no tiene un tree de trabajo, por lo que, por definición, no puede meterse con el trabajo en progreso de alguien en el tree de trabajo en ese depósito desnudo.

Mientras tanto, el punto principal de tener un repository fácil de git push , es tener un punto de encuentro mutuamente acordado, de modo que si hay una docena de pares que se desarrollan en varias twigs de desarrollo, no es necesario que todos se conozcan entre sí. , configure remotos el uno para el otro y acceda a sus propios sistemas.

Son estas dos properties las que hacen que un repository simple sea ideal para build estructuras autorizadas. Las "abejas obreras" clonan el sistema autoritativo, hacen su trabajo, luego (intentan) llevarlo de return al sistema autorizado. Todas las relaciones son por pares, y ninguna abeja obrera tiene que hablar directamente con otra.

Pero no tienes que hacerlo de esta manera. Por ejemplo, tengo mi computadora portátil y mi escritorio y los configuré como compañeros el uno del otro. Desde la computadora portátil, puedo git fetch desktop y viceversa, según sea necesario. El único inconveniente que encuentro es que puedo olvidar que tenía un trabajo en progreso en la computadora portátil (o computadora de escritorio), que no me había comprometido, y ahora estoy en la otra, así que ahora no puedo acceder a mi trabajo -en-progreso sin ssh-ing a la otra máquina primero. Pero eso no suele ser un gran problema.


1 Mercurial escapa esto haciendo un seguimiento de dónde va el "próximo compromiso" de una manera diferente, por lo que puede enviarlo a repositorys no vacíos, incluso si tienen la twig empujada a desproteger. Git podría hacer lo mismo, pero requeriría la posibilidad de crear un nuevo nombre de twig sobre la marcha, o de ponerlo en el modo "HEAD separado" cuando alguien empuja hacia la twig en la que se encuentra.

Tienes que poder enviar ssh a tu máquina local para hacer esto. Solo haz:

  git pull user@machine-ip:/path/to/repository/on/local/machine 

Sin embargo, como señaló StuartLC en los comentarios, probablemente sea mejor pasar de la máquina local al repository remoto. Preferiblemente, tenga un repository vacío en alguna parte y empuje / jale a través de eso.