Comparte el repository git a través de pendrive

Aunque mi pregunta es similar a esta , en lugar de GitHub uso pendrive y también tengo dos copys de security. Bueno, déjame describirlo a continuación.

Uso Kepler con EGit y command line git y tengo el repository local "L1" (con el grupo de trabajo) y también el repository remoto remoto "R1" en otra partición del disco en la misma computadora "C1". L1 está configurado para empujar / jalar a / desde R1. Además, hice un clon desnudo "P" de R1 en un pendrive "PD", por lo que P está configurado para captar desde R1. En otra computadora "C2" hice un clon "R2" de P, así que R2 está configurado para search / enviar formulario / a P y luego salir de la forma de proyecto R2 en Eclipse usando el repository "L2" (con set de trabajo), entonces L2 es configurado para search / enviar formulario / a R2. Básicamente, server para intercambiar cambios entre dos computadoras con la ayuda de pendrive y tener copys de security al descubierto en ambas computadoras. Se parece a esto:

C1: {L1, R1}; PD: {P}; C2: {R2, L2}; 

Está configurado así:

 L1 <--pull push--> R1 <--push fetch--> P <--push fetch--> R2 <--push pull--> L2 

Después de la commit(L1).push(R1) secuencia commit(L1).push(R1) , P.fetch(R1) , R2.fetch(P) git dice que R2 y P están actualizados, sin embargo, me comprometí con L1 y definitivamente deberían diferir. ¿Alguna idea de qué hago mal y cómo hacer que realmente funcione?

Necesita hacer un R1.push(P) o P.pull(R1) .

No hay diferencia entre R1.push(P) y P.pull(R1) , excepto que en el primero, el push debe ejecutarse en R1 y, por lo tanto, P debe ser un control remoto en R1 , mientras que en el segundo, el pull tiene que se ejecuta desde P y, por lo tanto, R1 debe ser un control remoto en P

Actualmente, P no se ha actualizado por completo; solo ha buscado los cambios, no los ha fusionado.

En cuanto a los problemas de LAN / networking limitada, puede intentar usar bitbucket para repository privado, github para repositorys públicos. Cualquiera de los dos debería estar disponible en ambos lugares.

EDITAR

Me acabo de dar count de que mi error tipográfico le costó a OP mucho esfuerzo de debugging. P.pull(R1) decir P.pull(R1) antes y no P.fetch(R1) como se dijo. Realmente lo siento por eso. Se puede pensar en un pull como fetch + merge en una sola operación. De hecho, esa fue la primera línea de mi respuesta, use un push o un pull : tenía la intención de pedirle que use un pull y no fetch nada. Una vez más, realmente lo siento por la falta de comunicación.

Finalmente pude sincronizar todos los repositorys, pero tuve que deshacerme de la fetch y usar solo el command de push .

En cuanto a los detalles:

  • L1 (administrado por Eclipse con EGit en C1) está configurado para tirar / empujar desde / hacia R1
  • R1 (administrado por la línea de command git en C1) está configurado para enviar a P
  • La configuration P usa un truco y lo explicaré más tarde
  • R2 está configurado para enviar a P
  • L2 está configurado para tirar / empujar desde / hacia R2

Ahora, en cuanto a la configuration P: como dije, parece que A.push(B) funciona un poco diferente de B.fetch(A) (ambos repos están vacíos). Entonces cuando presiono algo a P (desde R1 o desde R2) y quiero sincronizar con otro control remoto (como R2 o R1), realizo push desde P, pero simplemente cambio la URL remota justo antes de presionar. Para este propósito preparé un script bash ( push-all.sh ) que se ve así:

 #!/bin/bash url=`cat $1.url`; for f in *.git do cd $f; echo "Setting URL to $url$f"; git remote set-url origin $url$f; git push; cd ..; done; 

Tenga en count que todos mis repositorys desnudos tienen * .git al final del nombre del directory.

En este pendrive hay dos files (podría ser más si es necesario) que contienen routes para repositorys en máquinas remotas con extensión * .url (podría ser cualquier cosa en realidad):

 $ cat c1.url d:\my\path\on\c1\git\ $ cat c2.url e:\another\path\on\c2\ 

En C1 y C2 bajo git urls tengo otro script push-all.sh , pero un poco simplier:

 #!/bin/bash for f in *.git do cd $f; git push; cd ..; done; 

Así que ahora, cuando termine de trabajar en C1, me aseguro de que pendrive esté conectado a la computadora y que tenga la misma letra que en la configuration de R1 y lo hago:

 $ cd /d/my/path/on/c1/git $ ./push-all.sh 

Ahora todo mi trabajo se copy de R1 a P. Luego, cuando llego a la computadora R2, hago:

 $ cd /p/git-repo-on-pendrive $ ./push-all c2 

Luego saco de EGit y están todos mis cambios. Cuando termino de trabajar en C2 lo hago:

 $ cd /e/another/path/on/c2 $ ./push-all 

Y cuando llego a C1 lo hago:

 $ cd /q/git-repo-on-pendrive $ ./push-all c1 

y lo hago de EGit. Todo esto solucionó mi caso.