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

时间:2015-11-22 09:27:51

标签: 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()

有效。但checkout更改了HEAD并更改了文件。是否可以在没有checkout的情况下从指定的提交中复制文件或读取文件?

2 个答案:

答案 0 :(得分:0)

Byron's comment确实确实为您提供了一个流,但是请注意:如果您习惯使用with.readlines()来读取流,请不要尝试他们在这里。选择简单的.read()

git.Repo().commit(COMMIT_HEX_SHA).tree['subdir/somefile.ext'].data_stream.read()

如果您不希望结尾的换行符,也可以像shown here一样直接委派给git show

git.Repo().git.show('{}:{}'.format(COMMIT_HEX_SHA, 'subdir/somefile.ext'))

答案 1 :(得分:0)

我建议您使用 PyDriller (它在内部使用GitPython)。使用起来更加简单:

for commit in RepositoryMining("path_to_repo", single="commitHASH").traverse_commits():
    for modified_file in commit.modifications:
        # do whatever you want with the source code
        print(modified_file.source_code)