我正在尝试让 git post-receive hook 在 Windows 上工作。
我正在使用 Git 1.7.9 (Msysgit),并且在本地有一个存储库,在远程服务器上有一个裸存储库。我可以获取、提交、推送等。我已经设置了一个接收后挂钩,该挂钩应该将文件检出到工作文件夹中(部署过程的一部分),但它似乎不起作用。
这就是我所做的:
- 更改文件、暂存并提交
- 推送到远程服务器 - 成功
- 期望看到回声 - 没有看到回声
- 检查服务器上的工作文件夹 - 最新文件不存在
- 登录到服务器并手动运行挂钩脚本 - 最新文件将检出到工作文件夹中。
我更改了挂钩,因此除了回显消息之外它什么也不做,并且我读到推送后我应该在控制台中看到它。但这没有被显示,所以我只能假设钩子没有被触发。
我在处理请求的服务器上使用 git dot aspx 推送 HTTP,并通过本地 gui 进行推送。失败后,我尝试了 Bonobo,但通过 gui 或 bash 控制台推送时,钩子不起作用。
我假设有人在某个地方有这个工作,但经过两天的搜索,我发现的所有解决方案都没有帮助,或者有相同问题的人尚未得到解答。
(顺便说一句,我是一个 git 新手)。
Cheers.
Update
我开始认为这可能与权限有关 - 但是 Unix 权限,而不是 NTFS。当@eis提到权限时,我假设是NTFS。但经过更多挖掘后,Windows 上的 Git 似乎仍然检查 Unix 文件权限。
所以我怀疑问题是接收后文件不可执行,就像我执行ls -o
它是-rw-r--r--(我相信是644)。如果我尝试通过 bash 改变它并且chmod 777 post-receive
然后做ls -o
权限是一样的。
奇怪的是,一旦我编辑了接收后(使用记事本++),执行位就被删除了。 (我的测试脚本以 .bat 结尾,但确实保留了其执行位......)
顺便说一句,我登录的用户是文件的所有者(根据ls -o
)但我无法设置权限。
现在开始变得非常困惑。我是否遗漏了一些非常明显的东西?
Update 2
Neither chmod 777 post-receive
nor chmod a+x post-receive
工作。我采取了一个新的、干净的接收后文件,将其上传到服务器并检查权限并且它已执行。如果我在 Windows 中重命名该文件(以删除示例),则执行将被删除。如果我在 bash 中这样做mv
执行被保留。
但是,每当我编辑文件(在 Windows 中或使用 vi 的 bash 中)时,执行就会被删除。
那么,现在的问题是为什么当我编辑文件时它会删除执行位?
希望这是最后的障碍以及它不执行的原因......