考虑这个简单的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