检查repo是否脏时检测到gitpython错误

时间:2012-12-03 13:04:38

标签: python windows git msysgit gitpython

我在尝试使用gitpython检查存储库是否脏,即未提交更改为已跟踪文件时收到错误:

import git
repo = git.Repo('')
print repo.is_dirty()

错误:

Traceback (most recent call last):
  File "C:\dev\my_prog\test.py", line 8, in <module>
    print repo.is_dirty()
  File "C:\Python27\lib\site-packages\gitpython-0.3.2.rc1-py2.7.egg\git\repo\base.py", line 502, in is_dirty
    len(self.git.diff('HEAD', '--cached', *default_args)):
  File "C:\Python27\lib\site-packages\gitpython-0.3.2.rc1-py2.7.egg\git\cmd.py", line 227, in <lambda>
    return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
  File "C:\Python27\lib\site-packages\gitpython-0.3.2.rc1-py2.7.egg\git\cmd.py", line 456, in _call_process
    return self.execute(call, **_kwargs)
  File "C:\Python27\lib\site-packages\gitpython-0.3.2.rc1-py2.7.egg\git\cmd.py", line 377, in execute
    raise GitCommandError(command, status, stderr_value)
git.exc.GitCommandError: 'git diff HEAD --cached --abbrev=40 --full-index --raw' returned exit status 1:

为什么?可能是什么问题?
请注意我正在使用msysgit

在Windows 7上工作

3 个答案:

答案 0 :(得分:2)

考虑到history of diff.py(没有太大变化),“git diff HEAD --cached ...”命令可能因为某些原因在您的回购中失败。
换句话说,它可能与您的特定本地仓库相关联,而不是repo.is_dirty()方法中的实施问题。

调试它的最可靠方法是直接执行它并查看错误消息是什么。

答案 1 :(得分:1)

尝试更新gitpython和msysgit。 使用GitPython0.3.2和msysgit 1.7.9时 - &gt; repo.is_dirty()返回错误。 使用GitPython 0.3.2和msysgit 1.9.1时 - &gt; repo.is_dirty()返回有效值。 希望它有所帮助。

答案 2 :(得分:0)

在我的情况下,我尝试在命令行中运行git,得到更具体的错误:

>git diff HEAD --cached --abbrev=40 --full-index --raw
cannot spawn less: No such file or directory

我解决了将msysgit的bin文件夹放在路径中的问题:

>set PATH=C:\Program Files\Git\mingw64\bin;%PATH%

请注意,我还设置了变量GIT_PYTHON_GIT_EXECUTABLE https://github.com/gitpython-developers/GitPython/issues/26,但我认为这与此错误无关