Концепция снимка - PullRequest
       1

Концепция снимка

1 голос
/ 21 сентября 2011

Существует концепция снимок в Git базовая терминология .

Эта концепция используется в рабочем процессе Git:

  1. Вы изменяете файлы в своем рабочем каталоге.

  2. Вы размещаете файлы, добавляя снимки из них в область подготовки.

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

Не могли бы вы объяснить, что такое снимок, и показать небольшой пример файлов и их снимков, и почему Git использует их вместо того, чтобы делать различия, как в других VCS? *

1 Ответ

7 голосов
/ 22 сентября 2011

Снимок просто означает, какое содержимое файла было в данный момент времени.Все системы контроля версий концептуально работают на снимках.Вы хотите быть в состоянии увидеть, как ваш исходный код выглядел в любой момент в прошлом.Они также все хранят различия, чтобы сэкономить место для хранения.Уникальность git заключается в двух аспектах: способ вычисления и хранения внутренних различий не имеет прямого отношения к истории файла, и различия не пересчитываются каждый раз, когда они могут быть.

Допустим, выиметь 1000-байтовый файл, который обновляется практически при каждой сборке.Если вы измените один байт, git будет временно сохранять совершенно новую копию файла с измененным одним байтом.Здесь люди бросают вызов и говорят: «О боже, мерзавец такой глупый, он должен хранить различия прямо сейчас. Я придерживаюсь Subversion».,Почти все, с чем вы хотите сравнить, это вещи, которые изменились с момента последнего нажатия.Поскольку он еще не вычислил различия, у git просто есть полный и легко доступный кэш всех этих недавно измененных файлов, где другие системы контроля версий должны начинать с версии 1 и применять сотни различий для восстановления того же контента..

Затем, когда вы нажимаете, чтобы поделиться своими изменениями, git gc запускается автоматически для более эффективного хранения этих файлов для передачи по сети, а затем вычисляются и сохраняются различия.Однако это не обязательно diff из версии n-1 в версию n файла.Если содержимое повторяется во многих файлах, git может принять это во внимание.Если одно и то же изменение сделано в нескольких ветках, git может принять это во внимание.Если файл перемещен, git может принять это во внимание.Если в будущем будет обнаружена некоторая эвристика, которая может сделать вещи более эффективными, git может принять это во внимание, не нарушая существующих клиентов.Это не связано с идеей, что diff всегда должен быть от одной последовательной версии к следующей.

Это фундаментальные проектные решения, подобные этим, которые делают git таким быстрым по сравнению с другими программами контроля версий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...