Несмотря на то, что МЕРЗАВЕЦ НЕ хранит дельты файла, можно ли все еще откатывать к предыдущим версиям файла (неограниченные времена?)

Я читал, что Мерзавец не хранит дельты файла. Если это верно, как делает это откат файла поддержки к предыдущим версиям? Если это хранит весь файл, пространство репозитория на диске должно вырасти, чтобы быть неуправляемо большим. Откаты файла поддержки Мерзавца и разность (разности) назад к версии файла 1? Это даже поддерживает понятие управления версиями, как связано с файлами? Это (я верю), важный для моего понимания VCS/DVCS и моих потребностей. Я должен смочь сравнить то, в чем я собираюсь зарегистрироваться с предыдущими версиями.

14
задан 07.02.2019, 18:11

3 ответа

Мерзавец не выбрасывает информацию о ее own*. Все предыдущие версии каждого файла всегда доступны для, возвращается, diffs, проверки, и так далее.

Целое дерево по сравнению с отдельными файлами

То, что можно пытаться согласовать, является идеей получить доступ к старой версии отдельного файла по сравнению с тем, что модель истории Мерзавца фокусируется на целом дереве. Цело-древовидное управление версиями действительно требует, чтобы немного больше работы видело (например), версию foo.c поскольку это существовало десять foo.c- несколько изменений назад по сравнению с десять целых древовидных изменений назад:

# 10 foo.c-changes ago
git show $(git rev-list -n 10 --reverse HEAD -- foo.c | head -1):foo.c

# 10 whole-tree-changes ago
git show HEAD~10:foo.c

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

Эффективность хранения

Когда новый объект (например, файл с ранее невидимым содержанием) вводит систему, он снабжен плоскостью (zlib) сжатие как “свободный объект”. Когда достаточно свободных объектов накапливается (на основе gc.auto параметр конфигурации; или когда пользователь выполняет gc мерзавца или одну из команд упаковки низшего уровня), Мерзавец соберет много свободных объектов в единственный “файл пакета”.

Объекты в файле пакета могут храниться любой поскольку плоскость, сжатая данные (то же как свободный объект, просто укутался с объектами других), или как сжатые дельты против некоторого другого объекта. Дельты могут быть объединены в цепочку вместе на настраиваемые глубины (pack.depth) и, может быть сделан против любого подходящего объекта (pack.window средства управления, как широко Мерзавец ищет лучшую базу на дельте; версия исторически несвязанного файла может использоваться в качестве основы, если выполнение так привело бы к хорошему сжатию дельты). Широта, что глубина и конфигурации размера окна дают механизм сжатия дельты часто, приводит к лучшему сжатию дельты, чем стиль CVS простое one-version-against-the-next/previous-version “различное” сжатие.

Именно это агрессивное сжатие дельты (объединенный с нормальным zlib сжатием) может часто позволять репозиторию Мерзавца (с полной историей, и несжатое рабочее дерево) занимают меньше места, чем единственный контроль SVN (с несжатой рабочей древовидной и нетронутой копией).

Посмотрите, Как Мерзавец Хранит Объекты и разделы Packfile Книги Сообщества Мерзавца. Также страница справочника объектов пакета мерзавца.

* можно сказать, что Мерзавец выбрасывает фиксации путем “перезаписи истории” и с командами как сброс мерзавца, но даже в этих случаях Мерзавец “зависает на” недавно отброшенные фиксации некоторое время, на всякий случай Вы решаете необходимость в них. Посмотрите, что мерзавец повторно порет и чернослив мерзавца.

44
ответ дан 07.12.2019, 11:11

Это может быть считано на той же странице:

...

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

...

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

...

Таким образом можно вернуться к предыдущим изменениям файла и сравнить два файла.

1
ответ дан 07.12.2019, 11:11

мерзавец действительно на самом деле сохраняет дельты файлов, но это сохраняет их как дельту целого дерева файла.

Для наблюдения различий между версиями выполнить одно из следующих действий:

  1. разность мерзавца - показывает, что различия между последним зарегистрировались в версии и файлах, которые были изменены, но не имели git add работайте на них.
  2. разность мерзавца - кэшируемый - показывает различия между предыдущей версией и что все файлы, которые имели git add выполненный, но не фиксировались
  3. разность мерзавца фиксировала - показывают различия между текущим рабочим каталогом и предыдущей фиксацией, как указано с фиксировавшим
  4. разность мерзавца commita.. commitb - показывает различия между двумя фиксациями, a и b. Фиксации могли также быть символьными именами как ответвления или теги.
1
ответ дан 07.12.2019, 11:11

Теги

Похожие вопросы