Промышленное программирование
Лекция 5. Version Control (Git)
Лекция 5. Version Control (Git)
Системы контроля версий позволяют (в том числе) ответить на вопросы:
В терминах Git файл - это "blob", последовательность байт
Директория - "tree", отображает имена в другие blob'ы и tree
Snapshot - верхнеуровневый tree
root (tree)
|
+- foo (tree)
| |
| + bar.txt (blob, contents = "hello world")
|
+- baz.txt (blob, contents = "git is wonderful")
// a file is a bunch of bytes
type blob = array[byte]
// a directory contains named files and directories
type tree = map[string, tree | blob]
// a commit has parents, metadata, and the top-level tree
type commit = struct {
parent: array[commit]
author: string
message: string
snapshot: tree
}
11
Объект (object) - blob, tree или commit
Адрес объекта - SHA-1 хэш его содержания
type object = blob | tree | commit
objects = map[string, object]
def store(object):
id = sha1(object)
objects[id] = object
def load(id):
return objects[id]
Когда tree или commit ссылается на какой-либо объект, он хранит хэш этого объекта
100644 blob 4448adbf7ecd394f42ae135bbeed9676e894af85 baz.txt
040000 tree c68d233a33c5c06e0340e4c224f0afca87c8ce87 foo
Лекция 5. Version Control (Git)