Domanda

Ho bisogno di tenere i miei alberi di sviluppo in sincronia su computer diversi, senza connessione di rete tra di loro.

Abbiamo un repository git centrale, e io normalmente lavoriamo per conto mio clone sul mio computer dell'ufficio. A volte ho bisogno di fare un po 'di sviluppo su un altro computer, che non viene mai collegato alla rete dell'ufficio. Nessuno dei computer sono sempre collegato a Internet. Sviluppo può essere eseguita su entrambi i computer tra le sincronizzazioni.

Ho letto le pagine di aiuto per git-fascio , che sembra il migliore strumento, ma io non sono davvero sicuro di come un flusso di lavoro buona potrebbe essere istituita.

Mi puoi dare qualche consiglio o puntatori?

È stato utile?

Soluzione

Bundle!

Il flusso di lavoro con fascio git sarà sostanzialmente uguale a qualsiasi altro flusso di lavoro. Questo può non sembrare consigli terribilmente utile, ma qui è:. Usare qualsiasi flusso di lavoro che si usa normalmente, e sostituire "push / pull" con "portare un fascio qui a lì su un flash drive, quindi tirare"

La pagina uomo ha in realtà un buon walkthrough per ottenere andando con questo, anche se è più di un esempio a senso unico. Per ragioni di completezza, ecco una versione leggermente modificata di esso, che mostra come spostare le informazioni in entrambe le direzioni:

# on hostA, the initial home of the repo
hostA$ git bundle create hostA.bundle --branches --tags

# transfer the bundle to hostB, and continue:
hostB$ git clone /path/to/hostA.bundle my-repo
# you now have a clone, complete with remote branches and tags
# just to make it a little more obvious, rename the remote:
hostB$ git remote rename origin hostA

# make some commits on hostB; time to transfer back to hostA
# use the known master branch of hostA as a basis
hostB$ git bundle create hostB.bundle ^hostA/master --branches --tags

# copy the bundle back over to hostA and continue:
hostA$ git remote add hostB /path/to/hostB.bundle
# fetch all the refs from the remote (creating remote branches like hostB/master)
hostA$ git fetch hostB
# pull from hostB's master, for example
hostA$ git pull

# make some commits on hostA; time to transfer to hostB
# again, use the known master branch as a basis
hostA$ git bundle create hostA.bundle ^hostB/master --branches --tags
# copy the bundle to hostB, **replacing** the original bundle
# update all the refs
hostB$ git fetch hostA

# and so on and so on

La cosa fondamentale da notare è che è possibile aggiungere un fascio come un telecomando, e interagire con esso proprio come si farebbe con qualsiasi altro telecomando. Per aggiornamento che remoto, basta semplicemente inserire in un nuovo pacchetto, in sostituzione di quello precedente.

Ho anche preso un approccio leggermente diverso per raccogliere una base. La pagina man usa i tag, sempre tenuti aggiornati con gli ultimi arbitri che sono stati trasferiti a l'altro host. Ho semplicemente usato le filiali remote, che si riferiscono agli ultimi arbitri trasferiti da l'altro host. E 'un po' inefficiente; vi ritroverete bundling di più di quanto è necessario, dal momento che è un passo indietro. Ma le unità flash sono grandi, fasci sono piccole, e con gli arbitri che già hanno, invece di dover fare un passo in più e stare attenti sui tag consente di risparmiare un sacco di fatica.

L'unica cosa che rende fasci un po 'di problemi è che non si può spingere a loro, e non si può "rebase" di loro. Se si desidera che il pacchetto sulla base di una nuova base, è necessario ricrearlo. Se si desidera che i nuovi impegna in esso, è necessario ricrearlo. Questo fastidio dà luogo al mio prossimo suggerimento ...

Repo su una pen drive

Onestamente, a meno che il repo è davvero grande, questo potrebbe essere altrettanto facile. Mettere un clone nudo su una pen drive, e si può spingere e tirare a da esso da entrambi i computer. Trattarlo come la connessione di rete. Necessità di trasferimento al repo centrale? Plug in!

Altri suggerimenti

@Jefromi risposta è stato grande -. 10x meglio dei documenti git, che continuare a lungo sui requisiti e le azioni incomprensibili

E 'ancora un po' complicato, quindi ecco il caso più semplice sincronizzazione una volta (nel mio caso: DA: un computer portatile collegato con scheda wifi rotto, TO: un desktop con accesso alla rete). Sulla base di @ risposta di Jefromi, questo sembra funzionare bene:

AVANTI = macchina che è in vantaggio di un numero di commit. DIETRO = macchina che si desidera copiare il commit a

1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

Entrambi: copia myBundleName.bundle (tramite e-mail, USB, a prescindere)

DIETRO: (luogo il file myBundName.bundle ovunque si desideri fuori cartella del progetto)

2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

Fino a quando si include il ramo-nome sulla fine (per impostazione predefinita, se non si sta usando rami, "master"), questo sembra funzionare bene, e non sostituisce nessuno dei riferimenti interni dietro -. in modo da poter ancora synch da / per il maestro di origine

vale a dire. se dietro ha accesso a internet, è ancora sicuro di fare:

(OPTIONAL) 4. BEHIND: git push

... e sarà aggiornare il repository principale, come se le modifiche fossero state fatte a livello locale, come al solito, dietro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top