2011-02-09 22 views
73

Digamos que tengo una PC de escritorio y una computadora portátil, y, a veces, trabajo en el escritorio y, a veces, trabajo en la computadora portátil.git sincronización del repositorio entre computadoras, cuando se mueve?

¿Cuál es la forma más fácil de mover un repositorio de git hacia adelante y hacia atrás?

Quiero que los repositorios de git sean idénticos, para que pueda continuar donde lo dejé en la otra computadora.

Me gustaría asegurarme de tener las mismas ramas y etiquetas en ambas computadoras.

Gracias Johan

Nota: Yo sé cómo hacer esto con la subversión, pero tengo curiosidad sobre cómo funcionaría con git. Si es más fácil, puedo usar una tercera PC como servidor clásico con el que las dos PC pueden sincronizarse.

Nota: ambas computadoras ejecutan Linux.


actualización:

Así que vamos a tratar XANI: s idea con un repositorio git desnuda en un servidor, y la sintaxis del comando empujón de KingCrunch. En este ejemplo, hay dos clientes y un servidor.

Creemos la parte del servidor primero.

ssh [email protected] 
mkdir -p ~/git_test/workspace 
cd ~/git_test/workspace 
git --bare init 

Entonces, de uno de los otros equipos que trato de obtener una copia de la cesión temporal con el clon:

git clone [email protected]:~/git_test/workspace/ 
Initialized empty Git repository in /home/user/git_test/repo1/workspace/.git/ 
warning: You appear to have cloned an empty repository. 

Luego de entrar en eso repo y añadir un archivo:

cd workspace/ 
echo "test1" > testfile1.txt 
git add testfile1.txt 
git commit testfile1.txt -m "Added file testfile1.txt" 
git push origin master 

Ahora el servidor se actualiza con testfile1.txt.

De todos modos, veamos si podemos obtener este archivo de la otra computadora.

mkdir -p ~/git_test/repo2 
cd ~/git_test/repo2 
git clone [email protected]:~/git_test/workspace/ 
cd workspace/ 
git pull 

Y ahora podemos ver el archivo de prueba.

En este punto podemos editarlo con más contenido y actualizar el servidor nuevamente.

echo "test2" >> testfile1.txt 
git add testfile1.txt 
git commit -m "Test2" 
git push origin master 

Luego volvemos al primer cliente y hacemos un git pull para ver el archivo actualizado. Y ahora puedo moverme hacia adelante y hacia atrás entre las dos computadoras, y agregar una tercera si me gusta.

Respuesta

22

Creo que hay múltiples enfoques. Voy a describir cómo manejo este

Tengo una netbook como servidor 24/7, que contiene múltiples repositorios git.Desde/hacia allá, presiono y hago cambios a través de SSH. Para acceder desde afuera, uso dyndns.org. Funciona bien, especialmente porque tengo más de dos sistemas, que necesitan acceso a algunos de los repositorios.

Actualización: Un pequeño ejemplo. permite decir mi netbook se llama "netbook". Puedo crear un repositorio no

$ ssh [email protected] 
$ cd ~/git 
$ mkdir newThing 
$ cd newThing 
$ git init --bare 

en mi escritorio que voy a crear un clon de ella. Tal vez voy a añadir algunos archivos también

$ git clone [email protected]:/home/username/git/newThing 
$ git add . 
$ git commit -m "Initial" 
$ git push origin master 

En mis portátiles lo haré (primera) hacer lo mismo, pero para el acceso remoto (desde fuera de mi LAN), que también se sumará la dirección externa.

$ git clone [email protected]:/home/username/git/newThing 
$ git remote add externalName [email protected]:/home/username/git/newThing 
$ git pull externalName master 

Es la forma en que funciona git (/ git workflows). Puede agregar tantos repositorios remotos como desee. No importa, si dos o más se refiere a los mismos repositorios "físicos". No necesita un "servidor" local propio, puede usar cualquier servidor público al que tenga acceso ssh. Y, por supuesto, no necesita un servidor público en absoluto, si no necesita acceso desde el exterior. El repositorio desnudo también puede estar en el sistema de escritorio y, a continuación, puede crear una copia-repositorio de trabajo dentro del sistema de archivos local.

