2012-02-16 137 views
10

我在python中創建了一個小的pre-commit鉤子。這個鉤子就像Linux下的一個魅力,但在Windows中,它不斷告訴我:git無法執行python腳本作爲鉤子

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(使用記事本+ +),我在嘗試執行腳本時出現以下錯誤:

.git/hooks/pre-commit: Cannot execute binary file 

我使用以下工具:

+0

可能的重複[我怎麼能得到我的git(windows上的msysgit)post-commit腳本來調用我的python腳本而不是bash?](http:// stackoverflow。com/questions/1547005 @ how-can-i-get-my-git-msysgit-on-windows-post-commit-script-to-invoke-my-python) – Amber 2012-02-16 09:02:25

+0

@Amber使用bash腳本作爲包裝器調用'python.exe pre-commit.py'工作。但是,有沒有Python版本? – 2012-02-16 09:15:45

回答

10

我使用代理方法使python腳本在windows下工作(使用msysgit)。完整的腳本(與我是如何做到的說明)可能在這裏找到:https://gist.github.com/1839424

這裏是關於使它的Windows


下工作,如果你正在使用Windows系統的重要組成部分(與「 msysgit「),這有點複雜。由於「msysgit」似乎在處理SHEBANG時遇到問題,因此您必須使用一些小技巧才能使腳本可執行(有關此問題的更多信息,請參閱here)。

爲了使腳本正常工作,您需要從Python腳本中移除SHEBANG(「pre-commit.py」)並使用包裝器bash腳本來調用解釋器。該腳本應該如下所示:

#!/bin/sh 
python .git/hooks/pre-commit.py 

將此腳本存儲爲名爲「pre-commit」(無文件結尾)的文件。這假設你在你的PATH中有Python。如果你不這樣做,你也可以指定解釋器可執行文件的完整路徑。

該腳本將被「git commit」調用並調用python腳本來檢查巨大的文件。 SHEBANG之後的路徑不應該改變,因爲「msysgit」會自動重新映射它。您必須爲要執行的Python腳本指定一個相對於repo-root的路徑(因爲腳本被調用的位置)。

之後,您需要將wrapper-file(「pre-commit」)和Python-script(「precommit.py」)複製到您的repos「.git/hooks」目錄中,個性化Python腳本(「max_file_size」和「git_binary_path」)並標記「預提交」文件可執行文件。

+3

如果你想傳播參數(例如post-checkout鉤子),附加一個'$ *':'python .git/hooks/precommit.py $ *' – Onur 2012-10-18 12:07:03

+0

Python腳本本身不一定要在裏面.git目錄。如果您願意,它可以位於您的存儲庫中的其他位置,以便將其作爲存儲庫的一部分提交。 然後,通過以編程方式創建這裏描述的.git/hooks文件夾中的shell腳本,也可以非常簡單地將git鉤子安裝到repo的新克隆中。 – bsa 2013-10-15 09:35:23

+0

如果團隊成員有不同的操作系統會怎麼樣。例如,我們有一個Android存儲庫,開發人員在OS X和Windows上都可以使用它。我們如何確保我們的鉤子能夠跨越不同的操作系統? – 2016-06-27 05:54:24