Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git无法将python脚本作为钩子执行_Python_Windows_Git_Msysgit_Githooks - Fatal编程技术网

git无法将python脚本作为钩子执行

git无法将python脚本作为钩子执行,python,windows,git,msysgit,githooks,Python,Windows,Git,Msysgit,Githooks,我在python中创建了一个小的pre-commithook。这个钩子在Linux下很有魅力,但在Windows中它一直告诉我: error: cannot spawn .git/hooks/pre-commit: No such file or directory 我知道这里也有类似的问题,关于同一个问题,以及关于舍邦的结论。我的脚本的第一行有: #!F:\PortableApps\PortablePython3.2\App\python.exe 还值得注意的是,只需编写.git/hook

我在python中创建了一个小的
pre-commit
hook。这个钩子在Linux下很有魅力,但在Windows中它一直告诉我:

error: cannot spawn .git/hooks/pre-commit: No such file or directory
我知道这里也有类似的问题,关于同一个问题,以及关于舍邦的结论。我的脚本的第一行有:

#!F:\PortableApps\PortablePython3.2\App\python.exe
还值得注意的是,只需编写
.git/hooks/pre-commit
即可执行脚本,效果非常好,但只要我尝试提交,git就会发出上述消息

另一件有趣的事情是,当我将编码从ANSI转换为UTF-8(使用Notepad++)时,我在尝试执行脚本时遇到以下错误:

.git/hooks/pre-commit: Cannot execute binary file
我正在使用以下工具:

  • 3.2.1.1
  • msysgit 1.7.6(便携式)

我使用代理方法使python脚本在windows下工作(使用msysgit)。完整的脚本(包括我是如何完成的描述)可以在这里找到:

下面是让它在Windows下工作的重要部分


如果您使用的是Windows(和“msysgit”),则会稍微复杂一些。由于“msysgit”在处理时似乎有问题,因此您必须使用一些技巧使脚本可执行(可以找到有关此问题的更多信息)

为了使脚本工作,您需要从Python脚本(“pre-commit.py”)中删除SHEBANG,并使用包装器bash脚本调用解释器。此脚本应如下所示:

#!/bin/sh
python .git/hooks/pre-commit.py
将此脚本存储为名为“预提交”的文件(无文件结尾)。这假设您的应用程序中有Python。如果没有,还可以指定解释器可执行文件的完整路径

这个脚本将被“git commit”调用,并调用python脚本来检查大文件。不应更改SHEBANG之后的路径,因为“msysgit”将自动重新映射它。必须为要执行的Python脚本指定一个相对于repo根的路径(因为脚本是从该路径调用的)


之后,您需要将包装文件(“pre-commit”)和Python脚本(“pre-commit.py”)复制到repos.git/hooks-目录,个性化Python脚本(“max_-file_-size”和“git_-binary_-path”)并标记“pre-commit”-文件可执行。

使用bash脚本作为包装来调用
python.exe pre-commit.py
的@Amber的可能重复。但是是否有一个纯Python版本?如果要传播参数(例如,对于签出后挂钩),请附加一个
$*
Python.git/hooks/pre-commit.py$*
Python脚本本身不必位于.git目录中。如果愿意,它可以位于存储库的其他位置,以便作为存储库的一部分提交。然后,通过编程方式创建此处在.git/hooks文件夹中描述的shell脚本,将git钩子自动安装到repo的新克隆中也是相当简单的。例如,我们有一个Android存储库,开发人员在OSX和Windows上都在使用它。我们如何确保钩子在不同的操作系统上工作?您可以在Mac OS、GNU/Linux和Windows上使用@Luks解决方案。