|
@@ -1,6 +1,6 @@
|
|
|
.. _tutorial-repo:
|
|
|
|
|
|
-The Repository
|
|
|
+The repository
|
|
|
==============
|
|
|
|
|
|
After this introduction, let's start directly with code::
|
|
@@ -18,6 +18,9 @@ repositories:
|
|
|
contains itself the "branches", "hooks"... folders. These are used for
|
|
|
published repositories (mirrors). They do not have a working tree.
|
|
|
|
|
|
+Creating a repository
|
|
|
+---------------------
|
|
|
+
|
|
|
Let's create a folder and turn it into a repository, like ``git init`` would::
|
|
|
|
|
|
>>> from os import mkdir
|
|
@@ -28,3 +31,70 @@ Let's create a folder and turn it into a repository, like ``git init`` would::
|
|
|
|
|
|
You can already look a the structure of the "myrepo/.git" folder, though it
|
|
|
is mostly empty for now.
|
|
|
+
|
|
|
+Opening an existing repository
|
|
|
+------------------------------
|
|
|
+
|
|
|
+To reopen an existing repository, simply pass its path to the constructor
|
|
|
+of ``Repo``::
|
|
|
+
|
|
|
+ >>> repo = Repo("myrepo")
|
|
|
+ >>> repo
|
|
|
+ <Repo at 'myrepo'>
|
|
|
+
|
|
|
+Opening the index
|
|
|
+-----------------
|
|
|
+
|
|
|
+The index is used as a staging area. Once you do a commit,
|
|
|
+the files tracked in the index will be recorded as the contents of the new
|
|
|
+commit. As mentioned earlier, only non-bare repositories have a working tree,
|
|
|
+so only non-bare repositories will have an index, too. To open the index, simply
|
|
|
+call::
|
|
|
+
|
|
|
+ >>> index = repo.open_index()
|
|
|
+ >>> index
|
|
|
+ Index('myrepo/.git/index')
|
|
|
+
|
|
|
+Since the repository was just created, the index will be empty::
|
|
|
+
|
|
|
+ >>> list(index)
|
|
|
+ []
|
|
|
+
|
|
|
+Staging new files
|
|
|
+-----------------
|
|
|
+
|
|
|
+The repository allows "staging" files. Only files can be staged - directories
|
|
|
+aren't tracked explicitly by git. Let's create a simple text file and stage it::
|
|
|
+
|
|
|
+ >>> f = open('myrepo/foo', 'w')
|
|
|
+ >>> f.write("monty")
|
|
|
+ >>> f.close()
|
|
|
+
|
|
|
+ >>> repo.stage(["foo"])
|
|
|
+
|
|
|
+It will now show up in the index::
|
|
|
+
|
|
|
+ >>> list(repo.open_index())
|
|
|
+ ['foo']
|
|
|
+
|
|
|
+
|
|
|
+Creating new commits
|
|
|
+--------------------
|
|
|
+
|
|
|
+Now that we have staged a change, we can commit it. The easiest way to
|
|
|
+do this is by using ``Repo.do_commit``. It is also possible to manipulate
|
|
|
+the lower-level objects involved in this, but we'll leave that for a
|
|
|
+separate chapter of the tutorial.
|
|
|
+
|
|
|
+To create a simple commit on the current branch, it is only necessary
|
|
|
+to specify the message. The committer and author will be retrieved from the
|
|
|
+repository configuration or global configuration if they are not specified::
|
|
|
+
|
|
|
+ >>> commit_id = repo.do_commit(
|
|
|
+ ... "The first commit", committer="Jelmer Vernooij <jelmer@samba.org>")
|
|
|
+
|
|
|
+``do_commit`` returns the SHA1 of the commit. Since the commit was to the
|
|
|
+default branch, the repository's head will now be set to that commit::
|
|
|
+
|
|
|
+ >>> repo.head() == commit_id
|
|
|
+ True
|