«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Mini-git: понимание того, как файлы хранятся в объектах Git

Mini-git: понимание того, как файлы хранятся в объектах Git

Опубликовано 24 августа 2024 г.
Просматривать:525

Mini-git, Understanding How Files Are Stored in Git Objects

Вчера я решил самостоятельно реализовать одну из основных функций Git — в частности, то, как хранятся файлы, что такое объекты Git, а также процессы хеширования и сжатия. На разработку у меня ушло 4 часа, и в этой статье я познакомлю вас с моим мыслительным процессом и подходом.

Что происходит, когда вы фиксируете файл?

Когда вы фиксируете файл в Git, происходит несколько важных шагов:

Сжатие файла:

Содержимое файла сжимается с использованием алгоритма zlib для уменьшения его размера. Это сжатое содержимое сохраняется в базе данных объектов Git.

Хэш-расчет:

Уникальный хэш SHA-1 генерируется из содержимого сжатого файла. Этот хэш служит идентификатором файла в базе данных объектов Git.

Хранение объекта:

Объектный файл хранится в каталоге .mygit/objects, организованном по первым двум символам хеша. Эта структура упрощает управление и эффективное извлечение объектов.
Обновление информации о фиксации:

Чтобы продемонстрировать, как файлы хранятся в git.
Я реализовал функцию фиксации, приняв во внимание один файл

  1. Для каждого файла я рассчитал хэш
  2. Внутри папки объектов создается новая папка с именем, равным первым двум символам хеша.
  3. И внутри этой папки создается файл с оставшимся хешем в качестве имени. (в этом файле хранится сжатый формат зафиксированного файла)
  4. Обнаружены изменения путем сравнения вновь вычисленного хэша и последнего вычисленного хеша файла

Обнаружение изменений

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

  1. Извлеченный массив строк из oldContent и newContent
  2. Создана карта для хранения строки как ключа и индекса как значения
  3. Создано два новых массива для хранения индексов общих строк в oldContent и newContent. 4.например: OldCommonarray = [0, 3] тогда удаленные строки будут [1,2]

Репозиторий GitHub
Линкедин

Большое спасибо за уделенное время.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/keerthivardhan1/mini-git-understanding-how-files-are-stored-in-git-objects-5bfb?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с Study_golang@163 .com, чтобы удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3