Назад | Перейти на главную страницу

Не уверен, где мой репозиторий git хранит файлы

Я сделал удаленный репозиторий git с

mkdir /var/www/html/myproject.git
chmod 0770 /var/www/html/myproject.git
ln -s /var/www/html/myproject.git myproject.git
cd myproject.git
git --bare init

и успешно подключился к нему и клонировал его на своей машине с

git clone git@myserver.co.uk:myproject.git

затем загрузил в него несколько файлов

git push

который при повторной попытке показывает, что репозиторий уже обновлен.

Однако я смотрю на удаленный сервер и на самом деле не могу найти, где git сохранил эти файлы! Это не в /var/www/html/ ни /home/git и единственное, что мне удалось найти, это файл HEAD, который содержит идентификатор начальной фиксации, которую я сделал в /var/www/html/myproject.git/refs/heads/master. (Так что я знаю, что толчок сработал)

Где могли быть файлы?

Ответ: на самом деле все файлы хранятся в objects/pack каталог в виде хешированных файлов в чистом репозитории. Вы не можете напрямую получить файлы оттуда.

Если кто-то случайно пытался сделать то же, что и я, и на сервере есть набор файлов, которыми можно управлять с помощью git (например, веб-сервер), то вам нужно сделать это вместо этого:

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

mkdir /path/to/clone/repo
chmod -R 0775 /path/to/clone/repo
cd /path/to/clone/repo
git clone /path/to/bare/repo.git

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

vi /path/to/bare/repo.git/hooks/post-update
#!/bin/sh
# Update the real-file cloned repository
unset GIT_DIR
cd /path/to/cloned/repo
git fetch
git reset --hard

Убедитесь, что это исполняемый файл

chmod a+x /path/to/bare/repo.git/hooks/post-update

Отправьте фиксацию в пустой репозиторий и обратите внимание на строки, начинающиеся с remote: чтобы увидеть, возникли ли какие-либо ошибки.