我做了一个远程的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 [email protected]:myproject.git
然后上传一些文件
git push
当再次尝试显示存储库已经是最新的。
但是,我在远程服务器上四处查看,实际上找不到git存储这些文件的位置! 它不在/var/www/html/ nor /home/git ,我设法find的唯一东西是包含我在/var/www/html/myproject.git/refs/heads/master进行的初始提交的id的HEAD文件/var/www/html/myproject.git/refs/heads/master 。 (所以我知道推工作)
这些文件可能在哪里?
答案实际上是所有的文件都存储在objects/pack目录作为散列文件,当裸仓库。 你不能直接从那里获取文件。
如果偶然的人试图做我所做的,并在服务器上有一组可以通过git(例如,Web服务器)pipe理的文件,那么您需要这样做:
制作一个你想让文件可以访问的存储库的副本(确保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
在包含以下行的裸存储库中创build一个新的更新后的挂钩:
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:开始的行remote:查看是否发生任何错误。