Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

gitpython-developers/GitPython

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 <mtrier@gmail.com>">
	
	>>> head.authored_date
	(2008, 5, 7, 5, 0, 56, 2, 128, 0)
	
	>>> head.committer
	<GitPython.Actor "Michael Trier <mtrier@gmail.com>">
	
	>>> 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.
Morty Proxy This is a proxified and sanitized view of the page, visit original site.