Skip to content

Commit 33ebe7a

Browse files
committed
initial project
0 parents  commit 33ebe7a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+5703
-0
lines changed

Diff for: CHANGES

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
=======
2+
CHANGES
3+
=======
4+
5+
0.1.0
6+
=====
7+
initial release

Diff for: LICENSE

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
Copyright (c) 2008, Michael Trier
2+
All rights reserved.
3+
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions
6+
are met:
7+
8+
* Redistributions of source code must retain the above copyright
9+
notice, this list of conditions and the following disclaimer.
10+
11+
* Redistributions in binary form must reproduce the above copyright
12+
notice, this list of conditions and the following disclaimer in the
13+
documentation and/or other materials provided with the distribution.
14+
15+
* Neither the name of the GitPython project nor the names of
16+
its contributors may be used to endorse or promote products derived
17+
from this software without specific prior written permission.
18+
19+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23+
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
25+
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30+

Diff for: MANIFEST.in

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include doc/*.html
2+
include doc/*.css

Diff for: README

+212
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
==========
2+
GitPython
3+
==========
4+
5+
GitPython is a python library used to interact with Git repositories.
6+
7+
GitPython is a port of the grit_ library in Ruby created by
8+
Tom Preston-Werner and Chris Wanstrath.
9+
10+
.. _grit: http://grit.rubyforge.org
11+
12+
The ``method_missing`` stuff was `taken from this blog post`_
13+
14+
.. _taken from this blog post: http://blog.iffy.us/?p=43
15+
16+
REQUIREMENTS
17+
============
18+
19+
* Git_ tested with 1.5.3.7
20+
* `Python Nose`_ - used for running the tests
21+
22+
.. _Git: http://git.or.cz/
23+
.. _Python Nose: http://code.google.com/p/python-nose/
24+
25+
INSTALL
26+
=======
27+
28+
python setup.py install
29+
30+
SOURCE
31+
======
32+
33+
GitPython's git repo is available on Gitorious, which can be browsed at:
34+
35+
http://gitorious.org/projects/git-python
36+
37+
and cloned from:
38+
39+
git://gitorious.org/projects/git-python.git
40+
41+
USAGE
42+
=====
43+
44+
GitPython provides object model access to your git repository. Once you have
45+
created a repository object, you can traverse it to find parent commit(s),
46+
trees, blobs, etc.
47+
48+
Initialize a Repo object
49+
************************
50+
51+
The first step is to create a `Repo` object to represent your repository.
52+
53+
>>> from git_python import *
54+
>>> repo = Repo.new("/Users/mtrier/Development/git-python")
55+
56+
In the above example, the directory `/Users/mtrier/Development/git-python` is my working
57+
repo and contains the `.git` directory. You can also initialize GitPython with a
58+
bare repo.
59+
60+
>>> repo = Repo.init_bare("/var/git/git-python.git")
61+
62+
Getting a list of commits
63+
*************************
64+
65+
From the `Repo` object, you can get a list of `Commit`
66+
objects.
67+
68+
>>> repo.commits()
69+
[<GitPython.Commit "207c0c4418115df0d30820ab1a9acd2ea4bf4431">,
70+
<GitPython.Commit "a91c45eee0b41bf3cdaad3418ca3850664c4a4b4">,
71+
<GitPython.Commit "e17c7e11aed9e94d2159e549a99b966912ce1091">,
72+
<GitPython.Commit "bd795df2d0e07d10e0298670005c0e9d9a5ed867">]
73+
74+
Called without arguments, `Repo.commits` returns a list of up to ten commits
75+
reachable by the master branch (starting at the latest commit). You can ask
76+
for commits beginning at a different branch, commit, tag, etc.
77+
78+
>>> repo.commits('mybranch')
79+
>>> repo.commits('40d3057d09a7a4d61059bca9dca5ae698de58cbe')
80+
>>> repo.commits('v0.1')
81+
82+
You can specify the maximum number of commits to return.
83+
84+
>>> repo.commits('master', 100)
85+
86+
If you need paging, you can specify a number of commits to skip.
87+
88+
>>> repo.commits('master', 10, 20)
89+
90+
The above will return commits 21-30 from the commit list.
91+
92+
The Commit object
93+
*****************
94+
95+
Commit objects contain information about a specific commit.
96+
97+
>>> head = repo.commits()[0]
98+
99+
>>> head.id
100+
'207c0c4418115df0d30820ab1a9acd2ea4bf4431'
101+
102+
>>> head.parents
103+
[<GitPython.Commit "a91c45eee0b41bf3cdaad3418ca3850664c4a4b4">]
104+
105+
>>> head.tree
106+
<GitPython.Tree "563413aedbeda425d8d9dcbb744247d0c3e8a0ac">
107+
108+
>>> head.author
109+
<GitPython.Actor "Michael Trier <[email protected]>">
110+
111+
>>> head.authored_date
112+
(2008, 5, 7, 5, 0, 56, 2, 128, 0)
113+
114+
>>> head.committer
115+
<GitPython.Actor "Michael Trier <[email protected]>">
116+
117+
>>> head.committed_date
118+
(2008, 5, 7, 5, 0, 56, 2, 128, 0)
119+
120+
>>> head.message
121+
'cleaned up a lot of test information. Fixed escaping so it works with subprocess.'
122+
123+
124+
You can traverse a commit's ancestry by chaining calls to ``parents``.
125+
126+
>>> repo.commits()[0].parents[0].parents[0].parents[0]
127+
128+
The above corresponds to ``master^^^`` or ``master~3`` in git parlance.
129+
130+
The Tree object
131+
***************
132+
133+
A tree recorda pointers to the contents of a directory. Let's say you want
134+
the root tree of the latest commit on the master branch.
135+
136+
>>> tree = repo.commits()[0].tree
137+
<GitPython.Tree "a006b5b1a8115185a228b7514cdcd46fed90dc92">
138+
139+
>>> tree.id
140+
'a006b5b1a8115185a228b7514cdcd46fed90dc92'
141+
142+
Once you have a tree, you can get the contents.
143+
144+
>>> contents = tree.contents
145+
[<GitPython.Blob "6a91a439ea968bf2f5ce8bb1cd8ddf5bf2cad6c7">,
146+
<GitPython.Blob "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391">,
147+
<GitPython.Tree "eaa0090ec96b054e425603480519e7cf587adfc3">,
148+
<GitPython.Blob "980e72ae16b5378009ba5dfd6772b59fe7ccd2df">]
149+
150+
This tree contains three ``Blob`` objects and one ``Tree`` object. The trees are
151+
subdirectories and the blobs are files. Trees below the root have additional
152+
attributes.
153+
154+
>>> contents = tree.contents[-2]
155+
<GitPython.Tree "e5445b9db4a9f08d5b4de4e29e61dffda2f386ba">
156+
157+
>>> contents.name
158+
'test'
159+
160+
>>> contents.mode
161+
'040000'
162+
163+
There is a convenience method that allows you to get a named sub-object
164+
from a tree.
165+
166+
>>> tree/"lib"
167+
<GitPython.Tree "c1c7214dde86f76bc3e18806ac1f47c38b2b7a30">
168+
169+
You can also get a tree directly from the repo if you know its name.
170+
171+
>>> repo.tree()
172+
<GitPython.Tree "master">
173+
174+
>>> repo.tree("c1c7214dde86f76bc3e18806ac1f47c38b2b7a30")
175+
<GitPython.Tree "c1c7214dde86f76bc3e18806ac1f47c38b2b7a30">
176+
177+
The Blob object
178+
***************
179+
180+
A blob represents a file. Trees often contain blobs.
181+
182+
>>> blob = tree.contents[-1]
183+
<GitPython.Blob "b19574431a073333ea09346eafd64e7b1908ef49">
184+
185+
A blob has certain attributes.
186+
187+
>>> blob.name
188+
'urls.py'
189+
190+
>>> blob.mode
191+
'100644'
192+
193+
>>> blob.mime_type
194+
'text/x-python'
195+
196+
>>> len(blob)
197+
415
198+
199+
You can get the data of a blob as a string.
200+
201+
>>> blob.data
202+
"from django.conf.urls.defaults import *\nfrom django.conf..."
203+
204+
You can also get a blob directly from the repo if you know its name.
205+
206+
>>> repo.blob("b19574431a073333ea09346eafd64e7b1908ef49")
207+
<GitPython.Blob "b19574431a073333ea09346eafd64e7b1908ef49">
208+
209+
LICENSE
210+
=======
211+
212+
New BSD License. See the LICENSE file.

Diff for: VERSION

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.1.0

0 commit comments

Comments
 (0)