Adapt tutorial to cygwin and add test case
Lacking reliable symlinks, the instructions in the tutorial did not work in a cygwin setup. Also, a few outputs were not correct. This patch fixes these, and adds a test case which follows the instructions of the tutorial (except git-clone, -fetch and -push, which I have not done yet). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
257380896f
commit
2ae6c70674
@ -52,7 +52,9 @@ your new project. You will now have a `.git` directory, and you can
|
||||
inspect that with `ls`. For your new empty project, it should show you
|
||||
three entries, among other things:
|
||||
|
||||
- a symlink called `HEAD`, pointing to `refs/heads/master`
|
||||
- a symlink called `HEAD`, pointing to `refs/heads/master` (if your
|
||||
platform does not have native symlinks, it is a file containing the
|
||||
line "ref: refs/heads/master")
|
||||
+
|
||||
Don't worry about the fact that the file that the `HEAD` link points to
|
||||
doesn't even exist yet -- you haven't created the commit that will
|
||||
@ -228,6 +230,7 @@ which will spit out
|
||||
|
||||
------------
|
||||
diff --git a/hello b/hello
|
||||
index 557db03..263414f 100644
|
||||
--- a/hello
|
||||
+++ b/hello
|
||||
@@ -1 +1,2 @@
|
||||
@ -290,13 +293,14 @@ also wants to get a commit message
|
||||
on its standard input, and it will write out the resulting object name for the
|
||||
commit to its standard output.
|
||||
|
||||
And this is where we start using the `.git/HEAD` file. The `HEAD` file is
|
||||
And this is where we create the `.git/refs/heads/master` file. This file is
|
||||
supposed to contain the reference to the top-of-tree, and since that's
|
||||
exactly what `git-commit-tree` spits out, we can do this all with a simple
|
||||
shell pipeline:
|
||||
|
||||
------------------------------------------------
|
||||
echo "Initial commit" | git-commit-tree $(git-write-tree) > .git/HEAD
|
||||
echo "Initial commit" | \
|
||||
git-commit-tree $(git-write-tree) > .git/refs/heads/master
|
||||
------------------------------------------------
|
||||
|
||||
which will say:
|
||||
@ -692,7 +696,9 @@ other point in the history than the current `HEAD`, you can do so by
|
||||
just telling `git checkout` what the base of the checkout would be.
|
||||
In other words, if you have an earlier tag or branch, you'd just do
|
||||
|
||||
git checkout -b mybranch earlier-commit
|
||||
------------
|
||||
git checkout -b mybranch earlier-commit
|
||||
------------
|
||||
|
||||
and it would create the new branch `mybranch` at the earlier commit,
|
||||
and check out the state at that time.
|
||||
@ -700,17 +706,29 @@ and check out the state at that time.
|
||||
|
||||
You can always just jump back to your original `master` branch by doing
|
||||
|
||||
git checkout master
|
||||
------------
|
||||
git checkout master
|
||||
------------
|
||||
|
||||
(or any other branch-name, for that matter) and if you forget which
|
||||
branch you happen to be on, a simple
|
||||
|
||||
ls -l .git/HEAD
|
||||
------------
|
||||
ls -l .git/HEAD
|
||||
------------
|
||||
|
||||
will tell you where it's pointing. To get the list of branches
|
||||
you have, you can say
|
||||
will tell you where it's pointing (Note that on platforms with bad or no
|
||||
symlink support, you have to execute
|
||||
|
||||
git branch
|
||||
------------
|
||||
cat .git/HEAD
|
||||
------------
|
||||
|
||||
instead). To get the list of branches you have, you can say
|
||||
|
||||
------------
|
||||
git branch
|
||||
------------
|
||||
|
||||
which is nothing more than a simple script around `ls .git/refs/heads`.
|
||||
There will be asterisk in front of the branch you are currently on.
|
||||
@ -718,7 +736,9 @@ There will be asterisk in front of the branch you are currently on.
|
||||
Sometimes you may wish to create a new branch _without_ actually
|
||||
checking it out and switching to it. If so, just use the command
|
||||
|
||||
git branch <branchname> [startingpoint]
|
||||
------------
|
||||
git branch <branchname> [startingpoint]
|
||||
------------
|
||||
|
||||
which will simply _create_ the branch, but will not do anything further.
|
||||
You can then later -- once you decide that you want to actually develop
|
||||
@ -844,7 +864,6 @@ $ git show-branch master mybranch
|
||||
! [mybranch] Some work.
|
||||
--
|
||||
+ [master] Merged "mybranch" changes.
|
||||
+ [master~1] Some fun.
|
||||
++ [mybranch] Some work.
|
||||
------------------------------------------------
|
||||
|
||||
@ -871,8 +890,10 @@ Now, let's pretend you are the one who did all the work in
|
||||
to the `master` branch. Let's go back to `mybranch`, and run
|
||||
resolve to get the "upstream changes" back to your branch.
|
||||
|
||||
git checkout mybranch
|
||||
git resolve HEAD master "Merge upstream changes."
|
||||
------------
|
||||
git checkout mybranch
|
||||
git resolve HEAD master "Merge upstream changes."
|
||||
------------
|
||||
|
||||
This outputs something like this (the actual commit object names
|
||||
would be different)
|
||||
@ -1088,13 +1109,17 @@ i.e. `<project>.git`. Let's create such a public repository for
|
||||
project `my-git`. After logging into the remote machine, create
|
||||
an empty directory:
|
||||
|
||||
mkdir my-git.git
|
||||
------------
|
||||
mkdir my-git.git
|
||||
------------
|
||||
|
||||
Then, make that directory into a GIT repository by running
|
||||
`git init-db`, but this time, since its name is not the usual
|
||||
`.git`, we do things slightly differently:
|
||||
|
||||
GIT_DIR=my-git.git git-init-db
|
||||
------------
|
||||
GIT_DIR=my-git.git git-init-db
|
||||
------------
|
||||
|
||||
Make sure this directory is available for others you want your
|
||||
changes to be pulled by via the transport of your choice. Also
|
||||
@ -1118,7 +1143,9 @@ Your "public repository" is now ready to accept your changes.
|
||||
Come back to the machine you have your private repository. From
|
||||
there, run this command:
|
||||
|
||||
git push <public-host>:/path/to/my-git.git master
|
||||
------------
|
||||
git push <public-host>:/path/to/my-git.git master
|
||||
------------
|
||||
|
||||
This synchronizes your public repository to match the named
|
||||
branch head (i.e. `master` in this case) and objects reachable
|
||||
@ -1128,7 +1155,9 @@ As a real example, this is how I update my public git
|
||||
repository. Kernel.org mirror network takes care of the
|
||||
propagation to other publicly visible machines:
|
||||
|
||||
git push master.kernel.org:/pub/scm/git/git.git/
|
||||
------------
|
||||
git push master.kernel.org:/pub/scm/git/git.git/
|
||||
------------
|
||||
|
||||
|
||||
Packing your repository
|
||||
@ -1141,7 +1170,9 @@ not so convenient to transport over the network. Since git objects are
|
||||
immutable once they are created, there is a way to optimize the
|
||||
storage by "packing them together". The command
|
||||
|
||||
git repack
|
||||
------------
|
||||
git repack
|
||||
------------
|
||||
|
||||
will do it for you. If you followed the tutorial examples, you
|
||||
would have accumulated about 17 objects in `.git/objects/??/`
|
||||
@ -1165,7 +1196,9 @@ Our programs are always perfect ;-).
|
||||
Once you have packed objects, you do not need to leave the
|
||||
unpacked objects that are contained in the pack file anymore.
|
||||
|
||||
git prune-packed
|
||||
------------
|
||||
git prune-packed
|
||||
------------
|
||||
|
||||
would remove them for you.
|
||||
|
||||
|
160
t/t1200-tutorial.sh
Normal file
160
t/t1200-tutorial.sh
Normal file
@ -0,0 +1,160 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2005 Johannes Schindelin
|
||||
#
|
||||
|
||||
test_description='Test git-rev-parse with different parent options'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
echo "Hello World" > hello
|
||||
echo "Silly example" > example
|
||||
|
||||
git-update-index --add hello example
|
||||
|
||||
test_expect_success 'blob' "test blob = \"$(git-cat-file -t 557db03)\""
|
||||
|
||||
test_expect_success 'blob 557db03' "test \"Hello World\" = \"$(git-cat-file blob 557db03)\""
|
||||
|
||||
echo "It's a new day for git" >>hello
|
||||
cat > diff.expect << EOF
|
||||
diff --git a/hello b/hello
|
||||
index 557db03..263414f 100644
|
||||
--- a/hello
|
||||
+++ b/hello
|
||||
@@ -1 +1,2 @@
|
||||
Hello World
|
||||
+It's a new day for git
|
||||
EOF
|
||||
git-diff-files -p > diff.output
|
||||
test_expect_success 'git-diff-files -p' 'cmp diff.expect diff.output'
|
||||
git diff > diff.output
|
||||
test_expect_success 'git diff' 'cmp diff.expect diff.output'
|
||||
|
||||
tree=$(git-write-tree 2>/dev/null)
|
||||
|
||||
test_expect_success 'tree' "test 8988da15d077d4829fc51d8544c097def6644dbb = $tree"
|
||||
|
||||
output="$(echo "Initial commit" | git-commit-tree $(git-write-tree) 2>&1 > .git/refs/heads/master)"
|
||||
|
||||
test_expect_success 'commit' "test 'Committing initial tree 8988da15d077d4829fc51d8544c097def6644dbb' = \"$output\""
|
||||
|
||||
git-diff-index -p HEAD > diff.output
|
||||
test_expect_success 'git-diff-index -p HEAD' 'cmp diff.expect diff.output'
|
||||
|
||||
git diff HEAD > diff.output
|
||||
test_expect_success 'git diff HEAD' 'cmp diff.expect diff.output'
|
||||
|
||||
#rm hello
|
||||
#test_expect_success 'git-read-tree --reset HEAD' "git-read-tree --reset HEAD ; test \"hello: needs update\" = \"$(git-update-index --refresh)\""
|
||||
|
||||
cat > whatchanged.expect << EOF
|
||||
diff-tree VARIABLE (from root)
|
||||
Author: VARIABLE
|
||||
Date: VARIABLE
|
||||
|
||||
Initial commit
|
||||
|
||||
diff --git a/example b/example
|
||||
new file mode 100644
|
||||
index 0000000..f24c74a
|
||||
--- /dev/null
|
||||
+++ b/example
|
||||
@@ -0,0 +1 @@
|
||||
+Silly example
|
||||
diff --git a/hello b/hello
|
||||
new file mode 100644
|
||||
index 0000000..557db03
|
||||
--- /dev/null
|
||||
+++ b/hello
|
||||
@@ -0,0 +1 @@
|
||||
+Hello World
|
||||
EOF
|
||||
|
||||
git-whatchanged -p --root | \
|
||||
sed -e "1s/^\(.\{10\}\).\{40\}/\1VARIABLE/" \
|
||||
-e "2,3s/^\(.\{8\}\).*$/\1VARIABLE/" \
|
||||
> whatchanged.output
|
||||
test_expect_success 'git-whatchanged -p --root' 'cmp whatchanged.expect whatchanged.output'
|
||||
|
||||
git tag my-first-tag
|
||||
test_expect_success 'git tag my-first-tag' 'cmp .git/refs/heads/master .git/refs/tags/my-first-tag'
|
||||
|
||||
# TODO: test git-clone
|
||||
|
||||
git checkout -b mybranch
|
||||
test_expect_success 'git checkout -b mybranch' 'cmp .git/refs/heads/master .git/refs/heads/mybranch'
|
||||
|
||||
cat > branch.expect <<EOF
|
||||
master
|
||||
* mybranch
|
||||
EOF
|
||||
|
||||
git branch > branch.output
|
||||
test_expect_success 'git branch' 'cmp branch.expect branch.output'
|
||||
|
||||
git checkout mybranch
|
||||
echo "Work, work, work" >>hello
|
||||
git commit -m 'Some work.' hello
|
||||
|
||||
git checkout master
|
||||
|
||||
echo "Play, play, play" >>hello
|
||||
echo "Lots of fun" >>example
|
||||
git commit -m 'Some fun.' hello example
|
||||
|
||||
test_expect_failure 'git resolve now fails' 'git resolve HEAD mybranch "Merge work in mybranch"'
|
||||
|
||||
cat > hello << EOF
|
||||
Hello World
|
||||
It's a new day for git
|
||||
Play, play, play
|
||||
Work, work, work
|
||||
EOF
|
||||
|
||||
git commit -m 'Merged "mybranch" changes.' hello
|
||||
|
||||
cat > show-branch.expect << EOF
|
||||
* [master] Merged "mybranch" changes.
|
||||
! [mybranch] Some work.
|
||||
--
|
||||
+ [master] Merged "mybranch" changes.
|
||||
++ [mybranch] Some work.
|
||||
EOF
|
||||
|
||||
git show-branch master mybranch > show-branch.output
|
||||
test_expect_success 'git show-branch' 'cmp show-branch.expect show-branch.output'
|
||||
|
||||
git checkout mybranch
|
||||
|
||||
cat > resolve.expect << EOF
|
||||
Updating from VARIABLE to VARIABLE.
|
||||
example | 1 +
|
||||
hello | 1 +
|
||||
2 files changed, 2 insertions(+), 0 deletions(-)
|
||||
EOF
|
||||
|
||||
git resolve HEAD master "Merge upstream changes." | \
|
||||
sed -e "1s/[0-9a-f]\{40\}/VARIABLE/g" > resolve.output
|
||||
test_expect_success 'git resolve' 'cmp resolve.expect resolve.output'
|
||||
|
||||
cat > show-branch2.expect << EOF
|
||||
! [master] Merged "mybranch" changes.
|
||||
* [mybranch] Merged "mybranch" changes.
|
||||
--
|
||||
++ [master] Merged "mybranch" changes.
|
||||
EOF
|
||||
|
||||
git show-branch master mybranch > show-branch2.output
|
||||
test_expect_success 'git show-branch' 'cmp show-branch2.expect show-branch2.output'
|
||||
|
||||
# TODO: test git fetch
|
||||
|
||||
# TODO: test git push
|
||||
|
||||
test_expect_success 'git repack' 'git repack'
|
||||
test_expect_success 'git prune-packed' 'git prune-packed'
|
||||
test_expect_failure '-> only packed objects' 'find -type f .git/objects/[0-9a-f][0-9a-f]'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user