2012-02-16 24 views
10

Python'da biraz pre-commit kanca oluşturdum. Bu kanca Linux altında bir cazibe gibi çalışır, ancak Windows onu bana söyleyip duruyor:git python-script'i kanca olarak yürütemiyor

error: cannot spawn .git/hooks/pre-commit: No such file or directory 

Aynı sorunu ve shebang olmaya sonuç, dikişleri hakkında burada benzer sorular olmuştur biliyorum.

#!F:\PortableApps\PortablePython3.2\App\python.exe 

Bu sadece .git/hooks/pre-commit yazarak scriptinizi harika çalışıyor dikkat etmek de ilginç, ama en kısa sürede işlemeye çalışırken, git Yukarıdaki mesajı tükürür: My komut ilk satırda bu vardır.

başka ilginç şey, ben ANSI'den UTF-8 (Not Defteri'ni kullanarak ++) için kodlama dönüştürdüğünüzde, Senaryoyu yürütmeye çalışırken aşağıdaki hatayı alıyorum: Ben kullanıyorum şu

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

araçları: 1.7.6 (Portable)

+0

olası yinelenen [python betiğimi bash yerine python olarak çağırmak için gitmem (windows'ta msysgit) post-commit komut dosyasını nasıl alabilirim?] (Http: // stackoverflow.com/questions/1547005/how-can-i-get-my-git-msysgit-on-windows-post-commit-script-için-invoke-benim-python) – Amber

+0

@Amber bir sarmalayıcı olarak bir bash komut dosyası kullanarak call python.exe pre-commit.py işlevi çalışır. Ama sadece bir Python sürümü var mı? –

cevap

10

Python komut dosyasını pencereler altında çalışmak için proxy yaklaşımını kullandım (msysgit ile). "İşte

https://gist.github.com/1839424 Windows ile çalışıyorsanız Windows'ta


altında çalışmak yapma konusunda önemli bir parçasıdır (ve: (ben yaptım nasıl bilgi ile) tam komut dosyası bulundu olabilir msysgit "), biraz daha karmaşık. "Msysgit" SHEBANG taşıma bir sorun var gibi görünüyor olduğundan, komut dosyası çalıştırılabilir hale getirmek için biraz hile kullanmak gerekecektir (Bu sorunla ilgili daha fazla bilgi here bulunabilir).

Komut dosyasını çalıştırmak için SHEBANG'ı Python komut dosyasından ("pre-commit.py") kaldırmak ve yorumlayıcıyı çağırmak için bir sarmalayıcı bash komut dosyasını kullanmak istersiniz. Bu komut dosyası aşağıdaki gibi görünmelidir:

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

Store'u bu komut dosyası (dosya-biten) "önceden taahhüt" adlı bir dosya olarak. Bu, PATH'unuzda Python'unuzun olduğunu varsayar. Eğer yapmazsanız, tercüman-çalıştırıcınızın tam yolunu da belirtebilirsiniz.

Bu betik "git commit" ile çağrılacak ve büyük dosyaları kontrol etmek için python komut dosyasını arayacaktır. Shebang sonra yolu "msysgit" olarak otomatik olarak yeniden eşleştirmek olacak, değiştirilmemelidir. Sen Python komut yürütülecek için Repo-köküne ilişkin bir yol belirtmek gerekir (çünkü komut dosyası denir yerden şu).

Daha sonra, hem sarmalayıcı dosyasını ("ön-taahhüt") hem de Python komut dosyasını ("pre-commit.py") ".git/hooks" dizinine kopyalamak isteyeceksiniz, kişiselleştirin Python-script ("max_file_size" ve "git_binary_path") ve "pre-commit" -file yürütülebilir dosyasını işaretleyin.

+3

Bağımsız değişkenleri (örneğin, çıkış sonrası kanca için) yaymak istiyorsanız, bir '$ *': 'python ekleyin .git/hooks/pre-commit.py $ *' – Onur

+0

Python betiğinin kendisi içinde olması gerekmez. .git dizini. Tercih ederseniz, depoda başka bir yerde olabilir, böylece depo bölümünün bir parçası olarak işlenir. Daha sonra, aynı zamanda .git/hooks klasöründe açıklanan kabuk komut dosyalarını programlı olarak oluşturarak, git kancalarının repo'nun yeni bir klonuna kurulumunu otomatikleştirmek de oldukça basittir. – bsa

+0

Takım memebelerinin heterojen OS'leri varsa. Örneğin bir Android deponuz var ve geliştiriciler hem OS X hem de Windows üzerinde çalışıyor. Kancanın farklı İşletim Sistemlerinde çalışmasını nasıl sağlayabiliriz? –