Backup in modo efficiente molte versioni di un repo Git con la non esercizio della Names Branch

StackOverflow https://stackoverflow.com/questions/3240900

  •  15-09-2020
  •  | 
  •  

Domanda

Al lavoro, usiamo Perforce per il controllo della versione. Ci sono problemi con questo: 1) Con questo modello centralizzato, non possiamo verificare le modifiche finché non sono pronte per la regressione. Ciò significa che non abbiamo il controllo delle revisioni durante il processo di sviluppo. 2) Non facciamo il backup della nostra visione del cliente del deposito, quindi il nostro lavoro non è sicuro finché non possiamo controllarlo. 3) Abbiamo problemi di condividere il nostro codice con ciascuno, a meno che non imploriamo ad avere una filiale di integrazione impostata. Sto cercando di impostare un flusso di lavoro Git facoltativo per gli sviluppatori che vogliono usare GIT per battere questi problemi.

Il piano è utilizzare GIT-P4 per interfacciarsi con il server Perforce e creare un repo del Git privato. Questo si prende cura di 1). Ho intenzione di utilizzare il flusso di lavoro di integrazione-manager raffigurato in git pro ( http://progit.org/ Book / CH5-1.html ) Per i nostri sviluppatori pubblicano i repositori pubblici, prendendo cura di 3).

Blessed Repo

Infine, voglio un luogo in cui gli sviluppatori possono spingere i loro cambiamenti in modo da tirare in backup notturni / backup offsite. La ragione per cui non facciamo backup delle nostre viste del cliente ora è perché fare i backup di archiviazione notturna della visione del cliente di tutti è spazio inefficiente. Abbiamo molti sviluppatori e produciamo molto codice. Non possiamo eseguire il backup in modo ridondando la vista del cliente di tutti. Vogliamo solo preservare le modifiche esclusive che stanno facendo .

Il mio pensiero era avere un repo Git nudo, chiamalo omni-backup, che tutti possono spingere tutti i loro rami a (e sentirsi liberi di suggerire alternative). Ciò utilizzerebbe l'hashing SHA-1 efficiente spazio di Git e assicurarsi che siano supportate solo le versioni uniche di ciascun file. Il trucco è che tutti i repository di backup devono essere parte dello stesso repo per ottenere l'efficienza spaziale.

Il problema è quando due persone con rami completamente diversi hanno scelto lo stesso nome per il loro ramo. PER ESEMPIO. Bob ha un ramo feature e Jane ha un ramo feature, ma sono per caratteristiche diverse. Se Bob spinge a Omni-Backup, Jane non sarà in grado di, in quanto non sarebbe una fusione fastforward.

Ora ciò che vorrei idealmente avere successo è che quando Bob spinge il suo ramo di funzionalità, il ramo verrà rinominato in bob-feature sul telecomando omni-backup. E quando tira la funzione da omni-backup, torna bob-feature.

Questo non sembra terribilmente facile da realizzare in Git. Sembra che io possa usare i ganci di spinta documentati in http://www.kernel.org/pub/software/SCM/git/docs/git-receive-pack.html Gancio post-riceve per riscrivere il nome del ref immediatamente dopo averlo scritto, quindi < Em> Qualcosa potrebbe essere fatto per invertire il processo sulla via del ritorno, ma si sente fragile. Qualcuno ha un'idea migliore?


.

Modifica: per vonc (perché il codice fa schifo nei commenti) La tua strada sembra promettenti, Vonc, ma non vedo come è il fatto che è un recupero batterà i problemi dei nomi. Stai suggerendo un cronjob che sa come rinominare il ramo?

Mi piace (davvero sporco):

foreach my $user (@users) {
    my @branches = split(/s/,cat `$LDAPSERVER/$USER/$REPO/.git/refs/heads`);
    foreach my $branch (@branches) {
        system "git fetch $LDAPSERVER/$USER/$REPO/$BRANCH:+$USER$BRANCH"
    }
}
.

È stato utile?

Soluzione

Perché avresti bisogno di sviluppatore per spingere al repo omni-backup?

Per scopi di backup, preferirei registrare il repository del diverso sviluppatore come remoto e fare un git fetch ogni notte (dal server omni-backup) su tutti i remoti remoti.
In questo modo, nessuna collusione del nome di ramo possibile.E un processo più automatizzato (lo sviluppatore non deve spingere esplicitamente nulla su un repo che non funziona direttamente, ma considererebbe solo il backup)

Allora produrrei un bel piccolo git archive Fuori da omni-backup e conservalo via.

Altri suggerimenti

Se è possibile ottenere gli sviluppatori a seguire determinate linee guida, git push può farlo correttamente.

Se si esegue questo comando:

git push omni-backup feature:bob-feature
.

DOVE OMNI-Backup è il remoto remoto per il repository, quindi la filiale della funzione di Bob si spinge alla funzione BOB su OMNI-Backup.Ma se si affrescono che agli sviluppatori sia indesiderabile, commutando la direzione del flusso e con Omni-Backup tira i repository degli sviluppatori, come suggerisce Vonc, è la soluzione migliore

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