Considerate questo codice python semplice, che dimostra un design molto semplice controllo di versione per un dictonary:Come vengono memorizzate e calcolate le cronologie dei controlli delle versioni?
def build_current(history):
current = {}
for action, key, value in history:
assert action in ('set', 'del')
if action == 'set':
current[key] = value
elif action == 'del':
del current[key]
return current
history = []
history.append(('set', '1', 'one'))
history.append(('set', '2', 'two'))
history.append(('set', '3', 'three'))
print build_current(history)
history.append(('del', '2', None))
history.append(('set', '1', 'uno'))
history.append(('set', '4', 'four'))
print build_current(history)
for action, key, value in history:
if key == '2':
print '(%s, %s, %s)' % (action, key, value)
Si noti che utilizzando l'elenco la storia si può ricostruire il dizionario corrente in qualsiasi stato che una volta esisteva. Considero questo un "forward build" (per mancanza di un termine migliore) perché per costruire il dizionario corrente bisogna iniziare dall'inizio e elaborare l'intero elenco cronologico. Considero questo l'approccio più ovvio e diretto.
Come ho sentito, i primi sistemi di controllo delle versioni utilizzavano questo processo di "forward build", ma non erano ottimali perché la maggior parte degli utenti si preoccupa di più delle versioni recenti di una build. Inoltre, gli utenti non vogliono scaricare l'intera cronologia quando si preoccupano solo di vedere l'ultima build.
La mia domanda è, quali altri approcci esistono per memorizzare le storie in un sistema di controllo di versione? Forse si potrebbe usare una "backwards build"? Ciò potrebbe consentire agli utenti di scaricare solo le revisioni recenti senza aver bisogno dell'intera cronologia. Ho anche seen alcuni formati diversi per la memorizzazione della cronologia, vale a dire: changeset, istantanee e patch. Quali sono le differenze tra changeset, istantanee e patch?
Dei moderni controlli di versione popolare disponibili, come archiviano le loro storie e quali sono i vantaggi dei loro vari progetti?
Questo probabilmente appartiene a programmers.SE. –
Sto cercando dettagli specifici su algoritmi e applicazioni specifici; questo appartiene a tutte le domande di consulenza sulla carriera dei programmatori SE? – Buttons840
In realtà, la consulenza di carriera è fuori tema lì e questo tipo di domande viene rapidamente chiuso. Gli algoritmi sono molto in argomento. Vedi [le FAQ] (http://programmers.stackexchange.com/faq). –