Распаковка git - Скрипт
Для одного из уроков по Git мне понадобился скрипт для удобного просмотра содержимого директории .git (репозитория). (Инструкция для mac и linux)
Все данные, которые мы хотим сохранить в репозитории, Git хранит в специальных объектах. Эти объекты сжимаются с использованием утилиты zlib для экономии места. Впоследствии Git может объединять такие сжатые объекты в специальные пакеты (pack-файлы), чтобы оптимизировать хранение и ускорить доступ к данным.

В корне директории проекта создайте текстовый скрипт unpack_git_objects.sh и добавьте в него содержимое:
1#!/bin/bash
2
3# Целевая директория
4DEST_DIR='./'
5
6# Проверка наличия .git
7if [ ! -d ".git" ]; then
8 echo "Ошибка: текущая директория не содержит .git"
9 exit 1
10fi
11
12# Копируем .git в целевую директорию
13echo "Копирование .git в $DEST_DIR..."
14mkdir -p "$DEST_DIR"
15cp -r .git "$DEST_DIR"
16
17# Переходим в целевую директорию .git с использованием pushd
18pushd "$DEST_DIR/.git" || exit 1
19
20# Создаем директорию для разархивированных объектов
21UNPACKED_DIR="unpacked_objects"
22mkdir -p "$UNPACKED_DIR"
23
24echo "Разархивация объектов с использованием git cat-file..."
25# Перебираем все объекты
26for hash in $(git rev-list --all --objects | awk '{print $1}'); do
27 # Определяем тип объекта (blob, tree, commit и т.д.)
28 obj_type=$(git cat-file -t "$hash")
29 # Извлекаем содержимое объекта
30 git cat-file -p "$hash" > "$UNPACKED_DIR/$hash-$obj_type"
31 echo "Разархивирован объект: $hash ($obj_type)"
32done
33
34echo "Все объекты разархивированы в $DEST_DIR/.git/$UNPACKED_DIR"
35
36# Возвращаемся в исходную директорию с использованием popd
37popd
Сделайте файл исполняемым:
1chmod +x unpack_git_objects.sh
Запустите скрипт:
1./unpack_git_objects.sh
Теперь в директории .git, будет создана директория unpacked_objects в которой будут представлены расшифрованные объекты.

Теперь можно удобно просматривать и изучать все объекты git. В целях обучения - идеально.
Что можно сделать еще? Можно добавить команду git decode - которая будет выполнять этот скрипт.
Я работаю на mac, поэтому буду редактировать файл ~/.zshrc, если у вас linux, то добавить нужно в ~/.bashrc
1# Добавляем алиас для GIT
2git() {
3 if [ "$1" = "decode" ]; then
4 # тут расположить сам скрипт
5 else
6 command git "$@"
7 fi
8}
Сохраните файл и перезапустите терминал. Теперь при запуске команды git decode в директории .git будет создаваться директория unpacked_objects с расшифрованными/разархивированными объектами git.