我在尝试使用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
答案 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,但我认为这与此错误无关