Я сделал удаленный репозиторий 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:
чтобы увидеть, возникли ли какие-либо ошибки.