| #!/bin/bash -ex |
| |
| export GIT_COMMITTER_NAME="A U Thor" |
| export GIT_AUTHOR_NAME="A U Thor" |
| export GIT_COMMITTER_EMAIL="a.u.thor@example.com" |
| export GIT_AUTHOR_EMAIL="a.u.thor@example.com" |
| |
| test_tick () { |
| # from git/t/test-lib.sh |
| if test -z "${test_tick+set}" |
| then |
| test_tick=1112911993 |
| else |
| test_tick=$(($test_tick + 60)) |
| fi |
| GIT_COMMITTER_DATE="$test_tick -0700" |
| GIT_AUTHOR_DATE="$test_tick -0700" |
| export GIT_COMMITTER_DATE GIT_AUTHOR_DATE |
| } |
| |
| git_commit () { |
| test_tick |
| git commit "$@" |
| } |
| |
| git_merge () { |
| test_tick |
| git merge "$@" |
| |
| } |
| |
| test_tick |
| rm -rf .git *.txt ? |
| git init |
| echo "On master" >>master.txt |
| git add master.txt |
| git_commit -a -m "On master" |
| |
| echo "On master" >>master.txt |
| git_commit -a -m "On master again" |
| |
| git checkout -b a 6c8b137b1c652731597c89668f417b8695f28dd7 |
| mkdir a |
| |
| echo a1 >>a/a1.txt |
| git add a/a1.txt |
| git_commit -a -m "First a/a1" |
| |
| echo a2 >>a/a2.txt |
| git add a/a2.txt |
| git_commit -a -m "First a/a2" |
| |
| git merge master |
| |
| echo a1 >>a/a1.txt |
| git add a/a1.txt |
| git_commit -a -m "Second a/a1" |
| git branch pa |
| |
| echo a2 >>a/a2.txt |
| git add a/a2.txt |
| git_commit -a -m "Second a/a2" |
| |
| git checkout -b b 58be4659bb571194ed4562d04b359d26216f526e |
| |
| mkdir b |
| echo b1 >>b/b1.txt |
| git add b/b1.txt |
| git_commit -a -m "First b/b1" |
| |
| echo b2 >>b/b2.txt |
| git add b/b2.txt |
| git_commit -a -m "First b/b2" |
| |
| git merge a |
| |
| echo b1 >>b/b1.txt |
| git add b/b1.txt |
| git_commit -a -m "Second b/b1" |
| |
| echo b2 >>b/b2.txt |
| git add b/b2.txt |
| git_commit -a -m "Second b/b2" |
| |
| rm -rf a b c master.txt |
| mkdir c |
| rm -f ./git/index |
| echo ref: refs/heads/c >.git/HEAD |
| |
| echo c1 >>c/c1.txt |
| git add c/c1.txt |
| git_commit -a -m "First c/c1, no parent" |
| |
| echo c2 >>c/c2.txt |
| git add c/c2.txt |
| git_commit -a -m "First c/c2" |
| |
| git_merge a |
| |
| echo c1 >>c/c1.txt |
| git add c/c2.txt |
| git_commit -a -m "Second c/c1" |
| |
| echo c2 >>c/c2.txt |
| git add c/c2.txt |
| git_commit -a -m "Second c/c2" |
| |
| git_merge b |
| |
| git checkout -b d a |
| |
| echo "a1" >>a/a1 |
| git add a/a1 |
| git_commit -a -m "Third a/a1" |
| |
| git checkout -b e a |
| |
| echo "a1" >>a/a1 |
| git add a/a1 |
| git_commit -a -m "Fourth a/a1" |
| |
| git checkout master |
| |
| git_merge c d e |
| |
| git repack -d |
| |
| git tag A a |
| git tag -a -m "An annotated tag" B a^ |
| |
| git repack -d |
| |
| Bnth=B |
| for nth in 2nd 3rd 4th 5th 6th 7th 8th 9th 10th; do |
| git tag -a -m "An $nth level annotated tag" "B$nth" "$Bnth" |
| Bnth="B$nth" |
| done |
| |
| git repack -d |
| |
| git checkout -b f a |
| mkdir f |
| echo "an eff" >f/f |
| git add f/f |
| git commit -m "An eff" |
| git checkout -b g a |
| mkdir f |
| echo "an F" >f/f |
| git add f/f |
| git commit -m "An F" |
| |
| git repack -d |
| |
| git checkout -b symlink master |
| ln -s c/c1.txt symlink.txt |
| git add symlink.txt |
| git_commit -m "A symlink" |
| |
| git checkout -b gitlink master |
| git submodule add "$(pwd)/.git" submodule |
| git_commit -m "A gitlink" |
| |
| git repack -d |
| git pack-refs --all |
| |
| gitk --all master |