8

I am trying get a file from a specific commit using gitpython python-module.

I'm able to get the file (with content) from the latest commit. However I want to get the file (with content) from a specific previous git commit.

repo = git.Repo("G:\myrespo")
obj = repo.git.get_object_data(x.a_blob)

How can I get it ?

1
  • Have you found a way to do this? I'm facing the same problem:^ Commented Nov 8, 2018 at 7:57

1 Answer 1

11

Here's one way to get a file from a specific commit:

import io

repo = Repo('G:\myrespo')

# Retrieve specific commit from repo
# The revision specifier must be one of the specifiers defined in
# https://git-scm.com/docs/git-rev-parse#_specifying_revisions
# In this example, we'll use a SHA-1

commit = repo.commit('7ba4789adf73c0555fbffad3b62d61e411c3b1af')

# Retrieve a file from the commit tree
# You can use the path helper to get the file by filename 

targetfile = commit.tree / 'some_file.md'

# Retrieve contents of targetfile

with io.BytesIO(targetfile.data_stream.read()) as f:
    print(f.read().decode('utf-8'))

targetfile is a standard GitPython Object:

>>> targetfile.name
'some_file.md'
>>> targetfile.type
'blob'
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.