GitPython是否可以在没有签出的情况下从指定的提交中获取文件

gzc*_*gzc 5 python gitpython

我想用GitPython从指定的提交中复制文件.我到目前为止来到这里:

import git
git = git.Git(REPO_PATH)
git.checkout(COMMIT_HEX_SHA)
fo = open(REPO_PATH + "/foo.txt", "r")
str = fo.read(10);
fo.close()
Run Code Online (Sandbox Code Playgroud)

有用.但是checkout更改HEAD和更改文件.是否可以在没有指定提交的情况下复制文件或读取文件checkout

Mic*_*ael 1

Byron 的评论确实为您提供了一个流,但请注意:如果您习惯使用with-as构造或.readlines()读取流,请不要在这里尝试它们。追求简单.read()

git.Repo().commit(COMMIT_HEX_SHA).tree['subdir/somefile.ext'].data_stream.read()
Run Code Online (Sandbox Code Playgroud)

如果您不需要尾随换行符,您也可以直接委托给git show如下所示

git.Repo().git.show(f'{COMMIT_HEX_SHA}:{file_with_path}')
Run Code Online (Sandbox Code Playgroud)