我想要在Windows上获得一个git post-receive钩子。Git - post-receive钩子不能在远程窗口服务器上工作
我使用Git 1.7.9(Msysgit),并且在本地有一个回购站,在远程服务器上有一个回购站。我可以获取,提交,推送等。我已经设置了一个post-receive钩子,它应该将文件检出到一个工作文件夹中(部署过程的一部分),但似乎不起作用。
这是我做的:
- 更改文件,舞台和它承诺
- 推送到远程服务器 - 成功
- 希望看到的回声 - 看不到回音
- 检查服务器上的工作文件夹 - 最新文件不存在
- 登录到服务器并手动运行挂接脚本 - 将最新文件签出到工作文件夹中。
我改变了钩子,所以除了回显信息之外,它什么都不做,我已经读过,我应该在推送后在控制台中看到它。但是这并没有显示出来,所以我只能假设这个钩子没有被解雇。
我推送HTTP服务器处理请求的服务器上的git dot aspx,并通过gui在本地进行注入。之后,我尝试了Bonobo,当通过gui或bash控制台进行推送时,钩子不起作用。
我假设有人有这个工作的地方,但经过两天寻找所有我找到的解决方案没有帮助或没有回答同样的问题的人。
(我是一个git新手btw)。
干杯。
更新
我开始认为这可能是做的权限 - 而Unix许可,而不是NTFS。当@eis提到我使用NTFS的权限时。但经过更多的挖掘,似乎Windows上的Git仍然检查Unix文件权限。
所以我怀疑这个问题是post-receive文件不可执行,因为当我做一个ls -o
它是-rw-r-r--(我相信)。如果我尝试通过bash和chmod 777 post-receive
进行更改,那么执行ls -o
的权限是相同的。
奇怪的是,只要我编辑后接收(与记事本+ +)的执行位被删除。 (我的测试脚本以.bat结尾,虽然保留其执行位...)
顺便说一句,我登录的用户是文件的所有者(根据ls -o
),但我不能设置权限。
现在开始变得非常困惑。我错过了真正明显的东西吗?
更新2
无论chmod 777 post-receive
也不chmod a+x post-receive
工作。我拿了一个新的干净的post-receive文件,将它上传到服务器并检查了权限并执行了。如果我在Windows中重命名该文件(以删除示例),则执行将被删除。如果我用bash与mv
执行保留。 但是,无论何时编辑文件(在Windows中或在vi中使用bash),然后执行都会被删除。
所以,现在的问题是为什么当我编辑文件时删除了执行位?
希望这是最后一关,它不执行的原因...
你确定你的脚本是正确的,它执行?你有没有在那里登录?怎么样git-dot-aspx,它有没有任何日志? – vissi 2012-02-23 15:38:13
当我登录到服务器并通过bash控制台手动运行时,它按预期方式运行(即回显并签出一些文件)。这告诉我脚本很好。然而,当我推到这个回购它不开火 - 我没有看到回声和文件没有签出。这告诉我脚本没有被调用。 至于原木。事件查看器中没有任何内容,找不到任何gitdotaspx日志,Bonobo有日志但没有错误。 – Jag 2012-02-23 16:00:10
它应该起作用,并且无论您使用哪个客户端都无关紧要。 你可以检查的几件事: - 脚本中的shebang行 - 它是否指向有意义的东西?脚本是否使用那里提到的shell? - 是否为脚本正确设置了执行权限,用户runnig git repo是否具有正确的权限? - 你的脚本结尾是否正确,对吗? (虽然你会看到一个关于这个的错误) – eis 2012-02-23 16:52:19