diff --git a/levels/experiments/commit b/levels/experiments/commit new file mode 100644 index 0000000..cb18e51 --- /dev/null +++ b/levels/experiments/commit @@ -0,0 +1,28 @@ +title = "fu" + +[description] + +So you've been working on a project for a while, and decide you want to put it in a Git repository. + +Here's how to do it! First, you initialize a new Git repository in your current directory: + + git init + +Then say that you want to record the current state of all files: + + git add . + +And then you make a commit, which gives the current state a description, a date, and your name: + + git commit + +[setup] + +mkdir recipes +echo -e "blueberries\nflour" > recipes/blueberry_cake.txt +echo -e "water\ncarrots" > recipes/carrot soup.txt +echo "Very good recipes!" > README.md + +[win] + +test "$(git rev-parse HEAD^{tree})" = 1e02e3151284d0e22cd9b07ca5c5dbae2f3cb521 diff --git a/levels/experiments/pull-merge-push b/levels/experiments/pull-merge-push new file mode 100644 index 0000000..1e64ffc --- /dev/null +++ b/levels/experiments/pull-merge-push @@ -0,0 +1,32 @@ +title = A pull and a conflict +author = blinry + +[description] + +You want to push your new commits to the server, but someone has already pushed their own changes. + +In this situation, you need to pull first! Try that here - you'll have to resolve a merge conflict. Push your changes afterwards. + +[congrats] + +Good job! Here's some additional info: banana! + +[setup yours] + +echo fu > file +git add . +git commit -m "Initial commit" +git push + +echo fi > file +git commit -a -m "Fi is good" + +[setup origin] + +echo fa > file +git add . +git commit -a -m "Fa is good" + +[win origin] + +test "$(git rev-parse HEAD^1^)" = "$(git rev-parse HEAD^2^)" diff --git a/levels/experiments/rebase b/levels/experiments/rebase new file mode 100644 index 0000000..9a46e7f --- /dev/null +++ b/levels/experiments/rebase @@ -0,0 +1,20 @@ +description = Rebase all branches on top of the main branch, so that the commits are in alphabetical order, and then point the main branch to the top commit. + +[setup] + +git commit --allow-empty -m A +git commit --allow-empty -m B +git commit --allow-empty -m C + +git switch -c side1 main~1 +git commit --allow-empty -m D +git commit --allow-empty -m E + +git switch -c side2 main~2 +git commit --allow-empty -m F + +git checkout main + +[win] + +diff <(git log --pretty=%s main) <(echo -e "F\nE\nD\nC\nB\nA") diff --git a/levels/experiments/sandbox b/levels/experiments/sandbox new file mode 100644 index 0000000..c6396c5 --- /dev/null +++ b/levels/experiments/sandbox @@ -0,0 +1,8 @@ +[setup local] + +git commit --allow-empty -m "1" +git commit --allow-empty -m "2" +git commit --allow-empty -m "3" +git push + +[setup origin] diff --git a/levels/intro/motivation b/levels/intro/motivation new file mode 100644 index 0000000..1c426a6 --- /dev/null +++ b/levels/intro/motivation @@ -0,0 +1,48 @@ +[description] + +So you've been working on an essay about goldfish. You can look at the backup copies you made by clicking on them! + +But look - something went wrong in the latest version of the file! Maybe it has been infected with a vowel-eating virus? + +Make a new version (with the number 5) from the last version that's still okay, and add at least two more lines to it! + +[congrats] + +Good that you had that backup, huh? + +But you're a bit worried that two weeks from now, you'll have hundreds of copies of your essay, and it will be hard to keep track of all of them. + +And especially when working with other people, sending backup copies around doesn't seem ideal. + +Let's look at another way to do this. :) Click "Next Level" as soon as you're ready! + +[setup] + +rm -rf .git + +echo "~ Why goldfish are the best pets ~ + +(I still need to write this.)" >> essay_1.txt + + +echo "~ Why goldfish are the best pets ~ + +- They don't make any noise. +- They are pretty. (I should probably put this higher in the list?)" >> essay_2.txt + + +echo "~ Why goldfish are the best pets ~ + +- They are pretty. +- They don't pee on the carpet. +- They don't make any noise." >> essay_3.txt + +echo "~ Why gldfsh r th bst pts ~ + +- Thy r prtty. +- Thy dn't p n th crpt. +- Thy dn't mk ny ns." >> essay_4.txt + +[win] + +test "$(cat *5.txt | wc -l )" -ge 7 && grep carpet *5.txt diff --git a/levels/intro/restore b/levels/intro/restore new file mode 100644 index 0000000..df464b3 --- /dev/null +++ b/levels/intro/restore @@ -0,0 +1,35 @@ +[description] + +You've been working on your essay for a while. But - ughh! Now your cat walks over your keyboard and "helps you", so now it's all messed up again! :/ + +To restore your essay from the last backup, type: + + git restore essay.txt + +To restore an older version, for example, from two backups before the latest one, type: + + git restore -s HEAD~2 essay.txt + +For nostalgic reasons, restore the very first backup you made! + +[setup] + +echo "A" >> essay.txt +git add . +git commit -m "Initial commit" + +echo "B" >> essay.txt +git commit -a -m "Improved version" + +echo "C" >> essay.txt +git commit -a -m "Even better version" + +echo "D" >> essay.txt +git commit -a -m "Marvelous version" + +echo "blarg +blaaaargh" > essay.txt + +[win] + +diff essay.txt <(echo "A") diff --git a/levels/intro/setup b/levels/intro/setup new file mode 100644 index 0000000..b4fa02d --- /dev/null +++ b/levels/intro/setup @@ -0,0 +1,31 @@ +[description] + +One month later, you're woking on an essay about tardigrades! + +This time, a friend has recommended that you use the version control system Git to keep backups of your file. + +Currently, your directory only contains your essay. To initialize a Git repository in your directory, type: + + git init + +Then, each time you want to make a backup, type: + + git add essay.txt + git commit + +Enter a description of what you changed in the editor that opens and click save. + +That way, you've made a backup of the current version of the file. Then add at least two more lines, and make another backup by repeating the add and the commit commands. + +[setup] + +rm -rf .git + +echo "~ Why tardigrades are cool ~ + +- They can survive in space. +- They are resistant to extreme heat and cold." > essay.txt + +[win] + +test -d .git && git rev-parse HEAD^ && test "$(git show HEAD:essay.txt | wc -l)" -ge 6