$ mkdir myRepo; cd myRepo 
$ git init --bare 
$ cd /path/to/myProject 
$ git remote add origin /path/to/myRepo 
$ git add .; git commit -m "Initial"; git push origin master 

Este es el camino, cómo manejar esto, y para mí que funciona bastante bien (si no es perfecto;))

Algo para leer: http://progit.org/ Muy buena book.-

+0

¿Cómo se vería eso, cuando utiliza diferentes formas en el repositorio? ¿Te gustaría aclarar tu respuesta con un ejemplo? – Johan

+0

Gracias, esos ejemplos aclararon mucho :) – Johan

0

Bueno, puede empujar y tirar (a través de Git) al servidor que podría configurar. O puede almacenar sus repositorios en GitHub y usarlos como un puente de sincronización.

0

se podría hacer el depósito en cualquiera de los equipos, probablemente el escritorio y un push/pull a ella desde el ordenador portátil y en sí.

1

¿Qué tal el simple uso de rsync?

+0

¿Debería haber una forma más "correcta de git" para hacerlo? – Johan

+3

He usado rsync durante años para mantener sincronizados tres servidores. Funciona, pero rsync no te ofrece una forma de deshacer los cambios una vez que se realiza la sincronización. También he perdido tantos archivos de esta manera porque no leí el resultado de ejecución en seco lo suficientemente cerca y rsync se estableció para eliminar archivos que no estaban presentes en el maestro. Desde entonces me he mudado a Git y considero que es una forma mucho más segura de mantener directorios importantes sincronizados. – Cloudkiller

6

que sería clonar el repositorio de una caja a la otra, y luego configurar los dos repositorios de modo que pueda simplemente git fetch de la otra caja.

Cambiar el nombre del mando a distancia de origin al nombre de la otra caja hace que las ramas remotas más fácil de leer.

Tenga en cuenta que sólo por el uso git fetch (y no git push), esto funciona bien con los repositorios no desnudos:

[[email protected] repo]$ git fetch -v bar 

[[email protected] repo]$ git fetch -v foo 
4

La manera más fácil: repo central creada con --bare (por lo que no desprotegido archivos, solamente.cosas GIT), o GitHub

"distribuida" se parecerá a lo siguiente:

Configuración:

  1. en la computadora portátil: git remote add desktop ssh://[email protected]/home/user/repo/path
  2. En el escritorio: git remote add laptop ssh://[email protected]/home/user/repo/path

Sincronización:

git pull laptop/desktop (push no va a funcionar muy bien en repos no descubiertos porque Git no modificarán desprotegido archivos cuando se empuja a repo remoto)

O bien, hacer cesión temporal en pendrive;)

+0

Traté de usar un --bare repo, pero no puedo obtener todo el flujo de trabajo correcto. – Johan

+0

Estoy empezando con git, y pasando de git a github local y viceversa, puedo hacerlo hasta ahora, pero el método de computadora a computadora no me funciona. Pregunta tonta: ¿qué credenciales uso para 'usuario'? Para github, solo tengo que agregar las claves de rsa-pub. Intenté agregar rsa-pub para la computadora solicitante clon a known_hosts, pero eso no funcionó ... – Dave

+0

Esta es la forma más sencilla de sincronizar entre dos máquinas locales sin tocar continuamente un servidor remoto. – johnzachary

1

¿No podrías crear un mando a distancia repositorio en GitHub, BitBucket o GitLab? (Las dos últimas compañías ofrecen repositorios privados gratuitos ilimitados). Cuando termine el día en el trabajo, simplemente use git push para enviar sus cambios al repositorio remoto. Cuando llegue a su casa, simplemente haga git pull para sacar los cambios del trabajo a su máquina doméstica. Del mismo modo, cuando termine en su casa, haga git push y luego cuando regrese al trabajo, haga git pull.

Cuestiones relacionadas