- Sponsor
-
Notifications
You must be signed in to change notification settings - Fork 933
GitPython is a python library used to interact with Git repositories.
License
gitpython-developers/GitPython
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
========== GitPython ========== GitPython is a python library used to interact with Git repositories. GitPython is a port of the grit_ library in Ruby created by Tom Preston-Werner and Chris Wanstrath. .. _grit: http://grit.rubyforge.org The ``method_missing`` stuff was `taken from this blog post`_ .. _taken from this blog post: http://blog.iffy.us/?p=43 REQUIREMENTS ============ * Git_ tested with 1.5.3.7 * `Python Nose`_ - used for running the tests .. _Git: http://git.or.cz/ .. _Python Nose: http://code.google.com/p/python-nose/ INSTALL ======= python setup.py install SOURCE ====== GitPython's git repo is available on Gitorious, which can be browsed at: http://gitorious.org/projects/git-python and cloned from: git://gitorious.org/projects/git-python.git USAGE ===== GitPython provides object model access to your git repository. Once you have created a repository object, you can traverse it to find parent commit(s), trees, blobs, etc. Initialize a Repo object ************************ The first step is to create a `Repo` object to represent your repository. >>> from git_python import * >>> repo = Repo.new("/Users/mtrier/Development/git-python") In the above example, the directory `/Users/mtrier/Development/git-python` is my working repo and contains the `.git` directory. You can also initialize GitPython with a bare repo. >>> repo = Repo.init_bare("/var/git/git-python.git") Getting a list of commits ************************* From the `Repo` object, you can get a list of `Commit` objects. >>> repo.commits() [<GitPython.Commit "207c0c4418115df0d30820ab1a9acd2ea4bf4431">, <GitPython.Commit "a91c45eee0b41bf3cdaad3418ca3850664c4a4b4">, <GitPython.Commit "e17c7e11aed9e94d2159e549a99b966912ce1091">, <GitPython.Commit "bd795df2d0e07d10e0298670005c0e9d9a5ed867">] Called without arguments, `Repo.commits` returns a list of up to ten commits reachable by the master branch (starting at the latest commit). You can ask for commits beginning at a different branch, commit, tag, etc. >>> repo.commits('mybranch') >>> repo.commits('40d3057d09a7a4d61059bca9dca5ae698de58cbe') >>> repo.commits('v0.1') You can specify the maximum number of commits to return. >>> repo.commits('master', 100) If you need paging, you can specify a number of commits to skip. >>> repo.commits('master', 10, 20) The above will return commits 21-30 from the commit list. The Commit object ***************** Commit objects contain information about a specific commit. >>> head = repo.commits()[0] >>> head.id '207c0c4418115df0d30820ab1a9acd2ea4bf4431' >>> head.parents [<GitPython.Commit "a91c45eee0b41bf3cdaad3418ca3850664c4a4b4">] >>> head.tree <GitPython.Tree "563413aedbeda425d8d9dcbb744247d0c3e8a0ac"> >>> head.author <GitPython.Actor "Michael Trier <[email protected]>"> >>> head.authored_date (2008, 5, 7, 5, 0, 56, 2, 128, 0) >>> head.committer <GitPython.Actor "Michael Trier <[email protected]>"> >>> head.committed_date (2008, 5, 7, 5, 0, 56, 2, 128, 0) >>> head.message 'cleaned up a lot of test information. Fixed escaping so it works with subprocess.' You can traverse a commit's ancestry by chaining calls to ``parents``. >>> repo.commits()[0].parents[0].parents[0].parents[0] The above corresponds to ``master^^^`` or ``master~3`` in git parlance. The Tree object *************** A tree recorda pointers to the contents of a directory. Let's say you want the root tree of the latest commit on the master branch. >>> tree = repo.commits()[0].tree <GitPython.Tree "a006b5b1a8115185a228b7514cdcd46fed90dc92"> >>> tree.id 'a006b5b1a8115185a228b7514cdcd46fed90dc92' Once you have a tree, you can get the contents. >>> contents = tree.contents [<GitPython.Blob "6a91a439ea968bf2f5ce8bb1cd8ddf5bf2cad6c7">, <GitPython.Blob "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391">, <GitPython.Tree "eaa0090ec96b054e425603480519e7cf587adfc3">, <GitPython.Blob "980e72ae16b5378009ba5dfd6772b59fe7ccd2df">] This tree contains three ``Blob`` objects and one ``Tree`` object. The trees are subdirectories and the blobs are files. Trees below the root have additional attributes. >>> contents = tree.contents[-2] <GitPython.Tree "e5445b9db4a9f08d5b4de4e29e61dffda2f386ba"> >>> contents.name 'test' >>> contents.mode '040000' There is a convenience method that allows you to get a named sub-object from a tree. >>> tree/"lib" <GitPython.Tree "c1c7214dde86f76bc3e18806ac1f47c38b2b7a30"> You can also get a tree directly from the repo if you know its name. >>> repo.tree() <GitPython.Tree "master"> >>> repo.tree("c1c7214dde86f76bc3e18806ac1f47c38b2b7a30") <GitPython.Tree "c1c7214dde86f76bc3e18806ac1f47c38b2b7a30"> The Blob object *************** A blob represents a file. Trees often contain blobs. >>> blob = tree.contents[-1] <GitPython.Blob "b19574431a073333ea09346eafd64e7b1908ef49"> A blob has certain attributes. >>> blob.name 'urls.py' >>> blob.mode '100644' >>> blob.mime_type 'text/x-python' >>> len(blob) 415 You can get the data of a blob as a string. >>> blob.data "from django.conf.urls.defaults import *\nfrom django.conf..." You can also get a blob directly from the repo if you know its name. >>> repo.blob("b19574431a073333ea09346eafd64e7b1908ef49") <GitPython.Blob "b19574431a073333ea09346eafd64e7b1908ef49"> LICENSE ======= New BSD License. See the LICENSE file.
About
GitPython is a python library used to interact with Git repositories.
Topics
Resources
License
Security policy
Stars
Watchers
Forks
Packages 0
No packages published