mirror of
https://github.com/git-learning-game/oh-my-git.git
synced 2024-11-22 16:20:19 +01:00
Add levels for refs and symrefs
This commit is contained in:
parent
cb2bb767db
commit
9ba485b789
7 changed files with 32 additions and 0 deletions
1
levels/00-empty/description
Normal file
1
levels/00-empty/description
Normal file
|
@ -0,0 +1 @@
|
||||||
|
This is an empty level without any winning condition - you can use it as a playground!
|
9
levels/05-ref/description
Normal file
9
levels/05-ref/description
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
Let's take a look at "refs", short for "references"! Refs are not objects, but rather very simple *pointers* to objects! They can help you keep track of what's where.
|
||||||
|
|
||||||
|
You can create or update a ref with
|
||||||
|
|
||||||
|
git update-ref refs/<refname> <newvalue>
|
||||||
|
|
||||||
|
Make sure to start a ref's name with "refs/"! That's a convention that helps Git find all refs you create.
|
||||||
|
|
||||||
|
Create refs that point to all objects in this repository!
|
5
levels/05-ref/start
Normal file
5
levels/05-ref/start
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
echo hello > hello
|
||||||
|
echo world > world
|
||||||
|
git add .
|
||||||
|
TREE=$(git write-tree)
|
||||||
|
git commit-tree $TREE -m "Initial commit"
|
3
levels/05-ref/win
Normal file
3
levels/05-ref/win
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
OBJECTS=$(git cat-file --batch-check='%(objectname)' --batch-all-objects | sort)
|
||||||
|
REF_TARGETS=$(git show-ref -s | sort | uniq)
|
||||||
|
test "$OBJECTS" = "$REF_TARGETS"
|
9
levels/06-symref/description
Normal file
9
levels/06-symref/description
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
Instead of pointing directly to objects, refs can also point to other refs!
|
||||||
|
|
||||||
|
When that happens, they are called "symbolic refs". You can create or update a symbolic ref using
|
||||||
|
|
||||||
|
git symbolic-ref <name> <ref>
|
||||||
|
|
||||||
|
Usually, you will only encounter a special symbolic ref called "HEAD". This ref is special in that it doesn't start with "refs/"!
|
||||||
|
|
||||||
|
Try pointing HEAD to the refs in this repository!
|
4
levels/06-symref/start
Normal file
4
levels/06-symref/start
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
TREE=$(git write-tree)
|
||||||
|
COMMIT=$(git commit-tree $TREE -m "Initial commit")
|
||||||
|
git update-ref refs/best_commit $COMMIT
|
||||||
|
git update-ref refs/worst_commit $COMMIT
|
1
levels/06-symref/win
Normal file
1
levels/06-symref/win
Normal file
|
@ -0,0 +1 @@
|
||||||
|
git symbolic-ref HEAD | grep _commit
|
Loading…
Reference in a new issue