2013-09-19 2 views
3

Я пытаюсь выполнить pre commit git hook на python, чтобы проверить, имеют ли файлы длины строк менее 80 символов. Однако я не вижу такой ошибки файла/каталога. я нахожусь на фетровой шляпе и установить #! USR/бен/python.help будут оцененыPre Commit hook git error

#!/usr/bin/env python 
#-*- mode: python -*- 

from subprocess import Popen, PIPE 
import sys 

def run(command): 
    p = Popen(command.split(), stdout=PIPE, stderr=PIPE) 
    p.wait() 
    return p.returncode, p.stdout.read().strip().split(), p.stderr.read() 


def precommit(): 
    _, files_modified, _= run("git diff-index --name-only HEAD") 
    i=1 
    for fname in files_modified: 

    file = open(fname) 
    while i==1: 
     line = file.readline() 
     if not line: 
      break 
     elif len(line)>80: 
      print("Commit failed: Line greater than 80 characters") 
      return 1 
    return 0 
sys.exit(precommit()) 
+0

Покажите нам 'git' команду вы работаете и ** ** точное сообщение об ошибке вы получите. –

+0

Я запускаю команду git commit, и я получаю сообщение об ошибке такого файла или каталога. Я запускаю команду git commit command: не могу выполнить .git/hooks/pre-commit: Нет такого файла или каталога – user2793781

+0

Попробуйте запустить pre- commit' напрямую: '$./git/hooks/pre-commit'. Вы получили сообщение об ошибке? –

ответ

14

Ваш перед фиксацией файл имеет лишние символы возврата каретки в нем. Это может произойти, если вы отредактируете файл в Windows и скопируете файл на компьютер Linux.

Попробуйте следующие команды:

cp .git/hooks/pre-commit /tmp/pre-commit 
tr -d '\r' < /tmp/pre-commit > .git/hooks/pre-commit 

А затем перезапустите команду git.

+0

Спасибо миллиону Робу. Теперь он отлично работал – user2793781

+0

Добро пожаловать. Если вы удовлетворены, вы должны принять мой ответ. Нажмите галочку рядом с моим ответом. –

2

Самый простой способ для удаления «\ г»:

dos2unix .git/hooks/pre-commit 
Смежные вопросы