2011-02-09 11 views
73

Diciamo che ho un PC desktop e un laptop, ea volte lavoro sul desktop e talvolta lavoro sul laptop.git repository sync tra computer, quando ci si sposta?

Qual è il modo più semplice per spostare un repository git avanti e indietro?

Voglio che i repository git siano identici, in modo da poter continuare da dove sono rimasto all'altro computer.

Mi piacerebbe essere sicuro di avere gli stessi rami e tag su entrambi i computer.

Grazie Johan

Nota: io so come farlo con la sovversione, ma sono curioso su come questo potrebbe funzionare con git. Se è più semplice, posso usare un terzo pc come server classico su cui i due pc: s possono sincronizzarsi.

Nota: entrambi i computer eseguono Linux.


Aggiornamento:

Allora proviamo XANI: s idea con un repo git nuda su un server, e il comando spinta sintassi da KingCrunch. In questo esempio ci sono due client e un server.

Quindi, prima creiamo la parte server.

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

Così poi da uno degli altri computer cerco di ottenere una copia del pronti contro termine con clone: ​​

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. 

Poi vai in quella pronti contro termine e aggiungere un file:

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

Ora il server viene aggiornato con testfile1.txt.

In ogni caso, vediamo se possiamo ottenere questo file dall'altro computer.

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

E ora possiamo vedere il file di prova.

A questo punto possiamo modificarlo con altri contenuti e aggiornare di nuovo il server.

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

Quindi torniamo al primo client e facciamo un pull git per vedere il file aggiornato. E ora posso spostarmi avanti e indietro tra i due computer, e aggiungere un terzo se mi piace.

risposta

22

Penso che ci siano diversi approcci. Descriverò semplicemente, come gestisco questo

Ho un netbook come server 24/7, che contiene più repository git.Da/a lì spingo e tiro le modifiche via SSH. Per l'accesso dall'esterno io uso dyndns.org. Funziona bene, soprattutto perché ho più di due sistemi, che ha bisogno di accedere ad alcuni dei repository.

Aggiornamento: un piccolo esempio. Diciamo che il mio netbook si chiama "netbook". Creo un repository lì

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

Sul mio desktop creerò un clone di esso. Forse vorrei aggiungere alcuni file anche

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

Sul mio portatili io (prima) fare lo stesso, ma per l'accesso remoto (dall'esterno mia LAN), Vorrei anche aggiungere l'indirizzo esterno.

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

È proprio il modo in cui git (/ git workflow) funziona. Puoi aggiungere tutti i repository remoti che vuoi. Non importa, se due o più si riferiscono agli stessi repository "fisici". Non è necessario un proprio "server" locale, è possibile utilizzare qualsiasi server pubblico, a cui si dispone di accesso ssh. E ovviamente non hai bisogno di un server pubblico, se non hai bisogno di accedere dall'esterno. Il repository nudo può anche trovarsi sul sistema desktop e quindi è possibile creare un repository di copia di lavoro all'interno del filesystem locale.

$ 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 

Questo è il modo, come gestire questo, e per me funziona abbastanza bene (se non perfetto;))

qualcosa da leggere: http://progit.org/ Really good book.-

+0

Come sarebbe, quando si utilizzano diversi modi nel repository? Vorresti chiarire la tua risposta con un esempio? – Johan

+0

Grazie, quegli esempi hanno chiarito molto :) – Johan

0

Bene, puoi spingere e tirare (tramite Git) sul server che potresti potenzialmente configurare. Oppure puoi archiviare i tuoi repository su GitHub e utilizzarli come bridge di sincronizzazione.

0

È possibile creare il repository su qualsiasi computer, probabilmente quello desktop, e spostarlo/estrarlo sia dal laptop che da esso.

1

Che ne dici di utilizzare semplicemente rsync?

+0

Ci dovrebbe essere un modo più "git-correct" per farlo? – Johan

+3

Ho usato rsync per anni per mantenere sincronizzati tre server. Funziona ma rsync non ti dà modo di ripristinare i cambiamenti una volta che la sincronizzazione è stata completata. Ho anche perso così tanti file in questo modo perché non ho letto abbastanza a sufficienza l'uscita a secco e rsync è stato impostato per eliminare i file che non erano presenti sul master. Da allora mi sono mosso per git e lo trovo un modo molto più sicuro per mantenere sincronizzate importanti directory. – Cloudkiller

6

Vorrei clonare il repository da una casella all'altra, e quindi impostare i due reposli in modo da poter solo git fetch dall'altra casella.

Rinominare il telecomando da origin al nome dell'altro riquadro facilita la lettura dei rami remoti.

Si noti che da solo utilizzando git fetch (e non git push), questo funziona bene con i repository non-nude:

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

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

modo più semplice: repo centrale creata con --bare (quindi non controllato dei file, solo.roba git), o github

"distribuito" sarà simile a quanto segue:

Setup:

  1. sul computer portatile: git remote add desktop ssh://[email protected]/home/user/repo/path
  2. Sul desktop: git remote add laptop ssh://[email protected]/home/user/repo/path

Sincronizzazione:

git pull laptop/desktop (push non funziona molto bene su pronti contro termine non nude perché git non modificherà estratto i file quando si spinge al repo remoto)

Oppure, fare repo su pendrive;)

+0

Ho provato ad usare un repo --bare, ma non riesco a ottenere tutto il flusso di lavoro giusto. – Johan

+0

Ho appena iniziato con git, e passando da git locale a github e ritorno posso fare così tanto, ma il metodo da computer a computer non riesco a lavorare. Domanda stupida - quali credenziali utilizzerò per 'utente'? Per github, devo solo aggiungere le chiavi di rsa-pub. Ho provato ad aggiungere rsa-pub per il computer del richiedente clone a known_hosts, ma questo non ha fatto il trucco ... – Dave

+0

Questo è il modo più semplice per me di sincronizzare tra due macchine locali senza colpire continuamente un server remoto. – johnzachary

1

Non potevi solo creare un telecomando repository su GitHub, BitBucket o GitLab? (Le ultime due società offrono illimitati archivi privati ​​gratuiti). Al termine della giornata di lavoro, è sufficiente utilizzare git push per inviare le modifiche al repository remoto. Quando torni a casa, basta fare git pull per trasferire le modifiche dal lavoro al computer di casa. Allo stesso modo, quando finisci a casa, fai git push e poi quando torni al lavoro, fai git pull.

Problemi correlati