2010-12-09 101 views
2

我已经把我的git的工作结构如下(由于建议在另一个问题git : Small project workgit的钩权限问题

/live/website 
     | 
     | 
/path/to/staging (bare) 
    |   | 
    |   | 
dev1  dev2 

目前,无论DEV1和DEV2,推动项目的/path/to/staging repo。我在/ path/to/staging中有一个钩子,它会自动从我的/ live /网站触发git pull。这样,我有一个文件的工作副本。

另外/path/to/staging (bare)被初始化为share = 0777,所以我知道这个份额不是问题。此外,我已将所有文件CHMODED到777并设置棒位。

我创建了/ live /网站回购为user : root。不过,我在dev1中创建了回购作为user : dev1。我可以在DEV1微调,但是当我尝试从DEV1推回购,这是我所面临的问题:

error: Couldn't set refs/remotes/origin/master 
From /path/to/staging 
! 8b4fddc2 .. e2a0b21 master  -> origin/master (unable to update local ref) 
To path/to/staging 
    8c5fddc2 .. e2a0b21 master -> master 

基本上,我没有看到文件,成功地转移到/现场/网站。我认为这个问题是由于我执行的代码为user : dev1。但是,当我浏览到/live/website并手动执行git pull作为user : root时,它成功地取消了由dev1所做的更改并更改了工作文件。

有人可以推荐如果有办法解决这个问题吗?因为它击败了自动挂钩的目的...

别的东西,我认为做的是钩,我想改变用户的:

su root 
password 

然而,在执行时,我不要以为我在提示符处输入密码,因为我收到错误消息是:

hooks/post-receive: line 18: password: command not found 

编辑,

另外,有人可以建议一种方式从推回去?并获得以前的文件状态?

回答

1

AFAIK你不能在命令行输入密码。但是,您可以使用sudo,将允许的用户添加到/etc/sudoers而不使用密码,因此您可以运行命令sudo -u webside-user-name 'cd /live/website && git fetch && git checkout master'

+0

Rudi:我看着那个文件,它说,我只能通过做sudo visudo来修改。但是,当我尝试执行该命令时:`sudo:visudo:command not found`。所以编辑是我遇到的问题。就git目录结构而言,你知道为什么我在执行pull时遇到问题吗?我的意思是,`/ live/website`是一个共享库。我保证,我通过做`git repo-config core来做到这一点。sharedRepository true` – g1t 2010-12-09 08:26:59

0

我正在使用类似的工作流程,而且我甚至没有root用户访问实时网络服务器,它仍然正常工作。下面是我使用的脚本(这是一个后收到钩,我想这可能是一个post-update挂钩,而不是,但我还没有测试过):

 
#!/bin/sh 
# To enable this hook, make this file executable by "chmod +x post-receive". 
GIT_WORK_TREE=/path/to/htdocs git checkout -f 

然后你就可以通过运行测试钩钩/后领取。如果它在你手动测试时工作,它应该在你运行“git push”时工作。