Git en la carretera: error de inserción ' maestro -> maestro (la twig está actualmente desprotegida)'

Digamos que estoy de viaje con un amigo, estamos fuera de línea desde el repository de Git. Tengo una copy de trabajo (con la carpeta .git) y mi amigo quiere ayudarme a que clone mi repository de git de mi copy de trabajo y trabaje solo y, por supuesto, ambas copys son de pago, así que básicamente no puedo comprometerme y él puede no presionar hasta que uno de nosotros haga una twig. ¿Hay una mejor manera de hacer esto? ¿Hay alguna forma de no tener nuestro pago principal local? Supongo que siempre puedo crear un git localmente y los dos podemos señalarlo, pero eso parece un poco excesivo. El objective es que él fusione fácilmente su cambio con el mío y luego, cuando esté en línea, cometeré todo eso.

Hay algunos detalles que faltan en la pregunta, pero intentaré responder de todos modos. En primer lugar, si ambos tienen sus propias copys del repository, entonces ambos deberían poder realizar cambios en sus propias copys locales.

Si su amigo está tratando de llevar sus cambios a su repository local, parece que no está funcionando porque actualmente tiene el master desprotegido, lo que tendría sentido como característica de security … no le gustaría que Git intercambie silenciosamente. su copy de trabajo directamente debajo de su nariz sin previo aviso. Puedes permitir que Git mueva tu twig master / reference / label / puntero revisando directamente la confirmación:

 $ git checkout head 

Entonces, tu amigo probablemente podrá enviar sus cambios a tu repository. Después de que haya terminado, asegúrese de verificar la twig master nuevamente en su repository local (si desea trabajar en él):

 $ git checkout master 

Sin embargo, las personas generalmente no presionan los cambios a los repos personales / privados de otras personas. Por lo general, se envían entre sí requestes de extracción en su lugar, y fetch los cambios de los demás. De modo que podría agregar el control remoto de su amigo y fetch sus cambios y luego merge (o hacer ambas cosas):

 $ git add <friend name> <url or path to friend remote> $ git fetch <friend remote> $ git merge <friend>/master # Or combine fetch and merge using pull $ git pull <friend> master 

Alternativamente, en lugar de search y fusionar (o arrastrar) los cambios de su amigo en su sucursal master local, puede modificar sus cambios locales en la parte superior de sus cambios:

 $ git fetch <friend remote> $ git rebase <friend>/master master 

Simplemente no use push. Añádanse unos a otros como remotos y usen git fetch / merge, cherry-pick, rebase o lo que sea apropiado para get contribuciones de los demás.

La respuesta de @ cupcake está bien, pero no hay nada excesivo sobre la configuration de un repository simple en su máquina que actúa como un repository remoto central para usted y su amigo. En realidad, es mucho más simple y hace la vida más fácil una vez que se configura:

Prepare su nuevo repository desnudo

 mkdir newrepo cd newrepo git init --bare 

De vuelta a su repository existente:

 git remote add new_repo_alias /path/to/newrepo git push new_repo_alias something 

Tu amigo hace lo mismo con ssh://... , pero ya has descubierto esa parte.

¡fácil!