1

我正在尝试设置一个中央存储库,当它从我的本地计算机推送到另一个存储库时,它将自动推送到另一个存储库。我已经用谷歌搜索了好几天了,我已经尝试了所有我能找到的命令组合,但没有运气。

设置:我首先将中央存储库创建为裸机,然后将其克隆到第二台机器作为非裸机。我将第二台机器作为遥控器添加到第一台机器上,称为“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
4

3 回答 3

1

这是您尝试推送到未知遥控器时遇到的错误。尝试:

git push thisisprobablynotaremote master

查看

git remote -v

并确保正确定义 www,还要检查

git config --list

www 也应该在那里。

从钩子本身打印所有命令的输出并比较输出。

于 2011-04-26T20:15:19.100 回答
0

我建议将其更改为www您要推送到的远程仓库的完整 url。另外更改mastermaster:master可能会有所帮助。

于 2011-04-26T20:15:51.633 回答
0

不要做

unset $(git rev-parse --local-env-vars)

我想你看到了人们试图从不同的回购中进行 git pull 的钩子。您只是在执行与当前存储库相关的所有命令。所以你不必这样做。

同样,不要这样做:

env -i git push www master

去除env -i

于 2011-04-26T21:07:22.477 回答