考慮這個簡單的Python代碼,這表明一個非常簡單的版本控制設計一dictonary:如何存儲和計算版本控制歷史記錄?
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)
注意,通過使用歷史列表,你可以重構它曾經存在過的任何狀態下的電流字典。我認爲這是一個「前向構建」(因爲缺乏更好的術語),因爲構建當前字典必須從頭開始並處理整個歷史列表。我認爲這是最明顯和直接的方法。
正如我所聽說的,早期版本控制系統使用這種「前向構建」過程,但它們並不是最佳的,因爲大多數用戶都關心構建的最新版本。而且,當用戶只關心看到最新版本時,用戶不希望下載整個歷史記錄。
那麼我的問題是,在版本控制系統中存儲歷史還有哪些其他方法?也許可以使用「倒退建造」?這可能允許用戶只下載最近的修訂版而不需要整個歷史記錄。我還用seen幾種不同的格式來存儲歷史記錄,即:變更集,快照和補丁。變更集,快照和補丁之間有什麼區別?
在現代流行版本控件中,他們如何存儲歷史以及各種設計的優點?
這可能屬於上programmers.SE。 – 2012-01-11 18:51:06
我正在尋找關於特定算法和應用的具體細節;這是否屬於程序員SE的所有職業諮詢問題? – Buttons840 2012-01-11 18:56:40
事實上,職業諮詢是無題的,這類問題很快就會被關閉。算法非常重要。請參閱[FAQ](http://programmers.stackexchange.com/faq)。 – 2012-01-11 19:17:10