如何使用Python检查Git Repo是否有未提交的更改

时间:2015-07-21 13:27:57

标签: python git

我对git很新,但我尝试使用python检查git存储库是否有任何未提交的更改。无论我尝试使用python运行什么命令,我似乎都得到了相同的错误。这是我的代码:

std::string get_DataChunk(std::string game_id, int chunkId){

std::ifstream read;

std::string dummy;
std::string command;
std::string result = "";

command = "/tmp/" + game_id + "/" + std::to_string(chunkId) + "/game_dataChunk.bin";

read.open(command.c_str(), std::ios::in | std::ios::binary);

while(getline(read,dummy)){

    result = result + dummy;

}

read.close();

return result;

}

一切都按预期工作,直到我运行最后一行,即出现错误时:

from git import *
repo = Repo("path\to\my\repo")
lastCommit = repo.head.commit.committed_date
uncommitted = repo.is_dirty()

我也尝试过其他命令,但我得到同样的错误。例如,Traceback (most recent call last): . . . raise GitCommandNotFound: [Error 2] The system cannot find the file specified 。我还尝试运行repo.index.diff(repo.head.commit)repo.index.diff(None),这会产生同样的错误。我真正想要的是基本上为我名为repo.index.diff('HEAD')的存储库运行$ git status。我在Windows 7上使用Python 2.7.9和gitpython 1.0.1。任何帮助都将不胜感激!

3 个答案:

答案 0 :(得分:1)

在您的特定示例中(仅用于说明目的),您的"path\to\my\repo"将被理解为'path\to\\my\repo'。在路径的组件之间使用双反斜杠("path\\to\\my\\repo")。 \t被理解为选项卡,\r被理解为回车符。或者,您可以将r放在路径前面,如下所示:r"path\to\my\repo"

答案 1 :(得分:1)

看起来GitPython无法找到git.exe。

尝试设置环境变量 GIT_PYTHON_GIT_EXECUTABLE 。 它最有可能是" C:\ Program Files(x86)\ Git \ bin \ git.exe"如果使用 Git for Windows 并使用默认值

在命令行(cmd.exe)

set GIT_PYTHON_GIT_EXECUTABLE="C:\Program Files (x86)\Git\bin\git.exe"

答案 2 :(得分:1)

感谢您的建议,但实施它们并没有真正解决我的问题。我确实使用以下代码开发了一个解决方法:

def statusChecker(repo, lastCommit):
    uncommittedFiles = []
    files = os.listdir(repo)
    for file in files:
        if os.path.getmtime(repo + "\\\\" + file) > lastCommit:
            uncommittedFiles.append(file)
    uncommittedFiles = uncommittedFiles.remove(".git")
    return uncommittedFiles

只要对lastCommit = repo.head.commit.committed_date参数使用lastCommit之类的内容,这应该可以正常使用。