Что такое мерзавец "Снимок"? - PullRequest
62 голосов
/ 11 февраля 2011

Официальный Git doc говорит:

$ git diff test

Это покажет вам разницу между вашим текущим рабочим каталогом и снимком наветка 'test'

Для новичка это очень запутанно.Я никогда не слышал о термине снимок.Они означают "ГОЛОВУ" ветки "test"?

Ответы [ 8 ]

43 голосов
/ 11 февраля 2011

Термин «моментальный снимок» также используется на ссылочном сайте git.

Это термин, заменяющий «Редакция».В других системах контроля версий изменения в отдельных файлах отслеживаются и называются ревизиями, но с помощью git вы отслеживаете всю рабочую область, поэтому для обозначения различий используется термин «снимок».

От http://gitref.org/index.html

Вместо того, чтобы писать инструмент, который версии каждого файла по отдельности, например, Subversion, мы, вероятно, напишем инструмент, который облегчит сохранение снимков нашего проекта без необходимости каждый раз копировать весь каталог.

Это, по сути, Git.Вы говорите Git, что хотите сохранить снимок вашего проекта с помощью команды git commit, и она в основном записывает манифест того, как все файлы в вашем проекте выглядят в этот момент.Затем большинство команд работают с этими манифестами, чтобы увидеть, чем они отличаются, или извлечь из них контент и т. Д.

Если вы думаете о Git как о инструменте для хранения, сравнения и объединения снимков вашего проекта, он можетбудет проще понять, что происходит и как все делать правильно.

25 голосов
/ 11 февраля 2011

Снимок - это состояние чего-либо (например, папки) в определенный момент времени.В этом случае снимок означает текущее содержимое тестовой ветви, это не обязательно должна быть основная редакция.

7 голосов
/ 14 ноября 2018

Для того, чтобы объяснить термин-снимок ясно.Пожалуйста, позвольте мне представить две другие вещи:

  1. формат Git Loose Object
  2. GIT Packfiles

Предположим, у нас есть файл с именем "a.txt"содержимое которого состоит из десяти букв «a» под контролем git.После того, как мы передадим этот файл, он создаст три папки по пути .git / objects, и у каждой папки будет один файл. Каждый файл имеет вид SNAPSHOT .

a.txt file under git control which has been committedthree floders created by git after committed

Каждая папка имеет один файл

enter image description here

Теперь , мыотредактируйте файл a.txt, чтобы увидеть, что происходит

Мы изменили первую букву 'a' на букву 'b'

enter image description here - >> enter image description here

Тогда зафиксировано!

Git создал три новых файла под тремя новыми флодерами

enter image description here

Эти три новых файла SNAPSHOTs

enter image description here

Каждый раз, когда мы выполняем COMMIT, git сохраняет снимки на диск вместо разницы между новой версией и старой версией того же файла. Даже если мы просто изменили одну букву одного файла, git сохранит весь файл как снимок .

Это также называется форматом свободного объекта .

В этом случае git будет занимать больше места на диске, чем другие vcs (например, subversion).

Но после этого время от времени блестящий git будет выполнять другую работу (git gc)который создал PACKFILES и удалил Snapchat, содержимое которого аналогично уменьшению его размера.

Пакетные файлы находятся в .git / objects / pack

Вы можете увидеть егопосле выполнения команды "git gc" самостоятельно.

6 голосов
/ 27 сентября 2015

Снимок относится к хранилищу, а снимок экрана - к видео.

Содержимое (файлы и папки) хранилища в определенный момент времени, состояние хранилища, если хотите.

Это содержимое представлено Git's Tree Object и хранится в папке .git. Когда вы commit, вы сохраняете текущий рабочий каталог вашего хранилища как снимок нового хранилища . Ваш Git-репозиторий состоит из серии снимков , другие VCS вместо этого состоят из серии различий.

3 голосов
/ 11 февраля 2011

Во-первых, это не официальная документация по git. Это книга, созданная сообществом. Хотя это, вероятно, довольно авторитетно, это не Евангелие.

AFAIK, "снимок" не имеет никакого формального значения в git. Конечно, git diff manpage не упоминает об этом. В данном контексте это, вероятно, неофициальная ссылка на то, как ветка «test» используется в примерах в книге, то есть в качестве снимка текущей работы, для целей тестирования.

1 голос
/ 11 февраля 2011

Насколько я понимаю, снимок в целом - это просто "сущность", которую git использует для хранения своих данных. В отличие от хранения своих данных в виде серии «дельт» / наборов изменений, как это делает, например, SVN, каждый коммит, который вы делаете для git, создает «объект фиксации», который ссылается на снимок того, как код выглядел в тот момент .

Так что, как говорит @Femaref, это состояние кода в определенное время и не обязательно означает, что оно является главой тестовой ветви, но может быть в примере, который вы видели.

0 голосов
/ 03 мая 2018

На основе других опубликованных определений:

Снимок - это представление текущего состояния ваших отслеживаемых файлов в виде манифеста , который можетсравните его с другими манифестами, чтобы увидеть различия.

Git отслеживает различия между манифестами только с первого момента, когда он был отслежен.Если файл не был изменен со времени самого первого снимка, все последующие снимки будут ссылаться на самый первый снимок.Если файл был изменен, все последующие снимки будут ссылаться на снимок с последними изменениями.То, что хранит git, - это, по сути, связная история снимков с последних до самых первых.Ветвь - это, по сути, разделение временной шкалы, позволяющее создать альтернативную историческую цепочку снимков из определенного снимка в главной цепочке.

Ветви обычно предназначены для объектов и могут быть объединены в некоторый момент вОсновная отрасль.Если нет намерения объединяться, а есть отклонение от первоначального проекта в виде новой и совершенно отдельной копии проекта с собственной историей, его часто называют жесткой вилкой, что в переводе означает «развилка на дороге».

0 голосов
/ 07 сентября 2015

Ниже приведены некоторые контексты, в которых используется термин снимок :

  1. Новый коммит создается путем создания моментального снимка индекса.
  2. Фиксация - это моментальный снимок репо в данный момент.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...