summaryrefslogtreecommitdiff
path: root/Documentation/tutorial.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/tutorial.txt')
-rw-r--r--Documentation/tutorial.txt404
1 files changed, 0 insertions, 404 deletions
diff --git a/Documentation/tutorial.txt b/Documentation/tutorial.txt
deleted file mode 100644
index fa79b016c7..0000000000
--- a/Documentation/tutorial.txt
+++ /dev/null
@@ -1,404 +0,0 @@
-A tutorial introduction to git
-==============================
-
-This tutorial explains how to import a new project into git, make
-changes to it, and share changes with other developers.
-
-First, note that you can get documentation for a command such as "git
-diff" with:
-
-------------------------------------------------
-$ man git-diff
-------------------------------------------------
-
-Importing a new project
------------------------
-
-Assume you have a tarball project.tar.gz with your initial work. You
-can place it under git revision control as follows.
-
-------------------------------------------------
-$ tar xzf project.tar.gz
-$ cd project
-$ git init-db
-------------------------------------------------
-
-Git will reply
-
-------------------------------------------------
-defaulting to local storage area
-------------------------------------------------
-
-You've now initialized the working directory--you may notice a new
-directory created, named ".git". Tell git that you want it to track
-every file under the current directory with
-
-------------------------------------------------
-$ git add .
-------------------------------------------------
-
-Finally,
-
-------------------------------------------------
-$ git commit -a
-------------------------------------------------
-
-will prompt you for a commit message, then record the current state
-of all the files to the repository.
-
-Try modifying some files, then run
-
-------------------------------------------------
-$ git diff
-------------------------------------------------
-
-to review your changes. When you're done,
-
-------------------------------------------------
-$ git commit -a
-------------------------------------------------
-
-will again prompt your for a message describing the change, and then
-record the new versions of the modified files.
-
-A note on commit messages: Though not required, it's a good idea to
-begin the commit message with a single short (less than 50 character)
-line summarizing the change, followed by a blank line and then a more
-thorough description. Tools that turn commits into email, for
-example, use the first line on the Subject line and the rest of the
-commit in the body.
-
-To add a new file, first create the file, then
-
-------------------------------------------------
-$ git add path/to/new/file
-------------------------------------------------
-
-then commit as usual. No special command is required when removing a
-file; just remove it, then commit.
-
-At any point you can view the history of your changes using
-
-------------------------------------------------
-$ git whatchanged
-------------------------------------------------
-
-If you also want to see complete diffs at each step, use
-
-------------------------------------------------
-$ git whatchanged -p
-------------------------------------------------
-
-Managing branches
------------------
-
-A single git repository can maintain multiple branches of
-development. To create a new branch named "experimental", use
-
-------------------------------------------------
-$ git branch experimental
-------------------------------------------------
-
-If you now run
-
-------------------------------------------------
-$ git branch
-------------------------------------------------
-
-you'll get a list of all existing branches:
-
-------------------------------------------------
- experimental
-* master
-------------------------------------------------
-
-The "experimental" branch is the one you just created, and the
-"master" branch is a default branch that was created for you
-automatically. The asterisk marks the branch you are currently on;
-type
-
-------------------------------------------------
-$ git checkout experimental
-------------------------------------------------
-
-to switch to the experimental branch. Now edit a file, commit the
-change, and switch back to the master branch:
-
-------------------------------------------------
-(edit file)
-$ git commit -a
-$ git checkout master
-------------------------------------------------
-
-Check that the change you made is no longer visible, since it was
-made on the experimental branch and you're back on the master branch.
-
-You can make a different change on the master branch:
-
-------------------------------------------------
-(edit file)
-$ git commit -a
-------------------------------------------------
-
-at this point the two branches have diverged, with different changes
-made in each. To merge the changes made in the two branches, run
-
-------------------------------------------------
-$ git pull . experimental
-------------------------------------------------
-
-If the changes don't conflict, you're done. If there are conflicts,
-markers will be left in the problematic files showing the conflict;
-
-------------------------------------------------
-$ git diff
-------------------------------------------------
-
-will show this. Once you've edited the files to resolve the
-conflicts,
-
-------------------------------------------------
-$ git commit -a
-------------------------------------------------
-
-will commit the result of the merge. Finally,
-
-------------------------------------------------
-$ gitk
-------------------------------------------------
-
-will show a nice graphical representation of the resulting history.
-
-If you develop on a branch crazy-idea, then regret it, you can always
-delete the branch with
-
--------------------------------------
-$ git branch -D crazy-idea
--------------------------------------
-
-Branches are cheap and easy, so this is a good way to try something
-out.
-
-Using git for collaboration
----------------------------
-
-Suppose that Alice has started a new project with a git repository in
-/home/alice/project, and that Bob, who has a home directory on the
-same machine, wants to contribute.
-
-Bob begins with:
-
-------------------------------------------------
-$ git clone /home/alice/project myrepo
-------------------------------------------------
-
-This creates a new directory "myrepo" containing a clone of Alice's
-repository. The clone is on an equal footing with the original
-project, posessing its own copy of the original project's history.
-
-Bob then makes some changes and commits them:
-
-------------------------------------------------
-(edit files)
-$ git commit -a
-(repeat as necessary)
-------------------------------------------------
-
-When he's ready, he tells Alice to pull changes from the repository
-at /home/bob/myrepo. She does this with:
-
-------------------------------------------------
-$ cd /home/alice/project
-$ git pull /home/bob/myrepo
-------------------------------------------------
-
-This actually pulls changes from the branch in Bob's repository named
-"master". Alice could request a different branch by adding the name
-of the branch to the end of the git pull command line.
-
-This merges Bob's changes into her repository; "git whatchanged" will
-now show the new commits. If Alice has made her own changes in the
-meantime, then Bob's changes will be merged in, and she will need to
-manually fix any conflicts.
-
-A more cautious Alice might wish to examine Bob's changes before
-pulling them. She can do this by creating a temporary branch just
-for the purpose of studying Bob's changes:
-
--------------------------------------
-$ git fetch /home/bob/myrepo master:bob-incoming
--------------------------------------
-
-which fetches the changes from Bob's master branch into a new branch
-named bob-incoming. (Unlike git pull, git fetch just fetches a copy
-of Bob's line of development without doing any merging). Then
-
--------------------------------------
-$ git whatchanged -p master..bob-incoming
--------------------------------------
-
-shows a list of all the changes that Bob made since he branched from
-Alice's master branch.
-
-After examing those changes, and possibly fixing things, Alice can
-pull the changes into her master branch:
-
--------------------------------------
-$ git checkout master
-$ git pull . bob-incoming
--------------------------------------
-
-The last command is a pull from the "bob-incoming" branch in Alice's
-own repository.
-
-Later, Bob can update his repo with Alice's latest changes using
-
--------------------------------------
-$ git pull
--------------------------------------
-
-Note that he doesn't need to give the path to Alice's repository;
-when Bob cloned Alice's repository, git stored the location of her
-repository in the file .git/remotes/origin, and that location is used
-as the default for pulls.
-
-Bob may also notice a branch in his repository that he didn't create:
-
--------------------------------------
-$ git branch
-* master
- origin
--------------------------------------
-
-The "origin" branch, which was created automatically by "git clone",
-is a pristine copy of Alice's master branch; Bob should never commit
-to it.
-
-If Bob later decides to work from a different host, he can still
-perform clones and pulls using the ssh protocol:
-
--------------------------------------
-$ git clone alice.org:/home/alice/project myrepo
--------------------------------------
-
-Alternatively, git has a native protocol, or can use rsync or http;
-see gitlink:git-pull[1] for details.
-
-Git can also be used in a CVS-like mode, with a central repository
-that various users push changes to; see gitlink:git-push[1] and
-link:cvs-migration.html[git for CVS users].
-
-Keeping track of history
-------------------------
-
-Git history is represented as a series of interrelated commits. The
-most recent commit in the currently checked-out branch can always be
-referred to as HEAD, and the "parent" of any commit can always be
-referred to by appending a caret, "^", to the end of the name of the
-commit. So, for example,
-
--------------------------------------
-git diff HEAD^ HEAD
--------------------------------------
-
-shows the difference between the most-recently checked-in state of
-the tree and the previous state, and
-
--------------------------------------
-git diff HEAD^^ HEAD^
--------------------------------------
-
-shows the difference between that previous state and the state two
-commits ago. Also, HEAD~5 can be used as a shorthand for HEAD{caret}{caret}{caret}{caret}{caret},
-and more generally HEAD~n can refer to the nth previous commit.
-Commits representing merges have more than one parent, and you can
-specify which parent to follow in that case; see
-gitlink:git-rev-parse[1].
-
-The name of a branch can also be used to refer to the most recent
-commit on that branch; so you can also say things like
-
--------------------------------------
-git diff HEAD experimental
--------------------------------------
-
-to see the difference between the most-recently committed tree in
-the current branch and the most-recently committed tree in the
-experimental branch.
-
-But you may find it more useful to see the list of commits made in
-the experimental branch but not in the current branch, and
-
--------------------------------------
-git whatchanged HEAD..experimental
--------------------------------------
-
-will do that, just as
-
--------------------------------------
-git whatchanged experimental..HEAD
--------------------------------------
-
-will show the list of commits made on the HEAD but not included in
-experimental.
-
-You can also give commits convenient names of your own: after running
-
--------------------------------------
-$ git-tag v2.5 HEAD^^
--------------------------------------
-
-you can refer to HEAD^^ by the name "v2.5". If you intend to share
-this name with other people (for example, to identify a release
-version), you should create a "tag" object, and perhaps sign it; see
-gitlink:git-tag[1] for details.
-
-You can revisit the old state of a tree, and make further
-modifications if you wish, using git branch: the command
-
--------------------------------------
-$ git branch stable-release v2.5
--------------------------------------
-
-will create a new branch named "stable-release" starting from the
-commit which you tagged with the name v2.5.
-
-You can reset the state of any branch to an earlier commit at any
-time with
-
--------------------------------------
-$ git reset --hard v2.5
--------------------------------------
-
-This will remove all later commits from this branch and reset the
-working tree to the state it had when the given commit was made. If
-this branch is the only branch containing the later commits, those
-later changes will be lost. Don't use "git reset" on a
-publicly-visible branch that other developers pull from, as git will
-be confused by history that disappears in this way.
-
-Next Steps
-----------
-
-Some good commands to explore next:
-
- * gitlink:git-diff[1]: This flexible command does much more than
- we've seen in the few examples above.
-
- * gitlink:git-format-patch[1], gitlink:git-am[1]: These convert
- series of git commits into emailed patches, and vice versa,
- useful for projects such as the linux kernel which rely heavily
- on emailed patches.
-
- * gitlink:git-bisect[1]: When there is a regression in your
- project, one way to track down the bug is by searching through
- the history to find the exact commit that's to blame. Git bisect
- can help you perform a binary search for that commit. It is
- smart enough to perform a close-to-optimal search even in the
- case of complex non-linear history with lots of merged branches.
-
-Other good starting points include link:everyday.html[Everday GIT
-with 20 Commands Or So] and link:cvs-migration.html[git for CVS
-users]. Also, link:core-tutorial.html[A short git tutorial] gives an
-introduction to lower-level git commands for advanced users and
-developers.