如何运行virtualenv python脚本作为git pre-commit钩子

Joa*_*ela 7 git virtualenv

这是我的预提交脚本:

#!/bin/bash
for f in .git/hooks/pre-commit.d/*; do
    if [ -x "$f" ]; then
        if ! "$f"; then
            echo "DID NOT COMMIT YOUR CHANGES!";
            exit 1
        fi
    fi
done
Run Code Online (Sandbox Code Playgroud)

pre-commit.d中的一个可执行文件是一个python脚本(pre-commit-pylint.py),它以:

#!/usr/bin/env python
import pylint
Run Code Online (Sandbox Code Playgroud)

pylint安装在我的virtualenv上.我的问题是混帐运行预提交前面加上/usr/libexec/git-core:/usr/bin$PATH,所以即使我的virtualenv被激活pre-commit.d/pre-commit-pylint.py脚本系统运行/usr/bin/python(而不是与蟒蛇的virtualenv运行).

我想拥有与不使用virtualenv的开发人员兼容的钩子.有没有办法透明地运行我的python脚本与virtualenv(即,与使用他们的系统python的开发人员保持兼容)?

Rob*_*ers 7

您可以检查 $VIRTUAL_ENV 变量的预提交脚本,并将其相应地添加到 $PATH 中:

#!/bin/bash

if [ -n $VIRTUAL_ENV ]; then
    PATH=$VIRTUAL_ENV/bin:$PATH
fi

for f in .git/hooks/pre-commit.d/*; do
    if [ -x "$f" ]; then
        if ! "$f"; then
            echo "DID NOT COMMIT YOUR CHANGES!";
            exit 1
        fi
    fi
done
Run Code Online (Sandbox Code Playgroud)