Git clone 工作正常,但 git push 不行

Man*_*dar 3 git

我在 Git 服务器上创建了一个测试 git repo:

/var/cache/git/username/myGitRepo.git
Run Code Online (Sandbox Code Playgroud)

这是一个“裸”的git repo。文件的所有权属于这个“用户名”用户。我可以在另一台 Windows 机器上克隆上面的 Git 存储库。

git clone git://myhost/var/cache/git/username/myGitRepo.git
Run Code Online (Sandbox Code Playgroud)

回购正确克隆。然后我可以进行本地提交并尝试将更改推送回我的 Git 服务器:

git push origin master
Run Code Online (Sandbox Code Playgroud)

但这会在服务器上出现权限错误:

fatal: remote error: access denied or repository not exported: /git/username/myGitRepo.git
Run Code Online (Sandbox Code Playgroud)

git-daemon-export-ok在 repo 目录中添加了魔法文件 ' ' 文件。但我不断收到上述错误。

我甚至设置chmod777/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)
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我解决此错误?

lar*_*sks 11

开箱即用,该标准git-daemon不允许您push进入存储库。手册页说:

这非常适合只读更新,即从 git 存储库中提取。

如果您真的想启用匿名push(实际上,您不这样做;只需使用ssh),您需要启用receive-pack默认情况下禁用的服务(因为这是一个坏主意)。再次,从手册页(服务部分):

接收包

这为 git send-pack 客户端提供服务,允许匿名推送。默认情况下它是禁用的,因为协议中没有身份验证(换句话说,任何人都可以将任何内容推送到存储库中,包括删除引用)。

大胆的是我的。您可以通过传递--enable=receive-pack命令行选项来全局启用此服务,或者通过在存储库的 git 配置中设置daemon.receivepack为每个存储true库。