我对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。任何帮助都将不胜感激!
答案 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
之类的内容,这应该可以正常使用。