Запуск сценариев PowerShell в виде git-крючков

Можно ли запускать сценарии PowerShell в качестве git-крючков?

Я запускаю git в подсказке PowerShell, которая не должна иметь никакого значения, но я не могу заставить их работать, поскольку перехватчики называются без расширений, а PowerShell (AFAIK) - расширению .ps1. Я не уверен, что это проблема, или что-то еще.

Спасибо, Эрик

git,powershell,githooks,

24

Ответов: 6


5 принят

Из того, что я собираю, единственным вариантом из-за дизайна Git здесь был бы скрипт bash, вызывающий PowerShell. К сожалению, Git никогда не думал о совместимости с Linux.


17

Переименуйте pre-commit.sample для предварительной фиксации в папке с крючками. Затем сделайте файл сценария powershell pre-commit.ps1 в той же папке.

#!/bin/sh
c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -Command -File '.githookspre-commit.ps1'

Я искал это сам, и я нашел следующее:

Git Powershell pre-commit hook ( Источник )

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

Проверка синтаксиса PHP для git pre-commit в PowerShell ( Soure )

##############################################################################
#
# PHP Syntax Check for Git pre-commit hook for Windows PowerShell
#
# Author: Vojtech Kusy <wojtha@gmail.com>
#
###############################################################################

### 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:PathToRepository.githooks
# 2) User profile template   - C:Users<USER>.git	emplateshooks 
# 3) Global shared templates - C:Program Files (x86)Gitsharegit-core	emplateshooks
# 
# 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)endendServerinphp.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

Код предназначен для привязки до фиксации, но вы можете изменить его, чтобы сделать что угодно. Помогите, что вам нужно сделать!


3

Kim Ki WonОтвет выше не работал для меня, но у него есть upvotes, поэтому я предполагаю, что это работает для некоторых людей.

То, что сработало для меня, это сбросить bin / sh и вместо того, чтобы использовать -File, выполнить команду напрямую:

c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -Command ..githookspre-commit.ps1

0

Это мой git-крючок на Windows, расположенный в. Git hooks.

после обновления

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

Скрипт Powershell, расположенный в корневой папке проекта (где вы сначала запускаете git init). Powershell переходит в другой репозиторий и вызывает pull, обновляя этот репозиторий.

после update.ps1

Set-Location "E:Websitesmy_site_test"
$env:GIT_DIR = 'E:Websitesmy_site_test.git';
$env:GIT_EXEC_PATH= 'C:Program Files (x86)Git/libexec/git-core';
git pull
мерзавец, PowerShell, githooks,
Похожие вопросы