6

我想用 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

4

2 回答 2

1

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

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

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

git.Repo().git.show(f'{COMMIT_HEX_SHA}:{file_with_path}')
于 2018-12-19T17:09:06.010 回答
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)
于 2019-02-08T11:16:35.763 回答