2011-04-12 24 views
23

PowerShell komut dosyalarını git kancaları olarak çalıştırmak mümkün mü?PowerShell komut dosyalarını git kancaları olarak çalıştırma

Herhangi bir fark yaratmaması gereken bir PowerShell isteminde git koşuyorum, ancak kancaları uzantı adı olmadan adlandırılan ve PowerShell'in ihtiyacı olan (AFAIK) .ps1, onları çalıştırmaya gelemiyorum. uzantı. Sorun mu, yoksa başka bir şey mi olduğundan emin değilim. Burada nedeniyle seyahatseverlerin Git tasarımına

sayesinde Erick sadece seçenek toplamak kadarıyla

+0

script (uzantılarına bakılmaksızın, bu konuda ya da başka herhangi bir komut dosyası) powershell komut çağırmak yapmak mümkün değil midir? – holygeek

+1

Git kancaları hakkında biraz daha bilgi verebilir misiniz? – JPBlanc

+0

@JPBlanc: ['Githooks' manpage.] (Http://www.kernel.org/pub/software/scm/git/docs/githooks.html) Windows için sağlanan farklı belgelerin olup olmadığını bilmiyorum versiyonu (ler). – intuited

cevap

5

PowerShell çağıran bir betik olacaktır. Talihsiz, ama yine, Git Linux dışı bir uyumluluk üzerine herhangi bir düşünceyi yerleştirmedi.

+0

Bu cevap gibi görünüyor. Bu üzücü bir şey mi? Biz tüm bash sevgilileri değiliz ve pencerelerdeki her zaman ikincilik ikinci sırada olacak. Teşekkürler. –

+0

Git, rasgele platformlar için komut dosyalarını desteklemişse, bu kancalar için yapılandırma dosyaları bash betiği önyükleme disklerinden gerçekten ne kadar farklı görünür? – brianary

5

Bunun için kendimi aradım ve buldum aşağıdaki: git için

Git Powershell kanca önceden taahhüt (Source)

## Editor's note: Link is dead as of 2014-5-2. If you have a copy, please add it. 

PHP sözdizimi denetimi önceden taahhüt PowerShell (Soure)

############################################################################## 
# 
# PHP Syntax Check for Git pre-commit hook for Windows PowerShell 
# 
# Author: Vojtech Kusy <[email protected]> 
# 
############################################################################### 

### INSTRUCTIONS ### 

# Place the code to file "pre-commit" (no extension) and add it to the one of 
# the following locations: 
# 1) Repository hooks folder - C:\Path\To\Repository\.git\hooks 
# 2) User profile template - C:\Users\<USER>\.git\templates\hooks 
# 3) Global shared templates - C:\Program Files (x86)\Git\share\git-core\templates\hooks 
# 
# The hooks from user profile or from shared templates are copied from there 
# each time you create or clone new repository. 

### SETTINGS ### 

# Path to the php.exe 
$php_exe = "C:\Program Files (x86)\Zend\ZendServer\bin\php.exe"; 
# Extensions of the PHP files 
$php_ext = "php|engine|theme|install|inc|module|test" 
# Flag, if set to 1 git will unstage all files with errors, se to 0 to disable 
$unstage_on_error = 0; 

### FUNCTIONS ### 

function php_syntax_check { 
    param([string]$php_bin, [string]$extensions, [int]$reset) 

    $err_counter = 0; 

    write-host "Pre-commit PHP syntax check:" -foregroundcolor "white" 

    git diff-index --name-only --cached HEAD -- | foreach {    
     if ($_ -match ".*\.($extensions)$") { 
      $file = $matches[0]; 
      $errors = & $php_bin -l $file   
      if ($errors -match "No syntax errors detected in $file") { 
       write-host $file ": OK" -foregroundcolor "green" 
      } 
      else {    
       write-host $file ":" $errors -foregroundcolor "red" 
       if ($reset) { 
        git reset -q HEAD $file 
        write-host "Unstaging" $file "..." -foregroundcolor "magenta" 
       } 
       $err_counter++ 
      } 
     } 
    } 

    if ($err_counter -gt 0) { 
     exit 1 
    }  
} 

### MAIN ### 

php_syntax_check $php_exe $php_ext $unstage_on_error 

Kod bir ön-kanca için, ama hemen hemen her şeyi yapmak için değiştirebilirsiniz. Yapman gerekeni yapmalısın!

+0

İlki benim için çalışmıyor. Powershell komut dosyasının göreli yolu doğru şekilde çözümlenmiyor. –

15

Hazırlık öncesi örneğini yeniden adlandırın. Daha sonra pre-commit.ps1 powershell komut dosyasını aynı klasörde yapın.

#!/bin/sh 
c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -Command -File '.git\hooks\pre-commit.ps1' 
+2

Sanırım inline powershell komutunu bekledikten sonra Komut satırında sözdiziminin yanlış olduğunu düşünüyoruz, ancak bir dosya da belirtiyorsunuz. Bir cmdlet, işlev veya komut dosyası dosyasının adı olarak tanınmamasıyla ilgili bir hata verir. – leinad13

+0

"#! Tanınmadı ..." veya "Terim tanınmıyor ..." gibi hatalar alırsanız, [aşağıda yanıtım] bölümüne bakın (http://stackoverflow.com/a/39796096/1225497). . – Taran

2

Kim Ki Won 'ın cevabı yukarıda benim için işe yaramadı, ama bu yüzden bazı insanlar için çalıştığını varsayıyoruz upvotes vardır. Bana bin/sh bırakarak ve yerine -Dosya kullanarak yürütme, doğrudan komutu yürütürken edildi çalıştı Ne

.

c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -Command .\.git\hooks\pre-commit.ps1 
+1

Bu benim için de çalıştı, teşekkürler! – David

0

Bu Windows üzerinde benim git kanca bulunur \ git \ kanca. (Başlangıçta git init çalıştırın) proje kök klasöründe bulunan

sonrası güncelleme

#!/bin/sh 
c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -Command '.\post-update.ps1' 

Powershell komut dosyası. Powershell başka bir depoya gider ve depoyu güncelleyerek çeker.

sonrası update.ps1

Set-Location "E:\Websites\my_site_test" 
$env:GIT_DIR = 'E:\Websites\my_site_test\.git'; 
$env:GIT_EXEC_PATH= 'C:\Program Files (x86)\Git/libexec/git-core'; 
git pull 
İlgili konular