Проектная лаборатория

Собственный Git

0 / 7этапов пройдено

Этап 03 · Основные этапы

Создание blob-объекта

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы реализуете создание blob-объекта командой git hash-object.

Команда git hash-object

Команда git hash-object вычисляет хеш SHA-1 объекта Git. С флагом -w она также записывает объект в каталог .git/objects.

Пример использования git hash-object:

# Create a file with some content
$ echo -n "hello world" > test.txt
 
# Compute the SHA-1 hash of the file + write it to .git/objects
$ git hash-object -w test.txt
95d09f2b10159347eece71399a7e2e907ea3df4f
 
# Verify that the file was written to .git/objects
$ file .git/objects/95/d09f2b10159347eece71399a7e2e907ea3df4f
.git/objects/95/d09f2b10159347eece71399a7e2e907ea3df4f: zlib compressed data

Хранение blob-объектов: повторение

Как упоминалось на предыдущем этапе, каждый blob-объект Git хранится отдельным файлом в каталоге .git/objects. Файл содержит заголовок и содержимое blob-объекта, сжатые с помощью Zlib.

Формат файла blob-объекта выглядит так (после распаковки Zlib):

blob <size>\0<content>
  • <size> — размер содержимого в байтах.
  • \0 — нулевой байт.
  • <content> — само содержимое файла.

Например, если файл содержит hello world, файл blob-объекта будет выглядеть так (после распаковки Zlib):

blob 11\0hello world

Тесты

Тестирующая система сначала инициализирует новый репозиторий Git вашей программой:

$ mkdir test_dir && cd test_dir
$ /path/to/your_program.sh init

Затем запишет в файл случайные данные:

$ echo "hello world" > test.txt

После этого запустит вашу программу следующим образом:

$ ./your_program.sh hash-object -w test.txt
3b18e512dba79e4c8300dd08aeb37f8e728b8dad

Тестирующая система проверит, что:

  • Программа выводит 40-символьный хеш SHA-1 в stdout.
  • Файл, записанный в .git/objects, совпадает с тем, который записала бы официальная реализация git.

Примечания

  • Хотя файл объекта хранится в сжатом формате zlib, хеш SHA-1 нужно вычислять по его несжатому содержимому, а не по сжатой версии.
  • Входом для вычисления SHA-1 служат заголовок (blob <size>\0) и содержимое файла вместе, а не только содержимое.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init git ./my-git --language go

2. Откройте папку в IDE

cd ./my-git

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage jt4

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста