Что такое мерзавец "Снимок"?
Официальный Git Doc говорит:
$ git diff test
Это покажет вам, что отличается между вашим текущим рабочим каталогом и снимком в ветке 'test'
Как новичок это очень сбивает с толку. Я никогда не слышал о термине снимок. Они означают "ГОЛОВУ" ветки "тест"?
9 ответов
Снимок - это состояние чего-либо (например, папки) в определенный момент времени. В этом случае снимок означает текущее содержимое тестовой ветви, это не должно быть основной версией.
Термин "снимок" также используется в справочном сайте git.
Это заменяющий термин для "Ревизия". В других системах контроля версий изменения в отдельных файлах отслеживаются и называются ревизиями, но с помощью git вы отслеживаете все рабочее пространство, поэтому они используют термин "снимок" для обозначения различий.
С http://gitref.org/index.html
Вместо того, чтобы писать инструмент, который версии каждого файла по отдельности, например, Subversion, мы, вероятно, напишем инструмент, который облегчит сохранение снимков нашего проекта без необходимости каждый раз копировать весь каталог.
Это, по сути, Git. Вы говорите Git, что хотите сохранить снимок вашего проекта с помощью команды git commit, и она в основном записывает манифест того, как все файлы в вашем проекте выглядят на данный момент. Затем большинство команд работают с этими манифестами, чтобы увидеть, чем они отличаются, или извлечь из них контент и т. Д.
Если вы думаете о Git как о инструменте для хранения, сравнения и объединения снимков вашего проекта, вам может быть легче понять, что происходит и как делать все правильно.
Для того, чтобы объяснить термин-снимок ясно. Пожалуйста, позвольте мне представить две другие вещи
- мерзкий формат объекта
- Git Packfiles
Предположим, у нас есть файл с именем "a.txt", содержимое которого состоит из десяти букв "a" под управлением git. После того, как мы передадим этот файл, он создаст три папки по пути.git / objects, и у каждой папки будет один файл. Каждый файл - SNAPSHOT.
Каждая папка имеет один файл
Теперь мы редактируем файл.txt, чтобы увидеть, что происходит
Мы изменили первую букву "а" на букву "б"
Тогда совершено!
Git создал еще три новых файла под тремя новыми флодерами
Эти три новых файла являются SNAPSHOT
Каждый раз, когда мы выполняем COMMIT,git будет сохранять снимки на диск вместо разницы между новой версией и старой версией того же файла. Даже если мы просто изменили одну букву одного файла, git сохранит весь файл как снимок.
Это также называется форматом свободного объекта.
В этом случае git будет занимать больше дискового пространства, чем другие vcs(такие как subversion).
Но блестящий git будет делать другую работу (git gc) после этого время от времени, создавая PACKFILES и удаляя Snapchat, содержимое которого похоже на уменьшение его размера.
Пакетные файлы находятся в.git/objects/pack
Вы можете увидеть это после выполнения команды "git gc" самостоятельно.
Снимок для репозитория, как скриншот для видео.
Git-репозиторий состоит из серии снимков, представляющих собой набор файлов и папок, представленных объектом дерева Git, которые хранятся в репозитории. .git
папка. (Когда ты commit
, вы сохраняете текущий рабочий каталог вашего репозитория как снимок нового репозитория.)
Во-первых, это не официальная документация по git. Это книга, созданная сообществом. Хотя это, вероятно, довольно авторитетно, это не Евангелие.
AFAIK, "снимок" не имеет никакого формального значения в git. Конечно, в руководстве пользователя git diff об этом не говорится. В данном контексте это, вероятно, неофициальная ссылка на то, как ветвь "тест" используется в примерах в книге, т. Е. В качестве снимка текущей работы, для целей тестирования.
Основываясь на других опубликованных определениях:
Снимок - это представление текущего состояния отслеживаемых файлов в форме манифеста, который можно сравнить с другими манифестами, чтобы увидеть различия.
Git только отслеживает различия между манифестами с первого момента его отслеживания. Если файл не был изменен со времени самого первого снимка, все последующие снимки будут ссылаться на самый первый снимок. Если файл был изменен, все последующие снимки будут ссылаться на снимок с последними изменениями. То, что хранит git, - это, по сути, цепочка истории снимков с последних до самых первых. Ветвь - это, по сути, разделение временной шкалы, позволяющее создавать альтернативную историческую цепочку снимков из определенного снимка в главной цепочке.
Ветви обычно предназначены для функций и таких, которые могут в какой-то момент быть объединены с основной ветвью. Если нет намерения объединяться, а есть отклонение от первоначального проекта в виде новой и совершенно отдельной копии проекта с его собственной историей, его часто называют жесткой вилкой, что в переводе означает "развилка на дороге".
Насколько я понимаю, снимок в целом - это просто "сущность", которую git использует для хранения своих данных. В отличие от хранения своих данных в виде серии "дельт" / наборов изменений, как это делает, например, SVN, каждый коммит, который вы делаете для git, создает "объект фиксации", который ссылается на снимок того, как код выглядел в тот момент времени,
Таким образом, как говорит @Femaref, это состояние кода в определенное время и не обязательно означает, что оно является главой ветви теста, но может быть в примере, который вы видели.
Ветвь, которая не является окончательной версией выпуска, скорее всего, в процессе
Ниже приведены некоторые контексты, в которых используется термин моментальный снимок:
- Новый коммит создается путем создания снимка индекса.
- Фиксация - это моментальный снимок репо в данный момент.