浏览代码

Extend the repository documentation a bit.

Jelmer Vernooij 13 年之前
父节点
当前提交
be862751b8
共有 1 个文件被更改,包括 71 次插入1 次删除
  1. 71 1
      docs/tutorial/repo.txt

+ 71 - 1
docs/tutorial/repo.txt

@@ -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