2011-04-26 106 views
1

我试图设置一个中央存储库,当它从我的本地计算机推送到时,它会自动推送到另一个存储库。我现在一直在谷歌搜索几天,我已经尝试了所有的命令组合,我可以找到没有运气。Git从更新后的挂钩失败 - X不是存储库

设置: 我首先创建了一个裸露的中央存储库,然后将其作为非裸设备克隆到第二台机器。我将第二台机器添加为第一台机器,称为“www”。我确认我可以从第一台机器手动执行“git push www master”,它会通过SSH更新第二台机器。然后我通过HTTP将存储库克隆到我的本地开发机器。我可以从本地推到中央就好了。

我的post-update挂钩以目前的形式:

#!/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://[email protected]/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://[email protected]/site.git 
    29d504c..f14f201 master -> master 

我曾尝试加入以下到我的/ etc/sudoers文件没有运气文件:

apache ALL=NOPASSWD: /usr/bin/ssh 

回答

1

这是试图推到时候你得到的错误未知的远程。尝试:

git push thisisprobablynotaremote master 

检查

git remote -v 

,确保WWW定义正确,还要检查

git config --list 

WWW应该有作为。

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

+0

我得到呼应两个命令没有输出。我认为这不是一件好事,是吗? – 2011-04-26 20:40:00

0

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

+0

我奇怪地得到了“权限被拒绝”的错误。 – 2011-04-27 02:51:35

0

不要做

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

我想你看到人们试图从不同的回购做一个git拉了钩。你只是在执行与当前回购相关的所有命令。所以你不必这样做。

同样,不要做:

env -i git push www master 

删除env -i

+0

我正在尝试将这些命令作为最后的努力,但删除它们没有任何区别。 – 2011-04-27 02:43:59