2012-12-03 21 views
2

我收到一个错误,同时试图使用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: 

怎么回事?可能是什么问题呢?
通知我工作在Windows 7 msysgit

回答

2

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

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

+0

这是在我的情况下的情况:没有初始提交基本上 –

1

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

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,但我不认为它是相对于这个错误