git hook权限问题

时间:2010-12-09 06:33:30

标签: git bash

我已经设置了我的git工作结构如下(感谢另一个问题中的建议git : Small project work

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

目前,dev1和dev2都将项目推送到/path/to/staging repo。我在/ path / to / staging中有一个钩子,它会自动从我的/ live / website触发git pull。这样,我就有了一份工作文件副本。

此外/path/to/staging (bare)已使用share = 0777初始化,因此我知道共享不是问题。此外,我已将所有文件CHMODT到777并设置了棒位。

我已将/ live / website repo创建为user : root。但是,我已将dev1中的repo创建为user : dev1。我可以在dev1中进行更改,但是当我尝试从dev1推送repo时,这就是我面临的问题:

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

基本上,我没有看到文件成功转移到/ live / website。我认为这个问题出现了,因为我正在执行user : dev1代码。但是,当我浏览/live/websit e并手动git pull作为user : root时,它会成功提取dev1所做的更改并更改工作文件。

如果有办法解决此问题,有人可以推荐吗?因为它超越了自动挂钩的目的......

我想做的其他事情就是陷入困境,我想改变用户:

su root
password

但是,当它执行时,我不认为我在提示符下输入密码,因为我收到的错误消息是:

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

编辑,

此外,有人可以提出一种从推送回来的方法吗?并获得以前的文件状态?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我正在使用类似的工作流程,我甚至在实时网络服务器上都没有root访问权限,它仍然可以正常工作。这是我正在使用的脚本(它是一个post-receive钩子;我想它可能是一个更新后的钩子,但我没有测试过):

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

然后你可以通过运行hooks / post-receive来测试钩子。如果它在您手动测试时有效,那么当您运行“git push”

时它应该可以正常工作