GitPython是否可以在没有签出的情况下从指定的提交中获取文件
GitPython Is it possible to get file from specified commit without checkout
我想使用 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
的情况下从指定的提交中复制文件或读取文件?
确实给你一个流,但要注意:如果你习惯使用 with
-as
构造或 .readlines()
阅读流,不要在这里尝试。选择普通 .read()
.
git.Repo().commit(COMMIT_HEX_SHA).tree['subdir/somefile.ext'].data_stream.read()
如果你不想要结尾的换行符,你也可以直接委托给git show
,比如shown here:
git.Repo().git.show(f'{COMMIT_HEX_SHA}:{file_with_path}')
我建议您使用 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)
我想使用 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
的情况下从指定的提交中复制文件或读取文件?
with
-as
构造或 .readlines()
阅读流,不要在这里尝试。选择普通 .read()
.
git.Repo().commit(COMMIT_HEX_SHA).tree['subdir/somefile.ext'].data_stream.read()
如果你不想要结尾的换行符,你也可以直接委托给git show
,比如shown here:
git.Repo().git.show(f'{COMMIT_HEX_SHA}:{file_with_path}')
我建议您使用 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)