2

我在尝试使用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 上工作

4

3 回答 3

2

考虑到diff.py 的历史(变化不大),“ git diff HEAD --cached ...”命令可能由于某种原因在您的存储库中失败。
换句话说,它可能与您的特定本地存储库相关联,而不是该repo.is_dirty()方法中的实现问题。

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

于 2013-05-27T07:39:18.153 回答
1

尝试更新 gitpython 和 msysgit。使用 GitPython0.3.2 和 msysgit 1.7.9 时 -->repo.is_dirty()返回错误。当使用 GitPython 0.3.2 和 msysgit 1.9.1 -->repo.is_dirty()返回一个有效值。希望能帮助到你。

于 2014-08-29T11:33:06.423 回答
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,但我认为这与此错误无关

于 2016-02-15T15:46:14.970 回答