Рассмотрим этот простой код Python, который демонстрирует очень простой дизайн управления версиями для диктонары:
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)
Обратите внимание, что с помощью списка истории вы можете восстановить текущий словарь в любом состоянии, в котором он когда-то существовал.Я считаю это «прямой сборкой» (из-за отсутствия лучшего термина), потому что для построения текущего словаря нужно начинать с начала и обрабатывать весь список истории.Я считаю, что это наиболее очевидный и прямой подход.
Как я слышал, ранние системы управления версиями использовали этот процесс "прямой сборки", но они не были оптимальными, поскольку большинство пользователей больше заботятся о последних версияхстроить.Кроме того, пользователи не хотят загружать всю историю, когда им нужно только посмотреть последнюю сборку.
Мой вопрос: какие существуют другие подходы для хранения историй в системе управления версиями?Возможно, можно использовать «обратную сборку»?Это может позволить пользователям загружать только последние версии без необходимости всей истории.Я также видел несколько различных форматов для хранения истории, а именно: наборы изменений, снимки и исправления.Каковы различия между наборами изменений, моментальными снимками и исправлениями?
Из современных популярных элементов управления версиями, как они хранят свою историю и каковы преимущества их различных конструкций?