Git + Smart Http(s): 403 错误
Git + Smart Http(s): 403 Error
虽然看了很多帖子,还是没能解决这个问题
我想使用 Git + Smart Http,在我的树莓派上使用远程存储库。
我是 Arch 运行 Linux。
首先,让我们考虑一个简单的 Http 配置(而不是 https)。
Apache和Git在我的Rasperry Pi上正确安装,Http连接的端口是8080。
在我的 Raspberry Pi 上:
1. 我在 /etc/httpd/conf/http.conf 中取消了关于 mod_cgi、mod_alias 和 mod_env
的注释
2. 我在 /etc/httpd/conf/http.conf 添加了这些行:
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Require all granted
</Directory>
我创建了目录/srv/git
# mkdir -p /srv/git</pre>
我已经创建并初始化了一个 git 存储库:
# mkdir -p /srv/git/test.git</pre>
# git init --bare</pre>
我已经更改了 repo 的所有者和组:
# chown -R http:http /srv/git/test.git</pre>
在我的客户端:
我已经在文件夹中克隆了 repo
$ git clone <a href="http://address:8080/git/test.git" rel="nofollow">http://address:8080/git/test.git</a></pre>
我已经创建并添加了一个新文件并且我已经提交了
$ nano test.c</pre>
$ git add test.c</pre>
$ git commit -m 'first' </pre>
我已经在树莓派上推送了新项目
$ git push origin master</pre>
但是我有这个错误:
atal: unable to access 'address:8080/git/test.git/';: The requested URL returned error: 403
如果您在 中克隆 测试文件夹(您在其中初始化了一个 git 存储库),这意味着您拥有:
test/test
如果您从第一个测试文件夹推送,该回购将没有任何来源。
尝试删除任何测试文件夹,然后重新开始:
git clone http://address:8080/git/test.git
cd test
# work
git add .
git commit -m "work"
git push -u origin master
关于 403 错误,我建议在服务器 Apache (2.4) 端:
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
并且:
<LocationMatch "^/.*/git-receive-pack$">
Options +ExecCGI
Require all granted
</LocationMatch>
<LocationMatch "^/.*/git-upload-pack$">
Options +ExecCGI
Require all granted
</LocationMatch>
此外,在服务器上,在 git 裸仓库文件夹中:
cd /srv/git/test.git
git config --file config http.receivepack true
虽然看了很多帖子,还是没能解决这个问题
我想使用 Git + Smart Http,在我的树莓派上使用远程存储库。
我是 Arch 运行 Linux。
首先,让我们考虑一个简单的 Http 配置(而不是 https)。
Apache和Git在我的Rasperry Pi上正确安装,Http连接的端口是8080。
在我的 Raspberry Pi 上:
1. 我在 /etc/httpd/conf/http.conf 中取消了关于 mod_cgi、mod_alias 和 mod_env
的注释
2. 我在 /etc/httpd/conf/http.conf 添加了这些行:
SetEnv GIT_PROJECT_ROOT /srv/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Require all granted
</Directory>
我创建了目录/srv/git
# mkdir -p /srv/git</pre>
我已经创建并初始化了一个 git 存储库:
# mkdir -p /srv/git/test.git</pre>
# git init --bare</pre>
我已经更改了 repo 的所有者和组:
# chown -R http:http /srv/git/test.git</pre>
在我的客户端:
我已经在文件夹中克隆了 repo
$ git clone <a href="http://address:8080/git/test.git" rel="nofollow">http://address:8080/git/test.git</a></pre>
我已经创建并添加了一个新文件并且我已经提交了
$ nano test.c</pre>
$ git add test.c</pre>
$ git commit -m 'first' </pre>
我已经在树莓派上推送了新项目
$ git push origin master</pre>
但是我有这个错误:
atal: unable to access 'address:8080/git/test.git/';: The requested URL returned error: 403
如果您在 中克隆 测试文件夹(您在其中初始化了一个 git 存储库),这意味着您拥有:
test/test
如果您从第一个测试文件夹推送,该回购将没有任何来源。
尝试删除任何测试文件夹,然后重新开始:
git clone http://address:8080/git/test.git
cd test
# work
git add .
git commit -m "work"
git push -u origin master
关于 403 错误,我建议在服务器 Apache (2.4) 端:
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
并且:
<LocationMatch "^/.*/git-receive-pack$">
Options +ExecCGI
Require all granted
</LocationMatch>
<LocationMatch "^/.*/git-upload-pack$">
Options +ExecCGI
Require all granted
</LocationMatch>
此外,在服务器上,在 git 裸仓库文件夹中:
cd /srv/git/test.git
git config --file config http.receivepack true