提交前钩子git错误

12
我正在尝试使用Python执行一个pre-commit Git钩子,以检查文件的行长度是否小于80个字符。但是我遇到了“没有这样的文件/目录”错误。我在Fedora上并设置了#!usr/bin/python。希望能得到帮助。
#!/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())

请向我们展示您正在运行的git命令以及您收到的精确错误消息。 - Robᵩ
我运行git commit命令时,出现了错误信息“没有这样的文件或目录”。我运行git commit命令时出现错误:无法运行.git/hooks/pre-commit:没有这样的文件或目录。 - user2793781
尝试直接运行 pre-commit 文件:$ ./git/hooks/pre-commit。你会得到一个错误信息吗? - Robᵩ
1
请复制粘贴准确、完整的错误信息。不要总结,不要重新输入,只需复制粘贴即可。 - Robᵩ
1
  1. Python是否已安装在您的PATH路径中?尝试输入“which python”并确认它是否打印出“/usr/bin/python”。
  2. 您的pre-commit文件是否可能是以DOS换行符而不是Unix换行符保存的?尝试输入“file .git/hooks/pre-commit”并查看它是否显示“CRLF换行符”。
- Robᵩ
显示剩余3条评论
2个回答

31

你的 pre-commit 文件中有多余的回车符。如果您在 Windows 上编辑该文件并将其复制到 Linux 计算机上,则可能会出现此问题。

尝试以下命令:

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

然后重新运行您的git命令。


9

删除'\r'最简单的方法是:

dos2unix .git/hooks/pre-commit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接