Domanda

Ho una filiale locale per il giorno per giorno di lavoro dev in git. Il mio flusso di lavoro è:

  1. Fare roba su local_branch, commit
  2. Fetch origin / master
  3. REBASE local_branch di raggiungere con nuovo materiale di origine / master

Funziona tutto bene, tuttavia la maggior parte delle raccomandazioni che ho incontrato dicono che non si dovrebbe "spingere" rami privati, su cui REBASE viene eseguita regolarmente.

Il problema qui è che in questo caso ramo locale non viene eseguito il backup a un server e l'unico modo per salvare il lavoro è quello di fondersi di nuovo al ramo "pushable" (vale a dire origin / master)

Quali sarebbero le vostre raccomandazioni sul flusso di lavoro in questo caso?

Grazie!

UPDATE :. Ho capito che uno dei requisiti originali avevo (evitando l'utilizzo di utenze esterne) non occorre limitare

La mia soluzione attuale è quella di memorizzare tutti i miei repository in una cartella su cloud sincronizzata -. In questo modo ottengo di backup gratis

È stato utile?

Soluzione

Io uso l'opzione --mirror e spingere per un archivio di backup personale:

Aggiungi come un telecomando:

git remote add bak server:/path/to/backup/repo

Fare il backup:

git push --mirror bak

Questo verrà automaticamente rendere il vostro archivio di backup guardare come i vostri attivi una - rami verrà creato, eliminato, aggiornato (anche i non fastforwards forzata /) in base alle esigenze. È possibile creare un alias per questo troppo:

git config alias.bak "push --mirror bak"

Quindi, è solo una questione di esecuzione "git bak" quando si vuole fare una copia di backup. Si potrebbe anche gettare questo in un lavoro cron.

Altri suggerimenti

Non c'è niente di sbagliato con spingendo rami personali. E 'generalmente sconsigliato perché la gente potrebbe iniziare a lavorare sulla base di ramo, e quando si rebase, i loro cambiamenti sono lasciati galleggiare.

Quello che faccio è utilizzare un prefisso per indicare "questo è il mio ramo, usarlo a proprio rischio", come:. fc-general-cleanup

Un'altra opzione sarebbe quella di spingere "local_branch" al pronti contro termine "origine", ma ad esso è propria filiale in quel pronti contro termine (non "master"), cioè:.

git push origin local_branch:local_backup

Poi, quando si è pronti a fare un altro backup (e dopo che hai fatto un certo lavoro e rebasing) basta cancellare il ramo di backup dalla repo di origine prima di spingere fuori di nuovo:

git push origin :local_backup <=== elimina il ramo di origine

git push origin local_branch:local_backup

In questo modo non incorrere in problemi che spingono "local_branch" dopo che è stato ricalcolato da "origin / master".

E se l'eliminazione dei rami di backup ti rende nervoso (solo dopo aver finalmente impegnati vostro lavoro per "master"), si può sempre continuare a spingere per una nuova filiale con un nuovo nome (ad esempio "local_backup1", "local_backup2" , ecc).

Non c'è niente di sbagliato con spingendo allo stesso ramo che si sta rebasing da. Questi diagrammi dovrebbero illustrare il motivo per cui questo funziona bene:

Diciamo che questo è ciò che il grafico commit sembra dopo aver ramificata local_branch e ha fatto un paio di commit ad esso (C e D). Qualcun altro ha fatto un commit (E) per origin / master dal momento che ramificata local_branch:

A -- B -- E  [origin/master]
      \
       \    
        \-- C -- D  [local_branch]

Poi, dopo l'esecuzione di "git rebase origin / master", il grafico commettere sarà simile allo schema successivo. "Origin / master" è sempre la stessa, ma "local_branch" è stato ricalcolato:

A -- B -- E  [origin/master]
           \
            \
             \-- C -- D  [local_branch]

A questo punto, se lo fai "git push origin local_branch: master", allora il risultato sarà un semplice fast-forward. "Origin / master" e "local_branch" sarà identico:

A -- B -- E -- C -- D  [origin/master],[local_branch]

Ora siete liberi di fare più lavoro su "local_branch". Alla fine si potrebbe ottenere qualcosa di simile:

A -- B -- E -- C -- D -- G -- I [origin/master]
                     \
                      \
                       \-- F -- H [local_branch]

Si noti che questo sembra un po 'come il grafico di partenza. È possibile continuare a ripetere questo processo più e più volte.

Si dovrebbe evitare di spingere a qualche altro ramo, uno che non si è rebasing da. Ecco dove verrà eseguito nei guai (per l'altro ramo, che sarà del tipo la vostra storia "di local_branch" è improvvisamente stata riscritta, dopo aver Ribasato da "origine / master").

Si può impostare un altro repository remoto che non spingere tutti i rami per? L'altra cosa da prendere in considerazione è solo il backup di tutto (importante) sul computer locale, tra cui il repo git.

Ecco quello che faccio . Ma - questo non è privata. Lo faccio in modo che possa collaborare con me stesso (per così dire). Mi permette di lavorare sullo stesso ramo su due o più caselle. se altre persone hanno avuto accesso al repository condiviso, hanno potuto vedere il lavoro che sto facendo sul ramo. Naturalmente, il mio pronti contro termine di casa, nessun altro ha accesso, quindi è ancora privato. Su GitHub, tutto il mondo potrebbe vedere la mia roba. Come hanno veramente a cuore. ;)

Piuttosto che fare affidamento su Dropbox per sincronizzare tutti i file di un repo git, preferisco usare git bundle , che produce solo una file (inclusi tutti i tuoi rami privati), e di sincronizzazione che file con DropBox. < br> Vedere " Git con Dropbox "

In " Backup un Git locale Repository ", Yars dicono di averla errori di sincronizzazione con Dropbox.

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