我已经创建了一个远程 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
,我唯一能找到的是 HEAD 文件,其中包含我在 中进行的初始提交的 id /var/www/html/myproject.git/refs/heads/master
。(所以我知道推送成功了)
这些文件可能在哪里?
答案1
答案是,objects/pack
在裸存储库中,所有文件都以哈希文件的形式存储在目录中。您无法直接从那里获取文件。
如果有人碰巧尝试做我所做的事情,并在服务器上拥有一组可由 git 管理的文件(例如,Web 服务器),那么您需要执行以下操作:
对您希望文件可访问的存储库进行克隆(确保 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:
以查看是否发生任何错误。