mirror of
https://github.com/git/git.git
synced 2024-11-17 22:44:49 +01:00
Merge branch 'fixes'
This commit is contained in:
commit
2482d7d0ec
3 changed files with 218 additions and 23 deletions
|
@ -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
|
inspect that with `ls`. For your new empty project, it should show you
|
||||||
three entries, among other things:
|
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
|
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
|
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
|
diff --git a/hello b/hello
|
||||||
|
index 557db03..263414f 100644
|
||||||
--- a/hello
|
--- a/hello
|
||||||
+++ b/hello
|
+++ b/hello
|
||||||
@@ -1 +1,2 @@
|
@@ -1 +1,2 @@
|
||||||
|
@ -290,13 +293,16 @@ also wants to get a commit message
|
||||||
on its standard input, and it will write out the resulting object name for the
|
on its standard input, and it will write out the resulting object name for the
|
||||||
commit to its standard output.
|
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
|
||||||
supposed to contain the reference to the top-of-tree, and since that's
|
which is pointed at by `HEAD`. This file is supposed to contain
|
||||||
exactly what `git-commit-tree` spits out, we can do this all with a simple
|
the reference to the top-of-tree of the master branch, and since
|
||||||
shell pipeline:
|
that's exactly what `git-commit-tree` spits out, we can do this
|
||||||
|
all with a sequence of simple shell commands:
|
||||||
|
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
echo "Initial commit" | git-commit-tree $(git-write-tree) > .git/HEAD
|
tree=$(git-write-tree)
|
||||||
|
commit=$(echo 'Initial commit' | git-commit-tree $tree)
|
||||||
|
git-update-ref HEAD $(commit)
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
which will say:
|
which will say:
|
||||||
|
@ -692,7 +698,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.
|
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
|
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 it would create the new branch `mybranch` at the earlier commit,
|
||||||
and check out the state at that time.
|
and check out the state at that time.
|
||||||
|
@ -700,17 +708,29 @@ and check out the state at that time.
|
||||||
|
|
||||||
You can always just jump back to your original `master` branch by doing
|
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
|
(or any other branch-name, for that matter) and if you forget which
|
||||||
branch you happen to be on, a simple
|
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
|
will tell you where it's pointing (Note that on platforms with bad or no
|
||||||
you have, you can say
|
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`.
|
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.
|
There will be asterisk in front of the branch you are currently on.
|
||||||
|
@ -718,7 +738,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
|
Sometimes you may wish to create a new branch _without_ actually
|
||||||
checking it out and switching to it. If so, just use the command
|
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.
|
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
|
You can then later -- once you decide that you want to actually develop
|
||||||
|
@ -844,7 +866,6 @@ $ git show-branch master mybranch
|
||||||
! [mybranch] Some work.
|
! [mybranch] Some work.
|
||||||
--
|
--
|
||||||
+ [master] Merged "mybranch" changes.
|
+ [master] Merged "mybranch" changes.
|
||||||
+ [master~1] Some fun.
|
|
||||||
++ [mybranch] Some work.
|
++ [mybranch] Some work.
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
|
@ -871,8 +892,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
|
to the `master` branch. Let's go back to `mybranch`, and run
|
||||||
resolve to get the "upstream changes" back to your branch.
|
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
|
This outputs something like this (the actual commit object names
|
||||||
would be different)
|
would be different)
|
||||||
|
@ -1088,13 +1111,17 @@ i.e. `<project>.git`. Let's create such a public repository for
|
||||||
project `my-git`. After logging into the remote machine, create
|
project `my-git`. After logging into the remote machine, create
|
||||||
an empty directory:
|
an empty directory:
|
||||||
|
|
||||||
mkdir my-git.git
|
------------
|
||||||
|
mkdir my-git.git
|
||||||
|
------------
|
||||||
|
|
||||||
Then, make that directory into a GIT repository by running
|
Then, make that directory into a GIT repository by running
|
||||||
`git init-db`, but this time, since its name is not the usual
|
`git init-db`, but this time, since its name is not the usual
|
||||||
`.git`, we do things slightly differently:
|
`.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
|
Make sure this directory is available for others you want your
|
||||||
changes to be pulled by via the transport of your choice. Also
|
changes to be pulled by via the transport of your choice. Also
|
||||||
|
@ -1118,7 +1145,9 @@ Your "public repository" is now ready to accept your changes.
|
||||||
Come back to the machine you have your private repository. From
|
Come back to the machine you have your private repository. From
|
||||||
there, run this command:
|
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
|
This synchronizes your public repository to match the named
|
||||||
branch head (i.e. `master` in this case) and objects reachable
|
branch head (i.e. `master` in this case) and objects reachable
|
||||||
|
@ -1128,7 +1157,9 @@ As a real example, this is how I update my public git
|
||||||
repository. Kernel.org mirror network takes care of the
|
repository. Kernel.org mirror network takes care of the
|
||||||
propagation to other publicly visible machines:
|
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
|
Packing your repository
|
||||||
|
@ -1141,7 +1172,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
|
immutable once they are created, there is a way to optimize the
|
||||||
storage by "packing them together". The command
|
storage by "packing them together". The command
|
||||||
|
|
||||||
git repack
|
------------
|
||||||
|
git repack
|
||||||
|
------------
|
||||||
|
|
||||||
will do it for you. If you followed the tutorial examples, you
|
will do it for you. If you followed the tutorial examples, you
|
||||||
would have accumulated about 17 objects in `.git/objects/??/`
|
would have accumulated about 17 objects in `.git/objects/??/`
|
||||||
|
@ -1165,7 +1198,9 @@ Our programs are always perfect ;-).
|
||||||
Once you have packed objects, you do not need to leave the
|
Once you have packed objects, you do not need to leave the
|
||||||
unpacked objects that are contained in the pack file anymore.
|
unpacked objects that are contained in the pack file anymore.
|
||||||
|
|
||||||
git prune-packed
|
------------
|
||||||
|
git prune-packed
|
||||||
|
------------
|
||||||
|
|
||||||
would remove them for you.
|
would remove them for you.
|
||||||
|
|
||||||
|
|
2
rsh.c
2
rsh.c
|
@ -104,7 +104,7 @@ int setup_connection(int *fd_in, int *fd_out, const char *remote_prog,
|
||||||
if (!path) {
|
if (!path) {
|
||||||
return error("Bad URL: %s", url);
|
return error("Bad URL: %s", url);
|
||||||
}
|
}
|
||||||
/* $GIT_RSH <host> "env GIR_DIR=<path> <remote_prog> <args...>" */
|
/* $GIT_RSH <host> "env GIT_DIR=<path> <remote_prog> <args...>" */
|
||||||
sizen = COMMAND_SIZE;
|
sizen = COMMAND_SIZE;
|
||||||
posn = command;
|
posn = command;
|
||||||
of = 0;
|
of = 0;
|
||||||
|
|
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 a new issue