我正在尝试设置一个中央存储库,当它从本地计算机推送到另一个存储库时会自动推送到另一个存储库。我已经谷歌搜索了几天了,我已经尝试了所有我找不到的命令组合。
设置: 我首先将中央存储库创建为裸,然后将其作为非裸机克隆到第二台机器上。我将第二台机器作为遥控器添加到第一台机器上,称为“www”。我确认我可以从第一台机器手动执行“git push www master”,它将通过SSH更新第二台机器。然后我通过HTTP将存储库克隆到我的本地开发机器。我可以从当地推到中央就好了。
我的更新后的钩子当前形式:
#!/bin/bash
cd /var/git_repos/site.git
unset $(git rev-parse --local-env-vars)
branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$branch" == "master" ];
then
echo "Pushing $branch to www..."
env -i git push www master
fi
exec git update-server-info
我从各种SO和博客文章中拼凑了这些。从第一台机器的CLI手动执行时它工作正常(“cd /var/git_repos/site.git/hooks; ./post-update”)但是在执行时我收到错误消息“www不是Git存储库”作为一个钩子。
输出:
$ git push
Password:
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 264 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Pushing master to www...
remote: fatal: 'www' does not appear to be a git repository
remote: fatal: The remote end hung up unexpectedly
To https://xxx@git.xxx.xxx/site.git
e3d3a1d..103c819 master -> master
谁能告诉我我做错了什么?
编辑:我发现我最初的问题是site.git上的权限没有完全正确设置。解决了这个问题后,我遇到了一个新问题。
新输出:
$ git push
Password:
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 332 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: I am apache <---- Output of "whoami" for debugging
remote: Pushing master to www...
remote: ssh: connect to host 192.168.1.79 port 22: Permission denied
remote: fatal: The remote end hung up unexpectedly
To https://nnn@git.nnn.nnn/site.git
29d504c..f14f201 master -> master
我尝试将以下内容添加到我的/ etc / sudoers文件中,但没有运气:
apache ALL=NOPASSWD: /usr/bin/ssh
答案 0 :(得分:1)
这是尝试推送到未知遥控器时出现的错误。尝试:
git push thisisprobablynotaremote master
检查
git remote -v
并确保正确定义了www,同时检查
git config --list
www也应该在那里。
从钩子本身打印所有命令的输出并比较输出。
答案 1 :(得分:0)
我建议将www
更改为您要推送的远程仓库的完整网址。此外,将master
更改为master:master
可能会有所帮助。
答案 2 :(得分:0)
不要做
unset $(git rev-parse --local-env-vars)
我认为你看到了人们试图从不同的回购中做一个git拉的钩子。您只是执行与当前仓库相关的所有命令。所以你不必这样做。
同样,不要这样做:
env -i git push www master
删除env -i