我在 Git 服务器上创建了一个测试 git repo:
/var/cache/git/username/myGitRepo.git
这是一个“裸” git 仓库。文件的所有权属于这个“用户名”用户。我可以在另一台 Windows 机器上克隆上述 Git 仓库。
git clone git://myhost/var/cache/git/username/myGitRepo.git
存储库正确克隆。然后我可以进行本地提交并尝试将更改推送回我的 Git 服务器:
git push origin master
但这会导致服务器出现权限错误:
fatal: remote error: access denied or repository not exported: /git/username/myGitRepo.git
git-daemon-export-ok
我在 repo 目录中添加了魔术文件“ ”。但我仍然收到上述错误。
我甚至chmod
设置777
了/var/cache/git/username/myGitRepo.git
出现同样的错误。
Git remote -v 抛出以下输出。
$ git remote -v
origin git://myhost/git/username/myGitRepo.git (fetch)
origin git://myhost/git/username/myGitRepo.git (push)
有人能帮助我解决这个错误吗?
答案1
开箱即用,标准git-daemon
不允许您push
进入存储库。 手册页说:
这非常适合只读更新,即从 git 存储库中提取。
如果您确实想要启用匿名push
(实际上您并不想;只需使用ssh
),则需要启用该receive-pack
服务,默认情况下该服务是禁用的(因为这不是一个好主意)。同样,从手册页(这服务部分):
接收包
这为 git send-pack 客户端提供服务,允许匿名推送。默认情况下它是禁用的,因为协议中没有身份验证(换句话说,任何人都可以将任何东西推送到存储库,包括删除 refs)。
这大胆的是我的。您可以通过传递命令行选项来全局启用此服务,或者通过在存储库的 git 配置中设置为来--enable=receive-pack
为每个存储库启用此服务。daemon.receivepack
true