From 943126647b33dc805def8904b72f795b51bee672 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Mon, 6 Sep 2021 12:25:23 +0200 Subject: [PATCH 01/49] Upgrade gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f02a819..8537f75 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ /cache/ /dependencies/ /build/ +*~ From 2c275424a3bb4f20de0b66a28615941d70a02fe1 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Mon, 6 Sep 2021 12:28:35 +0200 Subject: [PATCH 02/49] Add split description in italia and english and add directory it in levels --- levels/it/bisect/bisect | 43 +++++ levels/it/bisect/sequence | 1 + levels/it/branches/branch-create | 44 +++++ levels/it/branches/branch-remove | 47 +++++ levels/it/branches/checkout-commit | 43 +++++ levels/it/branches/fork | 65 +++++++ levels/it/branches/grow | 49 +++++ levels/it/branches/reorder | 89 +++++++++ levels/it/branches/sequence | 6 + levels/it/changing-the-past/rebase | 86 +++++++++ levels/it/changing-the-past/reorder | 78 ++++++++ levels/it/changing-the-past/sequence | 2 + levels/it/files/files-add | 32 ++++ levels/it/files/files-delete | 36 ++++ levels/it/files/sequence | 3 + levels/it/index/add | 38 ++++ levels/it/index/change | 31 +++ levels/it/index/checkout | 25 +++ levels/it/index/compare | 51 +++++ levels/it/index/new | 28 +++ levels/it/index/reset | 37 ++++ levels/it/index/rm | 24 +++ levels/it/index/sequence | 5 + levels/it/index/steps | 53 ++++++ levels/it/intro/cli | 27 +++ levels/it/intro/commit | 32 ++++ levels/it/intro/copies | 42 ++++ levels/it/intro/init | 24 +++ levels/it/intro/remote | 52 +++++ levels/it/intro/risky | 42 ++++ levels/it/intro/sequence | 6 + levels/it/intro/who-are-you | 38 ++++ levels/it/low-level/basics | 26 +++ levels/it/low-level/blob-create | 38 ++++ levels/it/low-level/blob-remove | 27 +++ levels/it/low-level/commit-create | 37 ++++ levels/it/low-level/commit-parents | 31 +++ levels/it/low-level/commit-rhombus | 30 +++ levels/it/low-level/index-add | 37 ++++ levels/it/low-level/index-remove | 29 +++ levels/it/low-level/index-update | 33 ++++ levels/it/low-level/puzzle-apocalypse | 41 ++++ levels/it/low-level/puzzle-precious-blob | 28 +++ .../low-level/puzzle-trees-all-the-way-down | 34 ++++ levels/it/low-level/ref-create | 42 ++++ levels/it/low-level/ref-move | 41 ++++ levels/it/low-level/ref-remove | 41 ++++ levels/it/low-level/sequence | 18 ++ levels/it/low-level/symref-create | 21 ++ levels/it/low-level/symref-no-deref | 46 +++++ levels/it/low-level/tree-create | 35 ++++ levels/it/low-level/tree-nested | 38 ++++ levels/it/low-level/tree-read | 51 +++++ levels/it/low-level/welcome | 33 ++++ levels/it/merge/conflict | 47 +++++ levels/it/merge/merge | 82 ++++++++ levels/it/merge/merge-abort | 54 ++++++ levels/it/merge/sequence | 2 + levels/it/remotes/friend | 47 +++++ levels/it/remotes/problems | 33 ++++ levels/it/remotes/sequence | 2 + levels/it/sandbox/empty | 7 + levels/it/sandbox/remote | 22 +++ levels/it/sandbox/sequence | 3 + levels/it/sandbox/three-commits | 26 +++ levels/it/sequence | 13 ++ levels/it/shit-happens/bad-commit | 30 +++ .../it/shit-happens/pushed-something-broken | 54 ++++++ levels/it/shit-happens/reflog | 26 +++ levels/it/shit-happens/restore-a-file | 22 +++ .../shit-happens/restore-a-file-from-the-past | 21 ++ levels/it/shit-happens/sequence | 5 + levels/it/stash/sequence | 5 + levels/it/stash/stash | 45 +++++ levels/it/stash/stash-branch | 48 +++++ levels/it/stash/stash-clear | 57 ++++++ levels/it/stash/stash-merge | 54 ++++++ levels/it/stash/stash-pop | 46 +++++ levels/it/tags/add-tag | 53 ++++++ levels/it/tags/add-tag-later | 50 +++++ levels/it/tags/remote-tag | 58 ++++++ levels/it/tags/remove-tag | 53 ++++++ levels/it/tags/sequence | 4 + levels/it/unused/checkout | 31 +++ levels/it/unused/clone | 20 ++ levels/it/unused/commit | 27 +++ levels/it/unused/commit-a | 26 +++ levels/it/unused/fetch | 35 ++++ levels/it/unused/files-move | 27 +++ levels/it/unused/index-mv | 26 +++ levels/it/unused/init | 14 ++ levels/it/unused/pull-push | 51 +++++ levels/it/unused/remotes-add | 33 ++++ levels/it/unused/remotes-delete | 23 +++ levels/it/unused/restore | 28 +++ levels/it/unused/split | 26 +++ levels/it/unused/steps | 23 +++ levels/it/unused/who-are-you | 23 +++ levels/it/workflows/gitignore | 18 ++ levels/it/workflows/pr | 25 +++ levels/it/workflows/sequence | 1 + resources/cards.json | 180 ++++++++++++++---- scenes/cards.gd | 5 +- scenes/title.tscn | 1 + 104 files changed, 3510 insertions(+), 38 deletions(-) create mode 100644 levels/it/bisect/bisect create mode 100644 levels/it/bisect/sequence create mode 100644 levels/it/branches/branch-create create mode 100644 levels/it/branches/branch-remove create mode 100644 levels/it/branches/checkout-commit create mode 100644 levels/it/branches/fork create mode 100644 levels/it/branches/grow create mode 100644 levels/it/branches/reorder create mode 100644 levels/it/branches/sequence create mode 100644 levels/it/changing-the-past/rebase create mode 100644 levels/it/changing-the-past/reorder create mode 100644 levels/it/changing-the-past/sequence create mode 100644 levels/it/files/files-add create mode 100644 levels/it/files/files-delete create mode 100644 levels/it/files/sequence create mode 100644 levels/it/index/add create mode 100644 levels/it/index/change create mode 100644 levels/it/index/checkout create mode 100644 levels/it/index/compare create mode 100644 levels/it/index/new create mode 100644 levels/it/index/reset create mode 100644 levels/it/index/rm create mode 100644 levels/it/index/sequence create mode 100644 levels/it/index/steps create mode 100644 levels/it/intro/cli create mode 100644 levels/it/intro/commit create mode 100644 levels/it/intro/copies create mode 100644 levels/it/intro/init create mode 100644 levels/it/intro/remote create mode 100644 levels/it/intro/risky create mode 100644 levels/it/intro/sequence create mode 100644 levels/it/intro/who-are-you create mode 100644 levels/it/low-level/basics create mode 100644 levels/it/low-level/blob-create create mode 100644 levels/it/low-level/blob-remove create mode 100644 levels/it/low-level/commit-create create mode 100644 levels/it/low-level/commit-parents create mode 100644 levels/it/low-level/commit-rhombus create mode 100644 levels/it/low-level/index-add create mode 100644 levels/it/low-level/index-remove create mode 100644 levels/it/low-level/index-update create mode 100644 levels/it/low-level/puzzle-apocalypse create mode 100644 levels/it/low-level/puzzle-precious-blob create mode 100644 levels/it/low-level/puzzle-trees-all-the-way-down create mode 100644 levels/it/low-level/ref-create create mode 100644 levels/it/low-level/ref-move create mode 100644 levels/it/low-level/ref-remove create mode 100644 levels/it/low-level/sequence create mode 100644 levels/it/low-level/symref-create create mode 100644 levels/it/low-level/symref-no-deref create mode 100644 levels/it/low-level/tree-create create mode 100644 levels/it/low-level/tree-nested create mode 100644 levels/it/low-level/tree-read create mode 100644 levels/it/low-level/welcome create mode 100644 levels/it/merge/conflict create mode 100644 levels/it/merge/merge create mode 100644 levels/it/merge/merge-abort create mode 100644 levels/it/merge/sequence create mode 100644 levels/it/remotes/friend create mode 100644 levels/it/remotes/problems create mode 100644 levels/it/remotes/sequence create mode 100644 levels/it/sandbox/empty create mode 100644 levels/it/sandbox/remote create mode 100644 levels/it/sandbox/sequence create mode 100644 levels/it/sandbox/three-commits create mode 100644 levels/it/sequence create mode 100644 levels/it/shit-happens/bad-commit create mode 100644 levels/it/shit-happens/pushed-something-broken create mode 100644 levels/it/shit-happens/reflog create mode 100644 levels/it/shit-happens/restore-a-file create mode 100644 levels/it/shit-happens/restore-a-file-from-the-past create mode 100644 levels/it/shit-happens/sequence create mode 100644 levels/it/stash/sequence create mode 100644 levels/it/stash/stash create mode 100644 levels/it/stash/stash-branch create mode 100644 levels/it/stash/stash-clear create mode 100644 levels/it/stash/stash-merge create mode 100644 levels/it/stash/stash-pop create mode 100644 levels/it/tags/add-tag create mode 100644 levels/it/tags/add-tag-later create mode 100644 levels/it/tags/remote-tag create mode 100644 levels/it/tags/remove-tag create mode 100644 levels/it/tags/sequence create mode 100644 levels/it/unused/checkout create mode 100644 levels/it/unused/clone create mode 100644 levels/it/unused/commit create mode 100644 levels/it/unused/commit-a create mode 100644 levels/it/unused/fetch create mode 100644 levels/it/unused/files-move create mode 100644 levels/it/unused/index-mv create mode 100644 levels/it/unused/init create mode 100644 levels/it/unused/pull-push create mode 100644 levels/it/unused/remotes-add create mode 100644 levels/it/unused/remotes-delete create mode 100644 levels/it/unused/restore create mode 100644 levels/it/unused/split create mode 100644 levels/it/unused/steps create mode 100644 levels/it/unused/who-are-you create mode 100644 levels/it/workflows/gitignore create mode 100644 levels/it/workflows/pr create mode 100644 levels/it/workflows/sequence diff --git a/levels/it/bisect/bisect b/levels/it/bisect/bisect new file mode 100644 index 0000000..0b66edb --- /dev/null +++ b/levels/it/bisect/bisect @@ -0,0 +1,43 @@ +title = Yellow brick road +cards = checkout commit-auto reset-hard bisect-start bisect-good bisect-bad + +[description] + +(Please zoom out a bit using your mouse wheel! :D) + +Oh no! You have lost your key at some point during the day! + +Sure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly! + +First, play the "bisect start" card. Then, go to a commit where you don't have the key, and play the "bisect bad" card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the "bisect good card". + +After you've found the last good commit, reset the main branch to it. What happened to the key after you lost it? + +[setup] + +echo "You still have your key." > you + +for i in {1..30}; do + if test $i -eq 12; then + echo "Your pocket is empty." > you + echo "Is on the ground." > key + fi + if test $i -eq 13; then + echo "Is holding a key in its beak." > bird + rm key + fi + if test $i -eq 14; then + rm bird + fi + git add . + git commit --allow-empty -m "$i" +done + +[win] + +# Find the last good commit +test "$(git log --pretty=%s main | head -1)" -eq 11 + +[congrats] + +Well done! :) The only problem is that you now have to walk all the way back home, again... diff --git a/levels/it/bisect/sequence b/levels/it/bisect/sequence new file mode 100644 index 0000000..e8018fe --- /dev/null +++ b/levels/it/bisect/sequence @@ -0,0 +1 @@ +bisect diff --git a/levels/it/branches/branch-create b/levels/it/branches/branch-create new file mode 100644 index 0000000..110d929 --- /dev/null +++ b/levels/it/branches/branch-create @@ -0,0 +1,44 @@ +title = Creating branches +cards = checkout commit-auto branch branch-delete reset-hard + +[description] + +You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties! + +To make it easier to tell which timeline is which, you can create time portals! (We call these "branches".) + +[cli] + +Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called "birthday", you can type `git checkout birthday` to travel to it! + +[setup] + +echo "You wrap the birthday present, and grab your concert ticket." > you +git add . +git commit -m "Evening preparations" +echo "You go to the birthday party!" >> you +git add . +git commit -m "Go to the birthday" + +git checkout HEAD~1 +echo "You go to the concert!" > you +git add . +git commit -m "Go to the concert" + +git checkout HEAD~1 + +git branch -D main + +[win] + +# Create a branch called 'birthday' that points to the birthday timeline. +git show birthday | grep 'to the birthday' + +# Create a branch called 'concert' that points to the concert timeline. +git show concert | grep 'to the concert' + +[congrats] + +Now you can travel between those branches easily (using `git checkout`) - try it! + +Your friend is happy that you made it to the birthday party and you also got your concert ticket signed. Yay! diff --git a/levels/it/branches/branch-remove b/levels/it/branches/branch-remove new file mode 100644 index 0000000..3b576e0 --- /dev/null +++ b/levels/it/branches/branch-remove @@ -0,0 +1,47 @@ +title = Deleting branches +cards = checkout commit-auto reset-hard branch-delete + +[description] + +Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks! + +This Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around. + +[setup] + +echo You leave your house and start walking to school. > you +git add . +git commit -m "Good morning!" + +echo You walk on the right side of the street. >> you +git commit -am "Right side" + +echo You jump over an manhole in the walkway, and arrive at school on time. >> you +git commit -am "Jump" + +git checkout HEAD^ -b friend +echo Suddenly, you fall down, splash into stinking water, and are eaten by an alligator. >> you +git commit -am "A new friend" + +git checkout HEAD~2 -b music +echo You walk on the left side of the street. >> you +git commit -am "Left side" + +echo Because you\'re kind of late, you start running. Someone throws a piano out of their windows, and it smashes you. >> you +git commit -am "Sounds nice" + +git checkout HEAD^ -b ice-cream +echo You\'re not in a hurry, and walk slowly. You even get some ice cream on your way. You arrive at school too late, your teacher is angry, and you are expelled. >> you +git commit -am "Yum" + +git branch -M main leap +git checkout leap^^ + +[win] + +# Find the bad branches and delete them. Keep only the best one. +test "$(git show-ref --heads | cut -f2 -d' ')" = "$(echo refs/heads/leap)" + +[congrats] + +On second thought, maybe you even prefer the ice cream timeline to the main one? :) diff --git a/levels/it/branches/checkout-commit b/levels/it/branches/checkout-commit new file mode 100644 index 0000000..87061d8 --- /dev/null +++ b/levels/it/branches/checkout-commit @@ -0,0 +1,43 @@ +title = Moving through time +cards = checkout commit-auto + +[description] + +The yellow boxes are frozen points in time, we call them "commits"! You can travel between them using the "checkout" card! (Try it!) + +Can you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit! + +[cli] + +To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want! + +This will insert the commit's unique identifier! + +[setup] + +echo "This piggy bank belongs to the big sister. +It contains 10 coins." > piggy_bank +git add . +git commit -m "The beginning" + +echo "A young girl with brown, curly hair." > little_sister +git add . +git commit -m "Little sister comes in" + +echo "Has 10 coins." >> little_sister +echo "This piggy bank belongs to the big sister. +It is empty." > piggy_bank +git add . +git commit -m "Little sister does something" + +git checkout HEAD^^ +git branch -df main + +[win] + +# Restore sisterly peace. +{ git show HEAD:piggy_bank | grep "10 coins"; } && { git show HEAD:little_sister | grep -v "10 coins"; } && { git rev-parse HEAD^^^; } + +[congrats] + +Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations... diff --git a/levels/it/branches/fork b/levels/it/branches/fork new file mode 100644 index 0000000..a58dcf5 --- /dev/null +++ b/levels/it/branches/fork @@ -0,0 +1,65 @@ +title = Make parallel commits +cards = checkout commit-auto + +[description] + +Did you know that creating parallel timelines is perfectly legal and safe? It's true! + +Can you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy! + +[cli] + +The blue animal represents a concept known as the "HEAD pointer" in Git: It shows you which commit is the current one. + +Here's a cool trick to go to the previous commit: + + git checkout HEAD^ + +You can also go back two commits by typing, for example: + + git checkout HEAD~2 + +[setup] + +mkdir cage +echo "Looks very hungry." > cage/lion + +echo "A small child. +It really loves cats!" > child +git add . +git commit -m "The beginning" + +echo "It's holding a lollipop." >> child +git commit -am "The child buys something" + +mv child cage +git add . +git commit -m "The child climbs somewhere" + +git rm cage/child +echo "Looks happy. :)" > cage/lion +git add . +git commit -m "Oh no" + +echo "It's sleeping." > cage/lion +git add . +git commit -m "Nap time!" + +git checkout --detach +git branch -d main + +[win] + +# Make sure that the child is happy. +git ls-tree --name-only -r HEAD | grep child + +# Make sure that the lion gets something to eat. +git show HEAD:cage/lion | grep -v "very hungry" + +[congrats] + +Whew, good job! This seems like a *much* better outcome. + +Feel free to add more parallel timelines, or make them longer. + +If you're ready, our next mission is already waiting... diff --git a/levels/it/branches/grow b/levels/it/branches/grow new file mode 100644 index 0000000..77fe360 --- /dev/null +++ b/levels/it/branches/grow @@ -0,0 +1,49 @@ +title = Branches grow with you! +cards = checkout commit-auto branch branch-delete reset-hard + +[description] + +Note that there are two options to "travel to the end of a timeline": + +First, you can directly travel to the commit, like we've done it before. + +And second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline! + +[cli] + +To travel to a branch, type `git checkout name_of_the_branch`. + +And to travel to the last commit, type `git checkout --detach name_of_the_branch`. + +[setup] + +echo "You wrap the birthday present, and grab your concert ticket." > you +git add . +git commit -m "Evening preparations" +echo "You go to the birthday party!" >> you +git add . +git commit -m "Go to the birthday" +git branch birthday + +git checkout HEAD~1 +echo "You go to the concert!" > you +git add . +git commit -m "Go to the concert" +git branch concert + +git checkout HEAD~1 + +git branch -D main + +[win] + +# Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit +for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do + if test $(git rev-parse $commit^) = $(git rev-parse birthday); then + return 0 + fi +done +return 1 + +# Travel to the blue 'concert' branch, make a change to 'you', and a commit. +git show concert^ | grep "Go to the concert" diff --git a/levels/it/branches/reorder b/levels/it/branches/reorder new file mode 100644 index 0000000..1c36c08 --- /dev/null +++ b/levels/it/branches/reorder @@ -0,0 +1,89 @@ +title = Moving branches around +cards = checkout commit-auto merge reset-hard + +[description] + +One of your colleagues messed up here, and put the branches in the wrong timelines! + +You could delete and re-create these branches - but you can also directly move them to different commits, by using + + git checkout + +on the branch names, and then using + + git reset --hard + +on the commit where you want the branch to be. + +The donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch! + +[setup] + +echo "You do not have a baguette. + +You do not have coffee. + +You do not have a donut." > you + +git add . +git commit -m "The Beginning" + +git checkout -b coffee +echo "You have a baguette. + +You do not have coffee. + +You do not have a donut." > you +git add . +git commit -m "You buy a baguette" + +echo "You ate a baguette. + +You do not have coffee. + +You do not have a donut." > you +git add . +git commit -m "You eat the baguette" + +git checkout -b baguette main +echo "You do not have a baguette. + +You have coffee. + +You do not have a donut." > you +git add . +git commit -m "You buy some coffee" + +echo "You do not have a baguette. + +You drank coffee. + +You do not have a donut." > you +git add . +git commit -m "You drink the coffee" + +git checkout -b donut main +echo "You do not have a baguette. + +You do not have coffee. + +You have a donut." > you +git add . +git commit -m "You buy a donut" + +git checkout --detach main + +[win] + +# Did you eat a baguette on the baguette branch? +git show baguette:you | grep "You ate.*baguette" + +# Did you drink a coffee on the coffee branch? +git show coffee:you | grep "You drank.*coffee" + +# Did you eat a donut on the donut branch? +git show donut:you | grep "You ate.*donut" + +[actions] + +test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Remember to checkout the blue branch tag when you want it to grow with the timeline." diff --git a/levels/it/branches/sequence b/levels/it/branches/sequence new file mode 100644 index 0000000..2619ea0 --- /dev/null +++ b/levels/it/branches/sequence @@ -0,0 +1,6 @@ +checkout-commit +fork +branch-create +grow +branch-remove +reorder diff --git a/levels/it/changing-the-past/rebase b/levels/it/changing-the-past/rebase new file mode 100644 index 0000000..6ed89a8 --- /dev/null +++ b/levels/it/changing-the-past/rebase @@ -0,0 +1,86 @@ +title = Rebasing +cards = checkout commit-auto reset-hard rebase + +[description] + +Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all. + +See the "rebase" card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops. + +Again, we want to make that our base reality - the "main" branch should point to that timeline! + +[setup] + +echo "You do not have a baguette. + +You do not have coffee. + +You do not have a donut." > you + +git add . +git commit -m "The Beginning" + +git checkout -b baguette main +echo "You have a baguette. + +You do not have coffee. + +You do not have a donut." > you +git add . +git commit -m "You buy a baguette" + +echo "You ate a baguette. + +You do not have coffee. + +You do not have a donut." > you +git add . +git commit -m "You eat the baguette" + +git checkout -b coffee main +echo "You do not have a baguette. + +You have coffee. + +You do not have a donut." > you +git add . +git commit -m "You buy some coffee" + +echo "You do not have a baguette. + +You drank coffee. + +You do not have a donut." > you +git add . +git commit -m "You drink the coffee" + +git checkout -b donut main +echo "You do not have a baguette. + +You do not have coffee. + +You have a donut." > you +git add . +git commit -m "You buy a donut" + +echo "You do not have a baguette. + +You do not have coffee. + +You ate a donut." > you +git add . +git commit -m "You eat the donut" + +git checkout --detach main + + +[win] + +# Order all tree branches into one and move the main branch ref +{ git show main:you | grep "You ate.*baguette"; } && { git show main:you | grep "You drank.*coffee"; } && { git show main:you | grep "You ate.*donut"; } && { test "$(git log main --oneline | wc -l)" -eq 7; } + +[congrats] + +Notice how the other timelines and commits are still there - if anything goes wrong, you can also travel back to them. + +It's really hard to actually *destroy* stuff with your time machine. diff --git a/levels/it/changing-the-past/reorder b/levels/it/changing-the-past/reorder new file mode 100644 index 0000000..04f66cb --- /dev/null +++ b/levels/it/changing-the-past/reorder @@ -0,0 +1,78 @@ +title = Reordering events +cards = checkout commit-auto reset-hard rebase-interactive cherry-pick + +[description] + +Oops, looks like there's something messed up here. Can you put the events back into their correct order? + +There are two ways to do this: You can drag the "interactive rebase" card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it. + +Or you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches! + +[setup] + +echo "You just woke up. + +You are NOT wearing underwear. + +You are NOT wearing pants. + +You are NOT wearing a shirt. + +You are NOT wearing shoes." > you +git add . + +git commit -m "The Beginning" + +echo "You just woke up. + +You are NOT wearing underwear. + +You are NOT wearing pants. + +You are NOT wearing a shirt. + +You are wearing shoes." > you +git commit -am "Put on shoes" + +echo "You just woke up. + +You are NOT wearing underwear. + +You are wearing pants. + +You are NOT wearing a shirt. + +You are wearing shoes." > you +git commit -am "Put on pants" + +echo "You just woke up. + +You are wearing underwear. + +You are wearing pants. + +You are NOT wearing a shirt. + +You are wearing shoes." > you +git commit -am "Put on underwear" + +echo "You just woke up. + +You are wearing underwear. + +You are wearing pants. + +You are wearing a shirt. + +You are wearing shoes." > you +git commit -am "Put on shirt" + +[win] + +# Reorder the commits to dress yourself in the correct way +{ git log main --oneline | perl -0777 -ne'exit(1) if not /shoes[\s\S]*pants[\s\S]*underwear/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; } + +[congrats] + +Feel free to reset the level and try the other strategy! Which one do you like better? diff --git a/levels/it/changing-the-past/sequence b/levels/it/changing-the-past/sequence new file mode 100644 index 0000000..43c5d08 --- /dev/null +++ b/levels/it/changing-the-past/sequence @@ -0,0 +1,2 @@ +rebase +reorder diff --git a/levels/it/files/files-add b/levels/it/files/files-add new file mode 100644 index 0000000..0676df6 --- /dev/null +++ b/levels/it/files/files-add @@ -0,0 +1,32 @@ +title = Interior design +cards = file-new file-delete + +[description] + +Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile, +you see that their colors match the color of your bed! + +Build up your two pieces of furniture by playing the touch card. +Then name your furniture - you can choose whatever you like. + +Make sure the colors match! You can find the bed's color in its description. +Don't forget to add a color and description to your new furnitures, too! + +[setup] + +echo A yellow cozy bed. > bed + +[win] + +# Add two more pieces of furniture +NUM_FILES="$(ls | wc -l)" +test "$NUM_FILES" -ge 3 + +# Make sure the colors match your bed's color. +NUM_FILES="$(ls | wc -l)" +YELLOW_FILES="$(grep -li yellow * | wc -l)" +test "$NUM_FILES" -ge 2 && test "$YELLOW_FILES" = "$NUM_FILES" + +[congrats] + +Don't you immediately feel more at home? diff --git a/levels/it/files/files-delete b/levels/it/files/files-delete new file mode 100644 index 0000000..7bf33be --- /dev/null +++ b/levels/it/files/files-delete @@ -0,0 +1,36 @@ +title = Unexpected Roommates +cards = file-delete + +[description] + +The first day at Time Travel School comes to an end and you receive the key to your room. +Full of excitement you open the door just to find... spider webs! Spider webs everywhere! + +Remove all the spider webs you can find with the remove card! + +[cli] + +On the command line, you can easily delete all files ending in -web using this command: + + rm *web + +[setup] + +echo A tiny spider web is next to your window. > tiny_web +echo A big spider web sticks above your bed. > big_web +echo A cozy bed. > bed +echo An extra thick spider web is right beside your door. > thick_web + +[win] + +# Remove all spider webs. +! ls | grep thick_web && +! ls | grep big_web && +! ls | grep tiny_web + +# But make sure you keep your bed! +ls | grep bed + +[congrats] + +Your room looks now very tidy and cozy! Time to unpack your stuff! diff --git a/levels/it/files/sequence b/levels/it/files/sequence new file mode 100644 index 0000000..cb24408 --- /dev/null +++ b/levels/it/files/sequence @@ -0,0 +1,3 @@ +files-delete +files-add + diff --git a/levels/it/index/add b/levels/it/index/add new file mode 100644 index 0000000..e627917 --- /dev/null +++ b/levels/it/index/add @@ -0,0 +1,38 @@ +title = Updating files in the index +cards = add commit checkout + +[description] + +So you start working, and make changes to your files! Git lets you choose which of these changes you want to put in the next commit. This is like updating the index version of that file to the new version. + +This allows you to have smaller commits, that describe better what you changed! + +The command for this is the same - `git add`! + +[setup] + +echo a > a +echo b > b +echo c > c +git add . +git commit -m "Initial commit" + +[win] + +# Make changes to all files! +test "$(cat a)" != "a" && +test "$(cat b)" != "b" && +test "$(cat c)" != "c" + +# Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b! + +test "$(git show main:a)" != "a" && +test "$(git show main:b)" != "b" && +test "$(git show main:c)" != "c" && +test "$(git show main^:a)" != "a" && +test "$(git show main^:b)" == "b" && +test "$(git show main^:c)" != "c" + +[congrats] + +Well done! Try tavelling between the commits using `git checkout`, so you can look at their contents again! diff --git a/levels/it/index/change b/levels/it/index/change new file mode 100644 index 0000000..f1e377d --- /dev/null +++ b/levels/it/index/change @@ -0,0 +1,31 @@ +title = Update files in the index +cards = add commit + +[description] + +When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file. + +Let's try that! + +The icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same! + +[win] + +Good! The index is sometimes also called the "staging area" - it contains exactly what ends up in the next commit when you use `git commit`! + +[setup] + +echo "The candle is burning with a blue flame." > candle +git add . +git commit -m "The beginning" + +[win] + +# Make a change to the candle. +test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed + +# Add the candle. +test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added + +# Make a commit. +test "$(git diff --name-only HEAD HEAD^)" = "candle" diff --git a/levels/it/index/checkout b/levels/it/index/checkout new file mode 100644 index 0000000..3c01b09 --- /dev/null +++ b/levels/it/index/checkout @@ -0,0 +1,25 @@ +title = Checking out files from the index +cards = add reset-file checkout-file commit + +[description] + +So you've made changes to your files, but you decide that you don't want to keep them! You can use `git checkout` for that! + +What happens if you have already update the index, like in file c? You have to reset the index first! + +[setup] + +echo a > a +echo b > b +echo c > c +git add . +git commit -m "Initial commit" +echo x > a +echo x > b +echo x > c +git add c + +[win] + +# Remove all changes in your local files! +test "$(git diff --name-only | wc -l)" -eq 0 diff --git a/levels/it/index/compare b/levels/it/index/compare new file mode 100644 index 0000000..97fa6c7 --- /dev/null +++ b/levels/it/index/compare @@ -0,0 +1,51 @@ +title = Step by step +cards = checkout commit-auto + +[description] + +Welcome to today's lesson! We're going to learn how to make commits with more precision! + +Have a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened. + +[win] + +# Right! Having each change in its own commit makes it easier to understand what's going on! Let's learn how to do that! +git branch --show-current | grep step-by-step + +[setup] + +echo "A small, but heavy glass ball." > ball +echo "A thin book, that's standing upright." > book +echo "A candle, burning with a blue flame." > candle +echo "A smoke detector. It's absolutely silent." > smoke_detector + +git add . +git commit -m "The beginning" + +git branch -M all-at-once + +echo "The ball is now touching the book." > ball +echo "The book has fallen over." > book +echo "The candle has been blown out." > candle + +git commit -am "The end" + +git checkout HEAD^ + +git checkout -b step-by-step + +echo "The ball is now touching the book." > ball +git commit -am "The ball rolls towards the book" + +echo "The book has fallen over." > book +git commit -am "The book falls over" + +echo "The candle has been blown out." > candle +git commit -am "The book blows out the candle" + +git checkout HEAD~3 + +[win] + +# Pick the timeline that's clearer, and make the alarm go off! +git show step-by-step:smoke_detector | tail -n 1 | grep -v "absolutely silent" diff --git a/levels/it/index/new b/levels/it/index/new new file mode 100644 index 0000000..4df3930 --- /dev/null +++ b/levels/it/index/new @@ -0,0 +1,28 @@ +title = Add new files to the index +cards = add commit + +[description] + +So far, when we made a commit, we've always recorded the current status of all objects, right? + +But Git allows you to pick which changes you want to put in a commit! + +To learn how that works, we need to learn about the "index"! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser! + +Initially, the index is empty. To make a commit that contains a new file, we need to add it! + +[cli] + +You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time! + +[setup] + +echo "The candle is burning with a blue flame." > candle + +[win] + +# Add the candle. +test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added + +# Make a commit. +test "$(git ls-tree --name-only HEAD)" = "candle" diff --git a/levels/it/index/reset b/levels/it/index/reset new file mode 100644 index 0000000..5e21973 --- /dev/null +++ b/levels/it/index/reset @@ -0,0 +1,37 @@ +title = Resetting files in the index +cards = add reset-file commit + +[description] + +See the dark shadow behind the icons? That's the version of the file in the last commit! + +For example, these candles have been blown out, and that change has been added. + +But you decide that this was a mistake! You only want to blow out the red candle in the next commit! + +If you already have updated the index to a changed file, but want to reset it, you can use `git reset`! + +[setup] + +echo "It's burning!" > red_candle +echo "It's burning!" > green_candle +echo "It's burning!" > blue_candle +git add . +git commit -m "The beginning" + +echo "It's been blown out." > red_candle +echo "It's been blown out." > green_candle +echo "It's been blown out." > blue_candle +git add . + +[win] + +# Reset the changes in the green and blue candles! +git show :green_candle | grep burning && +git show :blue_candle | grep burning && +git show :red_candle | grep -v burning + +# And make a commit! +git show main:green_candle | grep burning && +git show main:blue_candle | grep burning && +git show main:red_candle | grep -v burning diff --git a/levels/it/index/rm b/levels/it/index/rm new file mode 100644 index 0000000..637fd22 --- /dev/null +++ b/levels/it/index/rm @@ -0,0 +1,24 @@ +title = Delete a file in the next commit +cards = add reset-file checkout-file rm file-delete commit + +[description] + +If you want to remove a file in the next commit, you can use `git rm`! This will both delete the file locally, and in the index. + +If a file is modified, you'll need to reset these changes first/reset the files. + +[setup] + +echo a > a +echo x > b +echo x > c +git add . +git commit -m "Initial commit" +echo x > a +echo b > b +git add b + +[win] + +# Make a commit where all files are deleted ¯\_(^_^)_/¯ +test "$(git ls-tree main | wc -l)" -eq 0 diff --git a/levels/it/index/sequence b/levels/it/index/sequence new file mode 100644 index 0000000..42f7f48 --- /dev/null +++ b/levels/it/index/sequence @@ -0,0 +1,5 @@ +compare +new +change +reset +steps diff --git a/levels/it/index/steps b/levels/it/index/steps new file mode 100644 index 0000000..36e7500 --- /dev/null +++ b/levels/it/index/steps @@ -0,0 +1,53 @@ +title = Adding changes step by step +cards = add reset-file commit + +[description] + +The index is really useful, because it allows us to be precise about which changes we want to include in each commit! + +[setup] + +echo "A hammer, balancing on its handle." > hammer +echo "A bottle, containing a clear liquid." > bottle +echo "A white sugar cube." > sugar_cube + +git add . +git commit -m "The beginning" + +[win] + +# Make changes to all three objects, to form a logical sequence of events! +test "$(git diff --name-only | wc -l)" -eq 3 || file -f .git/candle-changed && touch .git/candle-changed + +# Only add one of these changes! +test "$(git diff --cached --name-only | wc -l)" -eq 1 || file -f .git/candle-added && touch .git/candle-added + +# And make a commit. +COUNT=0 +for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do + if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then + COUNT=$((COUNT+1)) + fi +done + +test "$COUNT" -ge 1 + +# Make a second commit that only records a single change. +COUNT=0 +for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do + if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then + COUNT=$((COUNT+1)) + fi +done + +test "$COUNT" -ge 2 + +# And a third one. +COUNT=0 +for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do + if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then + COUNT=$((COUNT+1)) + fi +done + +test "$COUNT" -ge 3 diff --git a/levels/it/intro/cli b/levels/it/intro/cli new file mode 100644 index 0000000..c643fc1 --- /dev/null +++ b/levels/it/intro/cli @@ -0,0 +1,27 @@ +title = La line di comando +cards = + +[description] + +Queste carte da gioco sono state disegnate per essere usate e ricordate facilmente! Ti consigliamo di attenerti a loro se non hai molta esperienza di Git! + +[cli] + +Ma c'è un'altra via per interagire con Git: + +Prova a digitare `git init` nel terminale qui sotto e premere il pulsante Enter! + +[setup] + +rm -rf .git + +[win] + +# Inizializza la macchina del tempo! +test -d .git + +[congrats] + +Perfetto! Al posto di usare le carte da gioco, puoi anche fare tutto dalla line di comando! + +La line di comando e piuttosto potente! A volte, puoi usarla per risolvere le attività più velocemente che con l'interfaccia grafica. diff --git a/levels/it/intro/commit b/levels/it/intro/commit new file mode 100644 index 0000000..1141ae1 --- /dev/null +++ b/levels/it/intro/commit @@ -0,0 +1,32 @@ +title = Il tuo primo commit! +cards = commit-auto + +[description] + +Puoi usare la tua macchina del tempo per scattare istantanee degli oggetti intorno a te! Qui puoi metterlo in pratica! + +(Il tuo insegnante versa un pò di acqua nel bicchiere) + +[cli] +Nuovamente, al posto di usare le carte, puoi scrivere i comandi, che sono stampati sulle carte, nel terminale in basso! + +Questo è totalmente opzionale! Ma questa è una conoscenza super utile nel mondo reale - e ti farà avere un distintivo scintillante! :) + +[setup] + +echo "Il bicchiere è pieno di acqua." > glass + +[win] + +# Crea un'istantanea del bicchiere (un "commit") +git rev-parse HEAD + +# Cambia il contenuto del bicchiere! +! test "$(cat glass)" = "Il bicchiere è pieno di acqua." + +# E crea un secondo "commit"! +git rev-parse HEAD^ && ! test "$(git show main:glass)" = "Il bicchiere è bieno di acqua." + +[congrats] + +Perfetto! Puoi provare a creare altri "commit". Quando ti sentirai a posto, premi su "Next Level". diff --git a/levels/it/intro/copies b/levels/it/intro/copies new file mode 100644 index 0000000..8f8d6ce --- /dev/null +++ b/levels/it/intro/copies @@ -0,0 +1,42 @@ +title = Crea una copia +cards = + +[description] + +Questa volta, stai facendo molte copie di backup - puoi guardarli cliccandoci sopra! + +[congrats] + +Okay, questo è un modo di lavorare. + +Ma sei preoccupato che ti ritroverai con centinaia di copie di questo modulo e sarà difficile tenerne traccia nel tempo. + +Specialmente quando lavori con altre persone, inviare copie avanti ed indietro non sembra l'ideale. + +Fermati, devi provare questa macchina del tempo! + +[setup] + +rm -rf .git + +echo "~ Perchè voglio imparare Git ~ + +(Devo ancora scriverlo.)" >> form.txt + + +echo "~ Perchè volgio imparare Git ~ + +- Così posso annullare gli errori" >> form2.txt + + +echo "~ Perchè volgio imparare Git ~ + +- Così posso annullare gli errori +- Per tracciare i mie progetti attraverso il tempo" >> form2_final.txt + +cp form2_final.txt form2_really_final.txt + +[win] + +# Aggiungi una nuova line al file form2_really_final.txt! +test "$(cat form2_really_final.txt | wc -l )" -ge 5 diff --git a/levels/it/intro/init b/levels/it/intro/init new file mode 100644 index 0000000..260f6e9 --- /dev/null +++ b/levels/it/intro/init @@ -0,0 +1,24 @@ +title = Entra nella machina del tempo +cards = init + +[description] + +Sei stato accettato nella scuola della macchina del tempo! Questo è il tuo primo giorno! Il tuo insegnate ti spiega: + +"Per fare qualsiasi cosa con una macchina del tempo, devi prima inizializzarla!" + +Trascina quella carta blu verso l'alto per usarla! + +[setup] + +rm -rf .git + +[win] + +# Inizializzazione della macchina del tempo +test -d .git + +[congrats] + +Perfetto! Vedi quel piccolo animale che è apparso? Sarà il tuo compagno e ti mostrerà dove ti trovi nel tempo! + diff --git a/levels/it/intro/remote b/levels/it/intro/remote new file mode 100644 index 0000000..c0b582a --- /dev/null +++ b/levels/it/intro/remote @@ -0,0 +1,52 @@ +title = Dai lavoriamo tutti assieme +cards = pull commit-auto push + +[description] + +Aggiungi il tuo nome nella nostra lista di studenti! + +Ho già un secondo "commit" nella mia macchina del tempo - Dai lavoriamo tutti assieme! + +[cli] + +Per tornare in dietro alle vecchie istruzioni, puoi premere la freccia in alto o in basso. In questo modo non devi digitare, nuovamente, le istruzioni. + +[congrats] + +Benvenuto nella scuola del viaggio nel tepo! :) Ci vediamo domani per la tua prima lezione! + +[setup] + +echo "~ Lista degli attuali studenti ~" > students +git add . +git commit -m "Versione iniziale" +git push -u teacher main + +git update-ref -d refs/remotes/teacher/main + +[setup teacher] + +git reset --hard main + +echo " +- Sam +- Alex" >> students + +git add . +git commit -m "Aggiunti due studenti" + +[win] + +# Ottieni il secondo "commit" dal tuo insegnante usando `git pull`. +test "$(git log --oneline teacher/main | wc -l)" -ge 2 + +# Aggiungi il tuo nome alla lista degli studenti. +test "$(cat students |wc -l)" -ge 5 + +# Crea un'istantanea dei risultati. +test "$(git show main:students |wc -l)" -ge 5 + +[win teacher] + +# E usa `git push` per inviarlo al tuo insegnante! +test "$(git show main:students |wc -l)" -ge 5 diff --git a/levels/it/intro/risky b/levels/it/intro/risky new file mode 100644 index 0000000..0203433 --- /dev/null +++ b/levels/it/intro/risky @@ -0,0 +1,42 @@ +title = Vivere è pericoloso +cards = + +[description] + +Quindi hai deciso di fare domanda per la scuola di viaggio nel tempo, per usare la macchina del tempo chiamata "Git"! + +Che emozione! + +Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il quale vuoi imparare Git. + +[congrats] + +All'improvviso, il tuo gatto salta sul tavolo, strappa via il modulo, e scappa via! Oh no. Tutto il tuo duro lavoro, andato! + +Devi trovare una buona soluzione. + +(Premi "Next Level" appena sei pronto!) + +[setup] + +rm -rf .git + +echo "~ Perchè voglio imparare Git ~ + +- Così posso cancellare gli errori +- Per seguire il mio progetto attraverso il tempo" >> form.txt + +[actions] + +test "$(cat form.txt | wc -l )" -ge 5 && echo "(E' stato rubato dal tuo gatto.) + + + + + +" > form.txt + +[win] + +# Aggiungi un'altra line a form.txt! +test "$(cat form.txt | wc -l )" -ge 5 diff --git a/levels/it/intro/sequence b/levels/it/intro/sequence new file mode 100644 index 0000000..aa225df --- /dev/null +++ b/levels/it/intro/sequence @@ -0,0 +1,6 @@ +risky +copies +init +cli +commit +remote diff --git a/levels/it/intro/who-are-you b/levels/it/intro/who-are-you new file mode 100644 index 0000000..abb94f3 --- /dev/null +++ b/levels/it/intro/who-are-you @@ -0,0 +1,38 @@ +title = Benvenuto nella scuola del viaggio nel tempo! +cards = config-name commit-auto checkout + +[description] + +Sei ancora confuso da tutto quello che sta succedendo. Il giorno seguente, decidi di iscriverti nella scuola del viaggio nel tempo! + +Il tuo insegnante del viaggio nel tempo ti saluta: "Ciao come va! Vuoi dirci il tuo nome?" + +[setup] + +git config --global user.name "TU" + +echo "~ Chi vuole imparare come si usa la macchina del tempo? ~ + +[ ] Per essere sicuro che il mio gatto non mangi il mio lavoro. +[ ] Così non devo tenere copie di tutti i miei saggi. +[ ] Per collaborare con altri studenti del viaggio nel tempo. +[ ] Altro, perfavore specifica:" > form + +[actions] + +test "$(git config user.name)" != "TU" && cat form | grep -v Signature && echo " +Firma: $(git config user.name)" >> form + +[win] + +# Presentati. +test "$(git config user.name)" != "TU" + +# Compila l'iscrizione e inviala! +git show main:form | grep '\[[xX]\]' + +[congrats] + +"Siamo lieti di averti con noi! + +Git puoi aiutarti a correggere i problemi del passato! Ti aiuta a collaborare con gli studenti del viaggio nel tempo! E' davvero potente e e popolare! Ci vediamo domani per la tua prima lezione!" diff --git a/levels/it/low-level/basics b/levels/it/low-level/basics new file mode 100644 index 0000000..55374b5 --- /dev/null +++ b/levels/it/low-level/basics @@ -0,0 +1,26 @@ +[description] + +For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful: + +- ls +- echo content > file +- cat file +- mkdir dir + +Find the riddle in your current directory and put the answer into the file "answer"! + +[congrats] + +Omnomnom! + +For technical reasons, you can't use `cd` in this prototype yet. But there won't be a lot of interaction with the file system anyways. :) + +[setup] + +mkdir riddle +echo "ppl p" > riddle/consonants +echo "ae ie" > riddle/vowels + +[win] + +cat answer | grep -i "apple \\?pie" diff --git a/levels/it/low-level/blob-create b/levels/it/low-level/blob-create new file mode 100644 index 0000000..86f6254 --- /dev/null +++ b/levels/it/low-level/blob-create @@ -0,0 +1,38 @@ +[description] + +At its core, Git is very simple. It stores "objects", which are basically files identified by an "identifier" (short: ID). + +There are four types of objects: blobs, trees, commits, and tags. The simplest type is a "blob", which is just a piece of text. + +Let's create some blobs! To do that, create a file with the desired content, and then use + + git hash-object -w + +The flag -w means "write", and tells Git to actually write the new blob to the disk. + +Create three new blobs! + +[congrats] + +Tip: You can also use a command like this to create a blob in a single line: + + echo "awesome content" | git hash-object -w --stdin + +Did you already notice that you can drag and drop all objects? :) + +[setup] + +[setup goal] + +echo "Hi" > file1 +echo "Ho" > file2 +echo "Hu" > file3 +git hash-object -w file1 +git hash-object -w file2 +git hash-object -w file3 + +[win] + +BLOB_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep blob | wc -l) + +test "$BLOB_COUNT" -gt 2 diff --git a/levels/it/low-level/blob-remove b/levels/it/low-level/blob-remove new file mode 100644 index 0000000..bbc1b30 --- /dev/null +++ b/levels/it/low-level/blob-remove @@ -0,0 +1,27 @@ +[description] + +There's a simple command to remove all objects that are not referenced by anything: + + git prune + +Remove all blobs in this repository. + +[congrats] + +Generally, `git prune` will be useful if you want to clean up some objects you made. + +Alternatively, you can also click the "Reload" button to restart a level. + +[setup] + +echo "My master password is a1b2c3d4e5" | git hash-object -w --stdin +echo "This blob really should not exist" | git hash-object -w --stdin +echo "This is a virus" | git hash-object -w --stdin + +[setup goal] + +[win] + +OBJECT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | wc -l) + +test "$OBJECT_COUNT" -eq 0 diff --git a/levels/it/low-level/commit-create b/levels/it/low-level/commit-create new file mode 100644 index 0000000..79a8e52 --- /dev/null +++ b/levels/it/low-level/commit-create @@ -0,0 +1,37 @@ +[description] + +So a tree describes a directory structure at a specific point in time. + +It would be nice if we could remember when that state existed, and who authored it, right? + +Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using + + git commit-tree -m "Description of your commit" + +Make a commit from the tree in this repository! + +[setup] + +touch empty_file +git add . +git write-tree + +rm empty_file +git update-index --remove empty_file + +[setup goal] + +touch empty_file +git add . +git write-tree + +rm empty_file +git update-index --remove empty_file + +git commit-tree 3185 -m 'Clever commit message' + +[win] + +COMMIT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | wc -l) + +test "$COMMIT_COUNT" -gt 0 diff --git a/levels/it/low-level/commit-parents b/levels/it/low-level/commit-parents new file mode 100644 index 0000000..a2efb11 --- /dev/null +++ b/levels/it/low-level/commit-parents @@ -0,0 +1,31 @@ +[description] + +When using the commit-tree command, you can optionally specify a parent: + + git commit-tree -m "Description" -p + +Make a string of three commits! + +Hint: You'll need a tree object. What could be the easiest way to obtain one? + +[setup] + +[setup goal] + +git write-tree +FIRST_COMMIT=$(git commit-tree 4b82 -m 'First commit :O') +SECOND_COMMIT=$(git commit-tree 4b82 -p $FIRST_COMMIT -m 'Second commit :D') +THIRD_COMMIT=$(git commit-tree 4b82 -p $SECOND_COMMIT -m 'Third commit \o/') + +[win] + +COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ") + +for COMMIT in $COMMITS; do + echo a commit named $COMMIT + if [ $(git rev-list $COMMIT | wc -l) -ge 3 ]; then + return 0 + fi +done + +return 1 diff --git a/levels/it/low-level/commit-rhombus b/levels/it/low-level/commit-rhombus new file mode 100644 index 0000000..e320ca0 --- /dev/null +++ b/levels/it/low-level/commit-rhombus @@ -0,0 +1,30 @@ +[description] + +A commit can have multiple parents! You can specify the -p option multiple times, like this: + + git commit-tree -m "Description" -p -p + +Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them. + +[setup] + +[setup goal] + +TREE=$(git write-tree) +SOUTH=$(git commit-tree $TREE -m "South") +EAST=$(git commit-tree $TREE -m "East" -p $SOUTH) +WEST=$(git commit-tree $TREE -m "West" -p $SOUTH) +NORTH=$(git commit-tree $TREE -m "Nort" -p $EAST -p $WEST) + +[win] + +COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ") + +for COMMIT in $COMMITS; do + # My first parent's parents has to be the same as my second parent's parent. + if [ "$(git rev-parse --verify -q $COMMIT^1^)" = "$(git rev-parse --verify -q $COMMIT^2^)" ]; then + return 0 + fi +done + +return 1 diff --git a/levels/it/low-level/index-add b/levels/it/low-level/index-add new file mode 100644 index 0000000..633245c --- /dev/null +++ b/levels/it/low-level/index-add @@ -0,0 +1,37 @@ +[description] + +Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name! + +Git has a very powerful concept to store metadata related to blobs: the index! It's a list that relates blobs to filenames and access permissions. + +The most convenient option to add an entry to the index is via an existing file: + + echo "my content" > file + git update-index --add file + +Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like "directory/file"? + +[congrats] + +There's another way to add an entry to the index directly: + + git update-index --add --cacheinfo ,, + +The first three numbers of the mode describe the type of the entry, "100" is a regular file. + +The second three number describe the permissions. Only "644" (non-executable) and "755" (executable) are supported. + +You can insert the hash of an object into the terminal by right-clicking on it! :) + +[setup] + +[setup goal] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +[win] + +test "$(git ls-files | wc -l)" -ge 3 diff --git a/levels/it/low-level/index-remove b/levels/it/low-level/index-remove new file mode 100644 index 0000000..9816126 --- /dev/null +++ b/levels/it/low-level/index-remove @@ -0,0 +1,29 @@ +[description] + +To remove an entry from the index, use a command like this: + + git update-index --force-remove + +Remove all entries from the index! + +[setup] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +[setup goal] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +git update-index --force-remove file1 +git update-index --force-remove file2 +git update-index --force-remove file3 + +[win] + +test "$(git ls-files | wc -l)" -eq 0 diff --git a/levels/it/low-level/index-update b/levels/it/low-level/index-update new file mode 100644 index 0000000..047493d --- /dev/null +++ b/levels/it/low-level/index-update @@ -0,0 +1,33 @@ +[description] + +Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry! + +Put the content you want in a file with a matching name, and then run + + git update-index + +This will create a new blob, and update the hash of the entry to that blob. + +Update an entry in the index! + +[setup] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +[setup goal] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +echo "new content" > file1 +git update-index file1 + +[win] + +# This is not really a good test for the winning condition... +test "$(git ls-files -s | git hash-object --stdin)" != "10c4b28623e7e44e09f5a596450a50ab7ac31fbe" -a "$(git ls-files | wc -l)" -eq 3 diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/it/low-level/puzzle-apocalypse new file mode 100644 index 0000000..119784d --- /dev/null +++ b/levels/it/low-level/puzzle-apocalypse @@ -0,0 +1,41 @@ +[description] + +Delete all objects in this repository using git commands only! + +Useful commands: + + git prune + git reflog expire + +[setup] + +echo foo > foo +BLOB=$(git hash-object -w foo) +echo bar > bar +git add . +git commit -m "Initial commit" +echo blabber >> bar +git commit -a -m "Second commit" +git update-ref refs/important HEAD +git update-ref refs/interesting "$BLOB" + +[setup goal] + +echo foo > foo +BLOB=$(git hash-object -w foo) +echo bar > bar +git add . +git commit -m "Initial commit" +echo blabber >> bar +git commit -a -m "Second commit" +git update-ref refs/important HEAD +git update-ref refs/interesting "$BLOB" + +TREE=$(git mktree) +git read-tree $TREE +rm -rf .git/refs/* +rm -rf .git/objects/* + +[win] + +test "$(git cat-file --batch-check --batch-all-objects | wc -l)" -eq 0 diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/it/low-level/puzzle-precious-blob new file mode 100644 index 0000000..865cfdf --- /dev/null +++ b/levels/it/low-level/puzzle-precious-blob @@ -0,0 +1,28 @@ +[description] + +Create two trees pointing to the same blob! + +[setup] + +[setup goal] + +BLOB=$(echo "I am precious" | git hash-object -w --stdin) +git update-index --add --cacheinfo 100644,$BLOB,a +git write-tree +git update-index --force-remove a +git update-index --add --cacheinfo 100644,$BLOB,b +git write-tree +git update-index --force-remove b + +[win] + +TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") + +ALL_TREE_CHILDREN=$(for TREE in $TREES; do + git cat-file -p $TREE | cut -f1 | cut -f3 -d" " +done) + +NUMBER_OF_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | wc -l) +UNIQUE_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | sort -u | wc -l) + +test "$NUMBER_OF_CHILDREN" -gt "$UNIQUE_CHILDREN" diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/it/low-level/puzzle-trees-all-the-way-down new file mode 100644 index 0000000..bc3e58a --- /dev/null +++ b/levels/it/low-level/puzzle-trees-all-the-way-down @@ -0,0 +1,34 @@ +[description] + +Construct a chain of three trees, which don't point to anything else. + +This is hard! The `git mktree` command might be useful. + +[setup] + +[setup goal] + +git mktree +TREE=$(echo -e "040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\tdir" | git mktree) +echo -e "040000 tree $TREE\tdir" | git mktree + +[win] + +TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") + +for TREE in $TREES; do + if [ "$(git cat-file -p $TREE | wc -l)" -eq 1 ]; then + if [ "$(git cat-file -p $TREE | cut -f1 | grep tree | wc -l)" -eq 1 ]; then + # So the tree has exactly one child, and it is a tree! + TREE2=$(git cat-file -p $TREE | cut -f1 | grep tree | cut -f3 -d" ") + if [ "$(git cat-file -p $TREE2 | wc -l)" -eq 1 ]; then + if [ "$(git cat-file -p $TREE2 | cut -f1 | grep tree | wc -l)" -eq 1 ]; then + # Same for its child! \o/ + return 0 + fi + fi + fi + fi +done + +return 1 diff --git a/levels/it/low-level/ref-create b/levels/it/low-level/ref-create new file mode 100644 index 0000000..1cc4bcf --- /dev/null +++ b/levels/it/low-level/ref-create @@ -0,0 +1,42 @@ +[description] + +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/ + +Make sure to always start a ref's name with "refs/"! That's a convention that helps Git find all refs you create. If you forget the "refs/", you will not see the ref. + +Create refs that point to all objects in this repository! + +[setup] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +[setup goal] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/a $BLOB1 +git update-ref refs/b $BLOB2 +git update-ref refs/c $TREE +git update-ref refs/d $COMMIT + +[win] + +OBJECTS=$(git cat-file --batch-check='%(objectname)' --batch-all-objects | sort) +REF_TARGETS=$(git show-ref -s | sort | uniq) +test "$OBJECTS" = "$REF_TARGETS" diff --git a/levels/it/low-level/ref-move b/levels/it/low-level/ref-move new file mode 100644 index 0000000..e3b29e3 --- /dev/null +++ b/levels/it/low-level/ref-move @@ -0,0 +1,41 @@ +[description] + +You can point refs to a new location using the same command you use to create them: + + git update-ref refs/ + +As an exercise, make all refs in this repository point to the tree object! + +[setup] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/a "$BLOB1" +git update-ref refs/b "$COMMIT" + +[setup goal] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/a "$BLOB1" +git update-ref refs/b "$COMMIT" + +for REF in $(git for-each-ref --format='%(refname)'); do + git update-ref "$REF" "$TREE" +done + +[win] + +test "$(git show-ref -s | sort -u)" = "c7863f72467ed8dd44f4b8ffdb8b57ca7d91dc9e" diff --git a/levels/it/low-level/ref-remove b/levels/it/low-level/ref-remove new file mode 100644 index 0000000..d1fa982 --- /dev/null +++ b/levels/it/low-level/ref-remove @@ -0,0 +1,41 @@ +[description] + +And finally, to delete a ref, use + + git update-ref -d refs/ + +Delete all refs! :P (Well, except for HEAD. HEAD is special.) + +[setup] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/best_blob_ever "$BLOB1" +git update-ref refs/beautiful_commit "$COMMIT" + +[setup goal] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/best_blob_ever "$BLOB1" +git update-ref refs/beautiful_commit "$COMMIT" + +for REF in $(git for-each-ref --format='%(refname)'); do + git update-ref -d "$REF" +done + +[win] + +test "$(git show-ref | wc -l)" -eq 0 diff --git a/levels/it/low-level/sequence b/levels/it/low-level/sequence new file mode 100644 index 0000000..5feb0c8 --- /dev/null +++ b/levels/it/low-level/sequence @@ -0,0 +1,18 @@ +welcome +basics +blob-create +blob-remove +index-add +index-remove +index-update +tree-create +tree-read +tree-nested +commit-create +commit-parents +commit-rhombus +ref-create +ref-move +ref-remove +symref-create +symref-no-deref diff --git a/levels/it/low-level/symref-create b/levels/it/low-level/symref-create new file mode 100644 index 0000000..da933cb --- /dev/null +++ b/levels/it/low-level/symref-create @@ -0,0 +1,21 @@ +[description] + +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 + +Create a symbolic ref called "refs/rainbow"! + +[setup] + +[setup goal] + +BLOB=$(git hash-object -w --stdin) +git update-ref refs/double "$BLOB" +git symbolic-ref refs/rainbow refs/double + +[win] + +git symbolic-ref refs/rainbow diff --git a/levels/it/low-level/symref-no-deref b/levels/it/low-level/symref-no-deref new file mode 100644 index 0000000..458e669 --- /dev/null +++ b/levels/it/low-level/symref-no-deref @@ -0,0 +1,46 @@ +[description] + +When you have a symbolic ref (a ref pointing at another ref), and you decide you want it to be a regular ref again (pointing to an object), you're in for some trouble! :) + +What happens when you try pointing the symbolic ref directly to the blob using `git update-ref`? + +Oops! Turns out that when you reference a symbolic ref, it acts as if you had specified the ref it points to. To de-symbolic-ize it, use the `--no-deref` option directly after `update-ref`! + +Weird, huh? + +[congrats] + +Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs! + +You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :) + +Everything else is just convention and high-level commands that make interacting with the objects more convenient. + +We haven't covered: + +- tag objects (they are the fourth object type - a bit like refs with a description and an author) +- configuration (allows you to specify remote repositories, for example) +- working with local files (which is, uh, arguably pretty important :P) + +Thanks for playing! You're welcome to check out the "puzzle" levels in the dropdown, some of them are more advanced! + +[setup] + +BLOB1=$(echo delicious | git hash-object -w --stdin) +BLOB2=$(echo very | git hash-object -w --stdin) +git update-ref refs/curly "$BLOB1" +git symbolic-ref refs/fries refs/curly + +[setup goal] + +BLOB1=$(echo delicious | git hash-object -w --stdin) +BLOB2=$(echo very | git hash-object -w --stdin) +git update-ref refs/curly "$BLOB1" +git symbolic-ref refs/fries refs/curly + +git update-ref --no-deref refs/fries "$BLOB2" + +[win] + +git symbolic-ref refs/fries && return 1 +test "$(git show-ref -s refs/fries)" = "035e2968dafeea08e46e8fe6743cb8123e8b9aa6" diff --git a/levels/it/low-level/tree-create b/levels/it/low-level/tree-create new file mode 100644 index 0000000..3da3618 --- /dev/null +++ b/levels/it/low-level/tree-create @@ -0,0 +1,35 @@ +[description] + +After carefully building the index we want, it would be nice to save a permanent snapshot of it, right? + +This is what the second type of objects is for: trees! You can convert the index into a tree using + + git write-tree + +Try it! :) + +[congrats] + +Nice! + +Can you make a different tree? Modify the index, then call `git write-tree` again! + +[setup] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +[setup goal] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +git write-tree + +[win] + +git cat-file -p 21a638f28022064c1f1df20844278b494d197979 diff --git a/levels/it/low-level/tree-nested b/levels/it/low-level/tree-nested new file mode 100644 index 0000000..c7afce8 --- /dev/null +++ b/levels/it/low-level/tree-nested @@ -0,0 +1,38 @@ +[description] + +Trees can also point to other trees! This way, they can describe nested directory structures. + +When you add a file inside of a directory to the index, and then call `git write-tree`, it will create a nested tree for the directory, and attach the blob to it. + +To solve this level, build a little stick figure, as shown on the left - a tree that points to two blobs, as well to a tree that points to two blobs. + +[setup] + +[setup goal] + +echo "I'm the left arm" > arm1 +echo "I'm the right arm" > arm2 +mkdir hip +echo "I'm the left leg" > hip/leg1 +echo "I'm the right leg" > hip/leg2 +git add . +git write-tree + +[win] + +TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") + +for OUTER_TREE in $TREES; do + NUMBER_OF_BLOB_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep blob | wc -l) + NUMBER_OF_TREE_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep tree | wc -l) + + if [ $NUMBER_OF_BLOB_CHILDREN -eq 2 -a $NUMBER_OF_TREE_CHILDREN -eq 1 ]; then + TREE_CHILD=$(git cat-file -p $OUTER_TREE | cut -f1 | grep tree | cut -d" " -f3) + NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD=$(git cat-file -p $TREE_CHILD | cut -f2 -d" " | grep blob | wc -l) + if [ $NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD -eq 2 ]; then + return 0 + fi + fi +done + +return 1 diff --git a/levels/it/low-level/tree-read b/levels/it/low-level/tree-read new file mode 100644 index 0000000..ba8c440 --- /dev/null +++ b/levels/it/low-level/tree-read @@ -0,0 +1,51 @@ +[description] + +As soon as you have some tree objects, you can always read them and set the index exactly to their content! Unsurprisingly, the command is called + + git read-tree + +For , you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal! + +Try reading some of the trees in this repository into the index! + +[setup] + +EMPTY_TREE=$(git write-tree) + +echo "file 1" > file1 +echo "file 2" > file2 +git add . +git write-tree + +rm * +echo "file A" > fileA +echo "file B" > fileB +echo "file C" > fileC +git add . +TRIPLE_TREE=$(git write-tree) + +git read-tree "$EMPTY_TREE" + +[setup goal] + +EMPTY_TREE=$(git write-tree) + +echo "file 1" > file1 +echo "file 2" > file2 +git add . +git write-tree + +rm * +echo "file A" > fileA +echo "file B" > fileB +echo "file C" > fileC +git add . +TRIPLE_TREE=$(git write-tree) + +git read-tree "$EMPTY_TREE" + +git read-tree "$TRIPLE_TREE" + +[win] + +test "$(git ls-files | wc -l)" -gt 0 diff --git a/levels/it/low-level/welcome b/levels/it/low-level/welcome new file mode 100644 index 0000000..d669136 --- /dev/null +++ b/levels/it/low-level/welcome @@ -0,0 +1,33 @@ +[description] + +This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3 + +You can interact with the repository labelled "yours" by typing Bash commands in the terminal below! The visualization will show you its internal status. + +Let's get started by initializing an empty Git repository in the current directory by typing: + + git init + +[congrats] + +Well done! + +An empty Git repository is... well, quite empty. The only thing that always exists is a reference called "HEAD" - we'll learn what that is later! + +But first, let's look at some basics! + +(Click "Next Level" as soon as you're ready!) + +[setup] + +rm -rf .git + +[setup goal] + +rm -rf .git + +git init + +[win] + +test -d .git diff --git a/levels/it/merge/conflict b/levels/it/merge/conflict new file mode 100644 index 0000000..1a8b02b --- /dev/null +++ b/levels/it/merge/conflict @@ -0,0 +1,47 @@ +title = Contradictions +cards = checkout commit-auto merge reset-hard + +[description] + +Sometimes, timelines will contradict each other. + +For example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines. + +Try to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge! + +Let your finalized timeline be the "main" one. + +[setup] + +echo "Just woke up. Is hungry." > sam +git add . +git commit -m "The beginning" + +git checkout -b pancakes +echo "Had blueberry pancakes with maple syrup for breakfast." > sam +git add . +git commit -m "Pancakes!" + +echo " +Is at work." >> sam +git commit -am "Go to work" + +git checkout -b muesli main +echo "Had muesli with oats and strawberries for breakfast." > sam +git add . +git commit -m "Muesli!" + +echo " +Is at work." >> sam +git commit -am "Go to work" + +git checkout main + +[win] + +# Make a breakfast compromise in the 'main' branch. +git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)" + +[congrats] + +Yum, that sounds like a good breakfast! diff --git a/levels/it/merge/merge b/levels/it/merge/merge new file mode 100644 index 0000000..8b45d06 --- /dev/null +++ b/levels/it/merge/merge @@ -0,0 +1,82 @@ +title = Merging timelines +cards = checkout commit-auto merge + +[description] + +Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together! + +[setup] + +echo "You do not have a baguette. + +You do not have coffee. + +You do not have a donut." > you + +git add . +git commit -m "The Beginning" + +echo "You have a baguette. + +You do not have coffee. + +You do not have a donut." > you +git add . +git commit -m "You buy a baguette" + +echo "You ate a baguette. + +You do not have coffee. + +You do not have a donut." > you +git add . +git commit -m "You eat the baguette" + +git checkout HEAD~2 +echo "You do not have a baguette. + +You have coffee. + +You do not have a donut." > you +git add . +git commit -m "You buy some coffee" + +echo "You do not have a baguette. + +You drank coffee. + +You do not have a donut." > you +git add . +git commit -m "You drink the coffee" + +git checkout HEAD~2 +echo "You do not have a baguette. + +You do not have coffee. + +You have a donut." > you +git add . +git commit -m "You buy a donut" + +echo "You do not have a baguette. + +You do not have coffee. + +You ate a donut." > you +git add . +git commit -m "You eat the donut" + +git checkout --detach +git branch -D main + +[win] + +# Build a situation where you consumed a baguette, a coffee, *and* a donut. +{ git show HEAD:you | grep "You ate.*baguette"; } && { git show HEAD:you | grep "You drank.*coffee"; } && { git show HEAD:you | grep "You ate.*donut"; } + +# Be on a merge commit. +test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2 + +[congrats] + +I wonder if you're more relaxed when you *sleep* in parallel timelines... diff --git a/levels/it/merge/merge-abort b/levels/it/merge/merge-abort new file mode 100644 index 0000000..ce7190b --- /dev/null +++ b/levels/it/merge/merge-abort @@ -0,0 +1,54 @@ +title = Abort a merge +cards = checkout commit-auto merge merge-abort + +[description] + +Sometimes you want to merge two commits, but a merge conflict occurs that you currently don't want to resolve. + +In these situations you can abort the merge to merge later. Use + git merge --abort +when you are in a merge process. + +Try to merge both commits and abort the merge afterwards. + +[setup] + +echo "A new day is starting" > you + +git add . +git commit -m "Start" + +echo "Walking down the Main Lane." >> you + +git add . +git commit -m "Main Lane" + + +git checkout HEAD~1 + +echo "Walking down the Side Lane." >> you + +git add . +git commit -m "Side Lane" + +git checkout HEAD~1 + +git branch -D main + +[actions] + +if test -f .git/MERGE_HEAD; then + touch .git/secretfile +fi + +[win] + +# You tried to merge? +test -f .git/secretfile + +# You aborted to merge? +test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^ + +[congrats] + +Aaah, let's merge later... diff --git a/levels/it/merge/sequence b/levels/it/merge/sequence new file mode 100644 index 0000000..c3b6caf --- /dev/null +++ b/levels/it/merge/sequence @@ -0,0 +1,2 @@ +merge +conflict diff --git a/levels/it/remotes/friend b/levels/it/remotes/friend new file mode 100644 index 0000000..1b70f33 --- /dev/null +++ b/levels/it/remotes/friend @@ -0,0 +1,47 @@ +title = Friend +cards = pull push commit-auto checkout + +[description] + +Your friend added another line to your essay! Get it, add a third one and send it to them! + +Take turns until you have five lines! + +[setup yours] + +echo "Line 1" > essay +git add . +git commit -m "One line" + +git push -u friend main + +[setup friend] + +git checkout main +echo "Line 2, gnihihi" >> essay +git commit -am "Another line" + +[actions friend] + +if test "$(git log --oneline | wc -l)" -eq 3; then + git reset --hard main # Necessary because the working directory isn't updated when we push to the friend. + echo "Line 4, blurbblubb" >> essay + git commit -am "Final line" + hint "Oh nice, I added a fourth line!" +fi + +[win] + +# Got the second line from your friend +git show HEAD:essay | grep gnihihi + +# Got the fourth line from your friend. +git show HEAD:essay | grep blurbblubb + +[win friend] + +# The friend got a third line from you +test "$(git show HEAD:essay | wc -l)" -ge 3 + +# The friend got a fifth line from you +test "$(git show HEAD:essay | wc -l)" -ge 5 diff --git a/levels/it/remotes/problems b/levels/it/remotes/problems new file mode 100644 index 0000000..fab71c5 --- /dev/null +++ b/levels/it/remotes/problems @@ -0,0 +1,33 @@ +title = Problems +cards = checkout add pull push commit-auto merge + +[description] + +Both you and your friend have been working on the file, and want to sync up! + +[setup yours] + +echo "The bike shed should be ???" > file +git add . +git commit -m "initial" + +git push -u friend main + +echo "The bike shed should be green" > file + +[setup friend] + +git checkout main + +echo "The bike shed should be blue" > file +git commit -a -m "friends version" + +[win] + +# Commit your local changes. +test "$(git status -s)" = "" + +[win friend] + +# Look at your friend's suggestion, make a compromise, and push it back. +git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)" diff --git a/levels/it/remotes/sequence b/levels/it/remotes/sequence new file mode 100644 index 0000000..13c5715 --- /dev/null +++ b/levels/it/remotes/sequence @@ -0,0 +1,2 @@ +friend +problems diff --git a/levels/it/sandbox/empty b/levels/it/sandbox/empty new file mode 100644 index 0000000..1f954a5 --- /dev/null +++ b/levels/it/sandbox/empty @@ -0,0 +1,7 @@ +title = Empty sandbox + +[description] + +This is an empty sandbox you can play around in. + +[setup] diff --git a/levels/it/sandbox/remote b/levels/it/sandbox/remote new file mode 100644 index 0000000..f0ca2c0 --- /dev/null +++ b/levels/it/sandbox/remote @@ -0,0 +1,22 @@ +title = Sandbox with a remote +cards = checkout commit-auto pull fetch push + +[description] + +Here's a sandbox with a remote! Try pulling, fetching, or pushing! + +How can you push tags and branches on a remote? How can you delete them again? + +[setup yours] + +echo "Line 1" > essay +git add . +git commit -m "Initial commit" + +git push -u friend main + +[setup friend] + +git checkout main +echo "Line 2" >> essay +git commit -am "Another line" diff --git a/levels/it/sandbox/sequence b/levels/it/sandbox/sequence new file mode 100644 index 0000000..29aa91f --- /dev/null +++ b/levels/it/sandbox/sequence @@ -0,0 +1,3 @@ +empty +remote +three-commits diff --git a/levels/it/sandbox/three-commits b/levels/it/sandbox/three-commits new file mode 100644 index 0000000..3e5308c --- /dev/null +++ b/levels/it/sandbox/three-commits @@ -0,0 +1,26 @@ +title = Sandbox with three commits +cards = checkout add reset-file checkout-file commit merge rebase + +[setup] + +echo "You wake up." > you +git add . +git commit -m "The beginning" + +echo "You drink coffee." >> you +git commit -am "First things first" + +echo "You hear a knock on the door." >> you +git commit -am "Who's there?" + +git branch not_main + +[description] + +Here's a sandbox you can play around in. + +You can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try: + +- Make a commit that merges three timelines together at once! +- Create and delete some tags! +- Make a timeline that's completely independent of the rest! diff --git a/levels/it/sequence b/levels/it/sequence new file mode 100644 index 0000000..cefcd7a --- /dev/null +++ b/levels/it/sequence @@ -0,0 +1,13 @@ +intro +files +branches +merge +index +remotes +changing-the-past +shit-happens +workflows +bisect +stash +tags +sandbox diff --git a/levels/it/shit-happens/bad-commit b/levels/it/shit-happens/bad-commit new file mode 100644 index 0000000..10669be --- /dev/null +++ b/levels/it/shit-happens/bad-commit @@ -0,0 +1,30 @@ +title = Undo a bad commit +cards = reset commit-a + +[description] + +Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again? + +The answer is using `git reset [commit]`, which does two things: + +- It resets the current branch ref to the commit you specify. +- And it resets the index to that commit. + +It does not change your working directory in any way, which means that after that, you can try making the commit you want again. + +[setup] + +echo "1 2 3 4" > numbers +git add . +git commit -m "Initial commit" +echo "1 2 3 4 5 6 7 8 9 11" > numbers +git commit -am "More numberrrrrs" + +[win] + +# In the last main commit, the numbers file contains the numbers from 1 to 10. +test "$(git show main:numbers)" = "1 2 3 4 5 6 7 8 9 10" +# The commit message of that commit is "More numbers". +git log -1 --oneline | grep "More numbers" +# The commit with the typo is not part of the main branch anymore. +git log --oneline | grep -v "rrrrr" diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/it/shit-happens/pushed-something-broken new file mode 100644 index 0000000..f8dce38 --- /dev/null +++ b/levels/it/shit-happens/pushed-something-broken @@ -0,0 +1,54 @@ +title = I pushed something broken +cards = revert push + +[description] + +We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert` + +[setup] + +echo "this is fine + +? + +? + +?" > text +git add . +git commit -m fine +echo "this is fine + +this is also fine + +? + +?" > text +git commit -am "also fine" +echo "this is fine + +this is also fine + +this is very bad + +?" > text +git commit -am "very bad" +echo "this is fine + +this is also fine + +this is very bad + +this is fine again" > text +git commit -am "fine again" + +git push team main +git branch -u team/main main + +[setup team] + +[win team] + +# The team's main branch no longer contains the bad thing. +! { git show main:text | grep -q "very bad"; } +# And the history has not been modified. +git show main^:text | grep -q "very bad" diff --git a/levels/it/shit-happens/reflog b/levels/it/shit-happens/reflog new file mode 100644 index 0000000..e21c4e7 --- /dev/null +++ b/levels/it/shit-happens/reflog @@ -0,0 +1,26 @@ +title = Go back to where you were before +cards = checkout reflog + +[description] + +Say you were looking at something in the past, and then switched back to the main branch. + +But then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out? + +There's a convenient command that shows you all the places your HEAD did point to in the past: + + git reflog + +[setup] + +for i in {1..10}; do + git commit --allow-empty -m $i + git branch $i +done +git checkout 3 +git checkout main + +[win] + +# Find out where you've been before, and go back there! +test "$(git rev-parse HEAD)" = "$(git rev-parse 3)" diff --git a/levels/it/shit-happens/restore-a-file b/levels/it/shit-happens/restore-a-file new file mode 100644 index 0000000..26450f0 --- /dev/null +++ b/levels/it/shit-happens/restore-a-file @@ -0,0 +1,22 @@ +title = Restore a deleted file +cards = checkout + +[description] + +Oops - you deleted the "essay" file, which you worked on all night! + +Luckily, Git is here to help! You can use `git checkout` to restore the file! + +[setup] + +echo important > essay +git add . +git commit -m "Initial commit" +echo "important content" > essay +git commit -am "Improve essay" +rm essay + +[win] + +# Restore the essay to contain "important content" +test "$(cat essay)" = "important content" diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/it/shit-happens/restore-a-file-from-the-past new file mode 100644 index 0000000..b51c108 --- /dev/null +++ b/levels/it/shit-happens/restore-a-file-from-the-past @@ -0,0 +1,21 @@ +title = Restore a file from the past +cards = checkout checkout-from commit + +[description] + +Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how: + + git checkout [commit] [file] + +[setup] + +echo "good version" > essay +git add . +git commit -m "Initial commit" +echo "bad version" > essay +git commit -am "\"Improve\" essay" + +[win] + +# Get the first version of your essay, and make a new commit with it. +test "$(git show main:essay)" = "good version" diff --git a/levels/it/shit-happens/sequence b/levels/it/shit-happens/sequence new file mode 100644 index 0000000..663d5d9 --- /dev/null +++ b/levels/it/shit-happens/sequence @@ -0,0 +1,5 @@ +restore-a-file +restore-a-file-from-the-past +bad-commit +pushed-something-broken +reflog diff --git a/levels/it/stash/sequence b/levels/it/stash/sequence new file mode 100644 index 0000000..9dd02f7 --- /dev/null +++ b/levels/it/stash/sequence @@ -0,0 +1,5 @@ +stash +stash-pop +stash-clear +stash-branch +stash-merge diff --git a/levels/it/stash/stash b/levels/it/stash/stash new file mode 100644 index 0000000..6a4bc61 --- /dev/null +++ b/levels/it/stash/stash @@ -0,0 +1,45 @@ +title = Stashing +cards = checkout commit-auto merge reset-hard + +[description] + +You will encounter situations in which you are working on your project but you need to +put your current changes aside temporarily. To do so, you can use the stash function. Use + git stash push +to add your current changes to the stash stack. + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Apple Pie:" > recipe + +git add . +git commit -m "creating a recipe" + +echo "- 4 Apples" >> recipe + +git add . +git commit -m "Adding ingredients" + +echo "- 500g Flour" >> recipe + +git checkout main + +[win] + +# Did you stash the current changes? +test "$(git stash list | wc -l)" -ge 1 + +[actions] + + + +[congrats] + +Nice stash you got there! :) diff --git a/levels/it/stash/stash-branch b/levels/it/stash/stash-branch new file mode 100644 index 0000000..16c9eae --- /dev/null +++ b/levels/it/stash/stash-branch @@ -0,0 +1,48 @@ +title = Branch from stash +cards = checkout commit-auto merge reset-hard + +[description] + +If you want to keep your changes but they don't belong to the main branch, you can easily +create a new branch from your stashed changes. Just use + git stash branch +If you just want to use the latest stash entry, you can leave the option empty. + +Create a new branch from the stashed changes! + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Apple Pie:" > recipe + +git add . +git commit -m "creating a recipe" + +echo "- 4 Apples" >> recipe + +git add . +git commit -m "Adding ingredients" + +echo "- 500g Flour" >> recipe +git stash push + +git checkout main + +[win] + +# Did you create a new branch from the stashed changes? +test "$(git branch --list| wc -l)" -ge 2 + +[actions] + + + +[congrats] + +Stashed changes are in a new branch! :) diff --git a/levels/it/stash/stash-clear b/levels/it/stash/stash-clear new file mode 100644 index 0000000..9a1b697 --- /dev/null +++ b/levels/it/stash/stash-clear @@ -0,0 +1,57 @@ +title = Clear the Stash +cards = checkout commit-auto merge reset-hard + +[description] + +If you want to inspect your stash stack, use the command + git stash list + +Oh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with + git stash clear +If you only want to discard a certain stash entry, you can use + git stash drop + +Clear your stash stack! + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Apple Pie:" > recipe + +git add . +git commit -m "creating a recipe" + +echo "- 4 Apples" >> recipe + +git add . +git commit -m "Adding ingredients" + +echo "- 500g Flour" >> recipe +git stash push + +echo "- 200g Sugar" >> recipe +git stash push + +echo "- Pinch of Salt" >> recipe +git stash push + +git checkout main + +[win] + +# Did you clear your stash stack? +test "$(git stash list | wc -l)" -eq 0 + +[actions] + + + +[congrats] + +All clear! :) diff --git a/levels/it/stash/stash-merge b/levels/it/stash/stash-merge new file mode 100644 index 0000000..a8c9ac1 --- /dev/null +++ b/levels/it/stash/stash-merge @@ -0,0 +1,54 @@ +title = Merging popped stash +cards = checkout commit-auto merge reset-hard + +[description] + +When you want to reapply your changes but you already continued working on your file, you might get +a merge conflict! Let's practise this situation. +Pop the changes from the stash with + git stash pop +and resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards. + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Apple Pie:" > recipe + +git add . +git commit -m "creating a recipe" + +echo "- 4 Apples" >> recipe + +git add . +git commit -m "Adding ingredients" + +echo "- 500g Flour" >> recipe + +git stash push + +echo "- Pinch of Salt" >> recipe + +git checkout main +git add recipe + +[win] + +# Did you resolve the confict and commit? +{ git show HEAD | grep "Flour"; } && { git show HEAD | grep "Salt"; } + +# Did you clear stash stack? +test "$(git stash list | wc -l)" -eq 0 + +[actions] + + + +[congrats] + +Yay, you got your changes back! :) diff --git a/levels/it/stash/stash-pop b/levels/it/stash/stash-pop new file mode 100644 index 0000000..5ac12d5 --- /dev/null +++ b/levels/it/stash/stash-pop @@ -0,0 +1,46 @@ +title = Pop from Stash +cards = checkout commit-auto merge reset-hard + +[description] + +When you stashed your changes and you want to apply them back to your current working directory, you can use + git stash pop +This will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use + git stash apply + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Apple Pie:" > recipe + +git add . +git commit -m "creating a recipe" + +echo "- 4 Apples" >> recipe + +git add . +git commit -m "Adding ingredients" + +echo "- 500g Flour" >> recipe + +git stash push +git checkout main + +[win] + +# Did you pop the changes from the stash stack? +test "$(git stash list | wc -l)" -eq 0 + +[actions] + + + +[congrats] + +Yay, you got your changes back! :) diff --git a/levels/it/tags/add-tag b/levels/it/tags/add-tag new file mode 100644 index 0000000..9c5703a --- /dev/null +++ b/levels/it/tags/add-tag @@ -0,0 +1,53 @@ +title = Creating tags +cards = checkout commit-auto merge reset-hard + +[description] + +Some of your commits may be special commits. Maybe you reached a milestone or a new version number. + +You can mark these commits with a special flag called 'tag'. + +Write + + git tag + +to tag your commit. + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "event 1" > feature-list + +git add . +git commit -m "Adding feature 1" + +echo "event 2" >> feature-list + +git add . +git commit -m "Adding feature 2" + +echo "event 3" >> feature-list + +git add . +git commit -m "Adding feature 3" + +git checkout --detach main + +[win] + +# Did you create a new tag? +test "$(git tag -l | wc -l)" -ge 1 + +[actions] + + + +[congrats] + +Nice! You tagged your first commit :) diff --git a/levels/it/tags/add-tag-later b/levels/it/tags/add-tag-later new file mode 100644 index 0000000..905647c --- /dev/null +++ b/levels/it/tags/add-tag-later @@ -0,0 +1,50 @@ +title = Tagging later +cards = checkout commit-auto merge reset-hard + +[description] + +But what happens if you forgot to tag your current commit? +No Prob! You can also tag older commits via + + git tag + +Tag the commit "Adding feature 2" with the name "v1"! + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "event 1" > feature-list + +git add . +git commit -m "Adding feature 1" + +echo "event 2" >> feature-list + +git add . +git commit -m "Adding feature 2" + +echo "event 3" >> feature-list + +git add . +git commit -m "Adding feature 3" + +git checkout --detach main + +[win] + +# Did you create a new tag? +test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" + +[actions] + + + +[congrats] + +Well done :) diff --git a/levels/it/tags/remote-tag b/levels/it/tags/remote-tag new file mode 100644 index 0000000..0726915 --- /dev/null +++ b/levels/it/tags/remote-tag @@ -0,0 +1,58 @@ +title = Remote Tags +cards = pull push commit-auto checkout + +[description] + +When you work with remote repositories, tags are not pushed or pulled automatically. + +You can push a tag with + git push +Or all tags with: + git push --tags + +Deleting tags on your remote works with: + git push --delete + +You can also sync + git fetch --prune --prune-tags + + +Add a tag named "v2" to the last commit and push it to the remote. Also pull the v1 tag to your local repository. +[setup yours] + +git checkout main + +git checkout main +echo "toothbrush sharing" > project-ideas +git add . +git commit -m "First idea" + +echo "Is my phone upside down? App" >> project-ideas +git commit -am "Another idea" + + + +git push friend main + +git branch -u friend/main main + +[setup friend] + + + +[actions friend] + +git tag v1 HEAD~1 + +[win] +# v1 tag in your repo +test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" + +# v2 tag in your repo +test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" + + +[win friend] + +# v2 tag in the remote +test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" diff --git a/levels/it/tags/remove-tag b/levels/it/tags/remove-tag new file mode 100644 index 0000000..98f2800 --- /dev/null +++ b/levels/it/tags/remove-tag @@ -0,0 +1,53 @@ +title = Removing tags +cards = checkout commit-auto merge reset-hard + +[description] + +You added way too many tags? No prob! Delete them with + + git tag -d + +Remove all tags in this repo! + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "event 1" > feature-list + +git add . +git commit -m "Adding feature 1" + +echo "event 2" >> feature-list + +git add . +git commit -m "Adding feature 2" + +echo "event 3" >> feature-list + +git add . +git commit -m "Adding feature 3" + +git tag v1 HEAD~2 +git tag v2 HEAD~1 +git tag v3 + +git checkout --detach main + +[win] + +# Did you remove all tags? +test "$(git tag -l | wc -l)" -eq 0 + +[actions] + + + +[congrats] + +Well done :) diff --git a/levels/it/tags/sequence b/levels/it/tags/sequence new file mode 100644 index 0000000..fd63d9c --- /dev/null +++ b/levels/it/tags/sequence @@ -0,0 +1,4 @@ +add-tag +remove-tag +add-tag-later +remote-tag diff --git a/levels/it/unused/checkout b/levels/it/unused/checkout new file mode 100644 index 0000000..9d9c957 --- /dev/null +++ b/levels/it/unused/checkout @@ -0,0 +1,31 @@ +title = Getting the last version +cards = checkout-file + +[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! :/ + +But Git is here to help! To discard all changes your cat made, and go back to the version in the last commit, use `checkout`! + +[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] + +# Restore the version from the last commit. +cat essay.txt | grep D diff --git a/levels/it/unused/clone b/levels/it/unused/clone new file mode 100644 index 0000000..8459c08 --- /dev/null +++ b/levels/it/unused/clone @@ -0,0 +1,20 @@ +title = Cloning a repo +cards = clone commit-auto pull push + +[description] + +Get your friend's repo using clone, change something, push it back. + +[setup] + +rm -rf .git + +[setup friend] + +echo hi > file +git add . +git commit -m "Initial commit" + +[win friend] + +test "$(git show main:file)" != hi diff --git a/levels/it/unused/commit b/levels/it/unused/commit new file mode 100644 index 0000000..fd84cc9 --- /dev/null +++ b/levels/it/unused/commit @@ -0,0 +1,27 @@ +title = Make a commit \o/ +cards = add reset checkout commit + +[description] + +For practice, make a commit where all files contain an "x"! + +[setup] + +echo a > a +echo x > b +echo x > c +git add . +git commit -m "Initial commit" +echo x > a +echo b > b +git add b +echo c > c + +[win] + +# File a contains "x" in the last main commit. +test "$(git show main:a)" = x +# File b contains "x" in the last main commit. +test "$(git show main:b)" = x +# File c contains "x" in the last main commit. +test "$(git show main:c)" = x diff --git a/levels/it/unused/commit-a b/levels/it/unused/commit-a new file mode 100644 index 0000000..747a009 --- /dev/null +++ b/levels/it/unused/commit-a @@ -0,0 +1,26 @@ +title = Make a commit, but faster! +cards = add reset checkout commit commit-a + +[description] + +There is a time-saving trick, where instead of a plain `git commit`, you can use + + git commit -a + +This will automatically add all changes you made to local files! Very convenient. + +[setup] + +echo a > a +echo b > b +echo c > c +git add . +git commit -m "Initial commit" +echo x > a +echo x > b +echo x > c + +[win] + +# Make a commit where all files contain "x". +test "$(git show main:a)" = x && test "$(git show main:b)" = x && test "$(git show main:c)" = x diff --git a/levels/it/unused/fetch b/levels/it/unused/fetch new file mode 100644 index 0000000..377355a --- /dev/null +++ b/levels/it/unused/fetch @@ -0,0 +1,35 @@ +title = Fetching from remotes +cards = checkout fetch commit-auto + +[description] + +Here, you already have two remotes configured! You can list them using `git remote`. + +Fetch from both, and look at the suggestions. + +Then, make a new commit on top of your original one that introduces a compromise. + +[setup] + +echo "The bikeshed should be ???" > proposal +git add . +git commit -m "What do you think?" + +[setup friend1] + +git pull yours main +echo "The bikeshed should be green" > proposal +git commit -am "Green" + +[setup friend2] + +git pull yours main +echo "The bikeshed should be blue" > proposal +git commit -am "Blue" + +[win] + +# Your proposal is acceptable for friend1. +git show main:proposal | git grep green +# Your proposal is acceptable for friend2. +git show main:proposal | git grep blue diff --git a/levels/it/unused/files-move b/levels/it/unused/files-move new file mode 100644 index 0000000..8f65710 --- /dev/null +++ b/levels/it/unused/files-move @@ -0,0 +1,27 @@ +title = No sleep required +cards = file-new file-delete file-rename + +[description] + +Actually, you decide that you don't need any sleep. + +Because of that, you won't require a bed, and can build some other piece of furniture from the wood! + + +[setup] + +echo A yellow cupboard with lots of drawers. > cupboard +echo A really big yellow shelf. > shelf +echo A comfortable, yellow bed with yellow cushions. > bed + +[win] + +# Rename the bed into something else, and give it a new description! +NUM_FILES="$(ls | wc -l)" +! test -f bed && test "$NUM_FILES" -ge 3 && ! grep -r "yellow bed" . + +[congrats] + +Neat! It even still looks a bit comfortable! + +You head out, eager for your first lesson at time travel school! diff --git a/levels/it/unused/index-mv b/levels/it/unused/index-mv new file mode 100644 index 0000000..9ff7270 --- /dev/null +++ b/levels/it/unused/index-mv @@ -0,0 +1,26 @@ +title = Rename a file in the next commit +cards = add reset-file checkout-file mv commit + +[description] + +Other times, you might want to rename a file in the next commit. Use + + git mv [file] [new name] + +for that. The effect is very similar as if you had created a copy with a new name, and removed the old version. + +[setup] + +echo a > a +echo SPECIAL > b +echo x > c +git add . +git commit -m "Initial commit" +echo x > a +echo b >> b +git add b + +[win] + +# Make a commit where you rename the file b to "x". +test "$(git ls-tree --name-only main)" = "$(echo -e "a\nc\nx")" diff --git a/levels/it/unused/init b/levels/it/unused/init new file mode 100644 index 0000000..c76daa5 --- /dev/null +++ b/levels/it/unused/init @@ -0,0 +1,14 @@ +title = Welcome! +cards = init + +[description] + + +[setup] + +rm -rf .git + +[win] + +# Again, initialize your time machine! +test -d .git diff --git a/levels/it/unused/pull-push b/levels/it/unused/pull-push new file mode 100644 index 0000000..71ce61d --- /dev/null +++ b/levels/it/unused/pull-push @@ -0,0 +1,51 @@ +title = Helping each other +cards = checkout commit-auto reset-hard pull push + +[description] + +The events and timelines you see are always only what your own time machine knows about! + +Of course, time agents don't have to work alone! Here, your sidekick has already prepared a merge for you! You can use the "pull" card to transfer it to your own time machine. + +Then, add another event on top (what does Sam have for dinner?), and `push` the result, to transfer it back to your sidekick! + +You can only ever manipulate things in your own time machine (the one on the bottom). + +[setup yours] + +echo "Just woke up. Is hungry." > sam +git add . +git commit -m "The beginning" + +git checkout -b pancakes +echo "Had blueberry pancakes with maple syrup for breakfast." > sam +git add . +git commit -m "Pancakes!" + +git checkout -b muesli main +echo "Had muesli with oats and strawberries for breakfast." > sam +git add . +git commit -m "Muesli!" + +git checkout main + +git push -u sidekick main pancakes muesli + +[setup sidekick] + +git checkout main +git merge pancakes +git merge muesli + +echo "Had pancakes with strawberries for breakfast." > sam +git add . +git commit -m "Let's make this breakfast compromise" --author="Sidekick " + +[win sidekick] + +# Below main's parent, there is a rhombus: +git rev-parse main^^ && test "$(git rev-parse main^^1^)" = "$(git rev-parse main^^2^)" + +[congrats] + +In reality, in many cases, a lot of time agents work together to build a really good future together! :) diff --git a/levels/it/unused/remotes-add b/levels/it/unused/remotes-add new file mode 100644 index 0000000..db24b7d --- /dev/null +++ b/levels/it/unused/remotes-add @@ -0,0 +1,33 @@ +title = Adding a remote +cards = checkout + +[description] + +Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using + + git remote add [name] [URL] + +where `[name]` is an arbitrary, short name you pick for the remote. + +When you've done that, you can get all commits from that remote using + + git pull friend + +There's a letter for you! + +[setup] + +git remote remove friend + +[setup friend] + +echo "I'm really committed to our friendship! <3" > love_letter +git add . +git commit -m "Write a letter" + +[win] + +# Add a remote that points to ../friend. +git remote -v | grep '../friend' +# Pull from the remote. +git show HEAD:love_letter | grep committed diff --git a/levels/it/unused/remotes-delete b/levels/it/unused/remotes-delete new file mode 100644 index 0000000..c026204 --- /dev/null +++ b/levels/it/unused/remotes-delete @@ -0,0 +1,23 @@ +title = Deleting and renaming a remote +cards = checkout + +[description] + +Here, you already have two remotes configured! You can list them using `git remote`. + +[setup] + +git remote rename friend frend + +[setup friend] + +[setup enemy] + +[win] + +# Rename the remote with the typo (using `git remote rename [old name] [new name]`) +git remote | grep friend +# The remote with the typo is gone. +! grep 'frend' <(git remote) +# Delete the remote you don't want to keep (using `git remote remove [remote]`) +! grep 'enemy' <(git remote) diff --git a/levels/it/unused/restore b/levels/it/unused/restore new file mode 100644 index 0000000..1f9961e --- /dev/null +++ b/levels/it/unused/restore @@ -0,0 +1,28 @@ +title = Looking into the past +cards = checkout-from + +[description] + +You've been working on your essay for a while. But you're not happy with the changes you've made recently. You want to go back to the version called "Best version"! + +No problem, you can use the `checkout` card to restore your essay from an older commit! + +[setup] + +echo "Initial version" > essay.txt +git add . +git commit -m "Initial commit" + +echo "Improved version" > essay.txt +git commit -a -m "Improved version" + +echo "Best version" > essay.txt +git commit -a -m "Best version" + +echo "Less-good version" > essay.txt +git commit -a -m "Less-good version" + +[win] + +# For nostalgic reasons, restore the very first backup you made! +diff essay.txt <(echo "Best version") diff --git a/levels/it/unused/split b/levels/it/unused/split new file mode 100644 index 0000000..274b792 --- /dev/null +++ b/levels/it/unused/split @@ -0,0 +1,26 @@ +title = Split a commit! +cards = checkout commit reset-hard reset add rebase-interactive rebase-continue show + +[description] + +Here, both changes happened in one commit! Split them to be in two commits instead. + +[setup] + +echo something > file1 +echo something else > file2 +git add . +git commit -m "Initial commit" + +echo this should happen first >> file1 +echo and this should happen after that >> file2 +git commit -am "Both together" + +echo this is some other change >> file1 +echo this is some other change >> file2 +git commit -am "Something else" + +[win] + +test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M file2" && +test "$(git diff-tree --no-commit-id --name-status -r main~2)" = "M file1" diff --git a/levels/it/unused/steps b/levels/it/unused/steps new file mode 100644 index 0000000..cb84861 --- /dev/null +++ b/levels/it/unused/steps @@ -0,0 +1,23 @@ +title = One step after another +cards = checkout commit reset-hard add + +[description] + +Sometimes, you might want to record the order in which things changed, instead of making a single commit. + +What happened here? Make two commits from the changes (using the "add" card), in an order that makes sense! + +[setup] + +echo something > file1 +echo something else > file2 +git add . +git commit -m "Initial commit" + +echo this should happen first >> file1 +echo and this should happen after that >> file2 + +[win] + +test "$(git diff-tree --no-commit-id --name-status -r main)" = "M file2" && +test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M file1" diff --git a/levels/it/unused/who-are-you b/levels/it/unused/who-are-you new file mode 100644 index 0000000..f06137c --- /dev/null +++ b/levels/it/unused/who-are-you @@ -0,0 +1,23 @@ +title = Nice to meet you! +cards = config-name config-email + +[description] + +Introduce yourself using + + git config --global user.name Firstname + git config --global user.email "your@mail.com" + +[setup] + +[actions] + +test "$(git config user.name)" != "You" && hint "Hey $(git config user.name), nice to meet you!" + +[win] + +# Have a name configured. +test "$(git config user.name)" != "You" + +# Have an email address configured. +test "$(git config user.email)" != "you@time.agency" diff --git a/levels/it/workflows/gitignore b/levels/it/workflows/gitignore new file mode 100644 index 0000000..dc55243 --- /dev/null +++ b/levels/it/workflows/gitignore @@ -0,0 +1,18 @@ +title = Ignoring files + +[description] + +That chicken is running around a lot, and changing often. We don't want to have it in our commits. + +Add it to the file .gitignore, and try using `git add .`! + +[setup] + +touch .gitignore +echo important > important +git add important +git commit -m "Initial commit" + +[actions] + +echo "$RANDOM" > chicken diff --git a/levels/it/workflows/pr b/levels/it/workflows/pr new file mode 100644 index 0000000..1c72510 --- /dev/null +++ b/levels/it/workflows/pr @@ -0,0 +1,25 @@ +title = Cloning a repo +cards = clone commit-auto reset-hard checkout file-new branch + +[description] + +Your friend has a problem! Clone the repo, create a branch called "solution", and fix the problem in this branch. When you're ready, make a "Pull Request" by using `git tag pr`. + +[setup] + +rm -rf .git + +[setup friend] + +echo "2 + 3 = " > file +git add . +git commit -m "Initial commit" + +[actions friend] + +git ls-remote yours | grep pr && git fetch yours && git merge yours/solution +git show main:file | grep 5 && hint "Thanks!" + +[win friend] + +git show main:file | grep 5 diff --git a/levels/it/workflows/sequence b/levels/it/workflows/sequence new file mode 100644 index 0000000..1be11a8 --- /dev/null +++ b/levels/it/workflows/sequence @@ -0,0 +1 @@ +pr diff --git a/resources/cards.json b/resources/cards.json index 79b51ca..d284b4e 100644 --- a/resources/cards.json +++ b/resources/cards.json @@ -2,181 +2,289 @@ { "id": "init", "command": "git init", - "description": "Drag this card into the empty space above to initialize the time machine!" + "description": { + "en": "Drag this card into the empty space above to initialize the time machine!", + "it": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" + } }, { "id": "clone", "command": "git clone ../[remote] .", - "description": "Create your own copy of someone else's repo." + "description": { + "en": "Create your own copy of someone else's repo.", + "it": "Crea la copia del Repo di qualcun'altro." + } }, { "id": "config-name", "command": "git config --global user.name [string]", - "description": "Set your name.\n\n(Will not change anything outside of this game.)" + "description": { + "en": "Set your name.\n\n(Will not change anything outside of this game.)", + "it": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" + } }, { "id": "config-email", "command": "git config --global user.email [string]", - "description": "Set your email address." + "description": { + "en": "Set your email address.", + "it": "Imposta la tua e-mail." + } }, { "id": "checkout", "command": "git checkout [commit, ref]", - "description": "Drag this card to a commit or to a branch to travel to it!" + "description": { + "en": "Drag this card to a commit or to a branch to travel to it!", + "it": "Sposta questa carta su un commit o su una branch per viaggiare in quello specifico momento." + } }, { "id": "checkout-file", "command": "git checkout [file]", - "description": "Reset changes in a local file." + "description": { + "en": "Reset changes in a local file.", + "it": "Resetta i cambiamenti in un file locale" + } }, { "id": "checkout-from", "command": "git checkout [commit, ref] [file]", - "description": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." + "description": { + "en": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.", + "it": "Prendi il contenuto del file da uno specifico commits e resetta sia la directory di lavoro sia l'indice." + } }, { "id": "commit-a", "command": "git commit -a", - "description": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed." + "description": { + "en": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.", + "it": "Crea un nuovo commit, dopo aver aggiunto automatico tutti i cambiamenti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato." + } }, { "id": "commit-auto", "command": "git add .; git commit", - "description": "Make a new commit containing your current environment! Type in a description of what changed!" + "description": { + "en": "Make a new commit containing your current environment! Type in a description of what changed!", + "it": "Crea un nuovo commit contenente il tuo ambiente attuale! Scrivi nella descrizione di cosa hai cambiato" + } }, { "id": "merge", "command": "git merge [commit, ref]", - "description": "Merge the specified timeline into yours. If necessary, will create a merge commit." + "description": { + "en": "Merge the specified timeline into yours. If necessary, will create a merge commit.", + "it": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di unione." + } }, { "id": "merge-abort", "command": "git merge --abort", - "description": "Abort the current merge attempt, and reconstruct the previous state." + "description": { + "en": "Abort the current merge attempt, and reconstruct the previous state.", + "it": "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente." + } }, { "id": "rebase", "command": "git rebase [commit]", - "description": "Put the events in your current timeline on top of the specified one." + "description": { + "en": "Put the events in your current timeline on top of the specified one.", + "it": "Mette l'evento nella tua, corrente, linea temporale sopra a quello specificato." + } }, { "id": "pull", "command": "git pull", - "description": "Get someone else's version of the current timeline, and try to merge it into yours." + "description": { + "en": "Get someone else's version of the current timeline, and try to merge it into yours.", + "it": "Prende la versione corrente della line temporale di qualcun'altro e prova ad unirla alla tua." + } }, { "id": "fetch", "command": "git fetch [remote]", - "description": "Get a someone else's version of the current timeline." + "description": { + "en": "Get a someone else's version of the current timeline.", + "it": "Prende la versione, corrente, della linea temporale di qualcun'altro" + } }, { "id": "push", "command": "git push", - "description": "Give the current timeline to someone else." + "description": { + "en": "Give the current timeline to someone else.", + "it": "Invia la corrente line temporale a qualcun'altro" + } }, { "id": "rebase-interactive", "command": "git rebase -i [commit]", - "description": "Make changes to the events in your current timeline, back to the commit you drag this to." + "description": { + "en": "Make changes to the events in your current timeline, back to the commit you drag this to.", + "it": "Apporta modifiche agli eventi nella tua timeline corrente, torna al commit su cui lo trascini " + } }, { "id": "rebase-continue", "command": "git rebase --continue", - "description": "Continue the current rebasing process." + "description": { + "en": "Continue the current rebasing process.", + "it": "Continua il corrente processo di ricostruzione" + } }, { "id": "reset-hard", "command": "git reset --hard [commit]", - "description": "Move the branch you're on to the specified commit." + "description": { + "en": "Move the branch you're on to the specified commit.", + "it": "Muove il tuo branch (ramo) nello specifico commit." + } }, { "id": "reset", "command": "git reset [commit]", - "description": "Jump to the commit, and update the index. Keep the current environment." + "description": { + "en": "Jump to the commit, and update the index. Keep the current environment.", + "it": "Salta alcommit e aggiorna l'indice. Mette l'ambiente attuale." + } }, { "id": "reset-file", "command": "git reset [file]", - "description": "Reset the index version of a file to the version in the commit you're on." + "description": { + "en": "Reset the index version of a file to the version in the commit you're on.", + "it": "Resetta la versione dell'indice di un file alla versione del commit in cui sei" + } }, { "id": "cherry-pick", "command": "git cherry-pick [commit]", - "description": "Repeat the specified action on top of your current timeline." + "description": { + "en": "Repeat the specified action on top of your current timeline.", + "it": "Ripete l'azione specificata sulla corrente linea temporale" + } }, { "id": "revert", "command": "git revert [commit]", - "description": "Make a new commit that reverts the changes of the speicified commit." + "description": { + "en": "Make a new commit that reverts the changes of the speicified commit.", + "it": "Crea un nuovo commit che annula le modifiche dello specifico commit" + } }, { "id": "bisect-start", "command": "git bisect start", - "description": "Start looking for the commit where things got bad." + "description": { + "en": "Start looking for the commit where things got bad.", + "it": "Inizia a cercare il commit dove le cose sono andate storte" + } }, { "id": "bisect-good", "command": "git bisect good", - "description": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!" + "description": { + "en": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!", + "it": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buone` e `cattive`!" + } }, { "id": "bisect-bad", "command": "git bisect bad", - "description": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!" + "description": { + "en": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!", + "it": "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!" + } }, { "id": "add", "command": "git add [file]", - "description": "Update the index version of the file to its current real content." + "description": { + "en": "Update the index version of the file to its current real content.", + "it": "Aggiorna l'indice del file con il, corrente, reale contenuto." + } }, { "id": "rm", "command": "git rm [file]", - "description": "Delete a file both in the working directory, as well as the index." + "description": { + "en": "Delete a file both in the working directory, as well as the index.", + "it": "Cancella il file sia dalla corrente directory che dall'indice." + } }, { "id": "commit", "command": "git commit", - "description": "Make a commit from the current index." + "description": { + "en": "Make a commit from the current index.", + "it": "Crea un commit dal corrente indice." + } }, { "id": "show", "command": "git show [commit]", - "description": "Show what changed in the commit." + "description": { + "en": "Show what changed in the commit.", + "it": "Mostra cosa è cambiato nel commit." + } }, { "id": "branch", "command": "git branch [string]", - "description": "Create a new branch at your current location." + "description": { + "en": "Create a new branch at your current location.", + "it": "Crea un nuovo branch (ramo) nella tua corrente posizione." + } }, { "id": "branch-delete", "command": "git branch -D [ref]", - "description": "Delete a branch." + "description": { + "en": "Delete a branch.", + "it": "Cancella un branch.(ramo)" + } }, { "id": "reflog", "command": "git reflog [ref, head]", - "description": "Display a log of where the ref pointed to in the past." + "description": { + "en": "Display a log of where the ref pointed to in the past.", + "it": "Mostra un log di dove il riferimento puntava in passato" + } }, { "id": "file-new", "command": "touch [string]", - "description": "Create a new file." + "description": { + "en": "Create a new file.", + "it": "Crea un nuovo file." + } }, { "id": "file-delete", "command": "rm [file]", - "description": "Delete a file." + "description": { + "en": "Delete a file.", + "it": "Cancella un file." + } }, { "id": "file-rename", "command": "mv [file] [string]", - "description": "Rename a file." + "description": { + "en": "Rename a file.", + "it": "Rinomina un file." + } }, { "id": "file-copy", "command": "cp [file] [string]", - "description": "Make a copy of a file." + "description": { + "en": "Make a copy of a file.", + "it": "Crea una copia di un file." + } } ] diff --git a/scenes/cards.gd b/scenes/cards.gd index 4448d6c..d68dc02 100644 --- a/scenes/cards.gd +++ b/scenes/cards.gd @@ -3,6 +3,7 @@ extends Control var card_store = {} var cards var card_radius = 1500 +var lang = "it" # TODO: Make a global variable to setting dir and cards localizations func _ready(): load_card_store() @@ -16,7 +17,7 @@ func _process(_delta): func load_card_store(): card_store = {} - var cards_json = JSON.parse(helpers.read_file("res://resources/cards.json")).result + var cards_json = JSON.parse(helpers.read_file("res://resources/cards_i18n.json")).result for card in cards_json: card_store[card["id"]] = card @@ -39,7 +40,7 @@ func draw_card(card): new_card.id = card["id"] new_card.command = card["command"] - new_card.description = card["description"] + new_card.description = card["description"][lang] new_card.energy = 0 #card.energy new_card.position = Vector2(rect_size.x, rect_size.y*2) add_child(new_card) diff --git a/scenes/title.tscn b/scenes/title.tscn index 8363e84..f919e19 100644 --- a/scenes/title.tscn +++ b/scenes/title.tscn @@ -72,6 +72,7 @@ text = "Quit" position = Vector2( 967.924, 306.066 ) scale = Vector2( 0.320895, 0.320895 ) texture = ExtResource( 2 ) + [connection signal="pressed" from="VBoxContainer/Button" to="." method="levels"] [connection signal="pressed" from="VBoxContainer/Button3" to="." method="sandbox"] [connection signal="pressed" from="VBoxContainer/Button2" to="." method="quit"] From 705cc849c2320c69da05372fce442e2866adad64 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Mon, 6 Sep 2021 23:15:34 +0200 Subject: [PATCH 03/49] Add italian localizations and mechanism for card, levels and buttons and labels --- levels/{ => en}/bisect/bisect | 0 levels/{ => en}/bisect/sequence | 0 levels/{ => en}/branches/branch-create | 0 levels/{ => en}/branches/branch-remove | 0 levels/{ => en}/branches/checkout-commit | 0 levels/{ => en}/branches/fork | 0 levels/{ => en}/branches/grow | 0 levels/{ => en}/branches/reorder | 0 levels/{ => en}/branches/sequence | 0 levels/{ => en}/changing-the-past/rebase | 0 levels/{ => en}/changing-the-past/reorder | 0 levels/{ => en}/changing-the-past/sequence | 0 levels/{ => en}/files/files-add | 0 levels/{ => en}/files/files-delete | 0 levels/{ => en}/files/sequence | 0 levels/{ => en}/index/add | 0 levels/{ => en}/index/change | 0 levels/{ => en}/index/checkout | 0 levels/{ => en}/index/compare | 0 levels/{ => en}/index/new | 0 levels/{ => en}/index/reset | 0 levels/{ => en}/index/rm | 0 levels/{ => en}/index/sequence | 0 levels/{ => en}/index/steps | 0 levels/{ => en}/intro/cli | 0 levels/{ => en}/intro/commit | 0 levels/{ => en}/intro/copies | 0 levels/{ => en}/intro/init | 0 levels/{ => en}/intro/remote | 0 levels/{ => en}/intro/risky | 0 levels/{ => en}/intro/sequence | 0 levels/{ => en}/intro/who-are-you | 0 levels/{ => en}/low-level/basics | 0 levels/{ => en}/low-level/blob-create | 0 levels/{ => en}/low-level/blob-remove | 0 levels/{ => en}/low-level/commit-create | 0 levels/{ => en}/low-level/commit-parents | 0 levels/{ => en}/low-level/commit-rhombus | 0 levels/{ => en}/low-level/index-add | 0 levels/{ => en}/low-level/index-remove | 0 levels/{ => en}/low-level/index-update | 0 levels/{ => en}/low-level/puzzle-apocalypse | 0 .../{ => en}/low-level/puzzle-precious-blob | 0 .../low-level/puzzle-trees-all-the-way-down | 0 levels/{ => en}/low-level/ref-create | 0 levels/{ => en}/low-level/ref-move | 0 levels/{ => en}/low-level/ref-remove | 0 levels/{ => en}/low-level/sequence | 0 levels/{ => en}/low-level/symref-create | 0 levels/{ => en}/low-level/symref-no-deref | 0 levels/{ => en}/low-level/tree-create | 0 levels/{ => en}/low-level/tree-nested | 0 levels/{ => en}/low-level/tree-read | 0 levels/{ => en}/low-level/welcome | 0 levels/{ => en}/merge/conflict | 0 levels/{ => en}/merge/merge | 0 levels/{ => en}/merge/merge-abort | 0 levels/{ => en}/merge/sequence | 0 levels/{ => en}/remotes/friend | 0 levels/{ => en}/remotes/problems | 0 levels/{ => en}/remotes/sequence | 0 levels/{ => en}/sandbox/empty | 0 levels/{ => en}/sandbox/remote | 0 levels/{ => en}/sandbox/sequence | 0 levels/{ => en}/sandbox/three-commits | 0 levels/{ => en}/sequence | 0 levels/{ => en}/shit-happens/bad-commit | 0 .../shit-happens/pushed-something-broken | 0 levels/{ => en}/shit-happens/reflog | 0 levels/{ => en}/shit-happens/restore-a-file | 0 .../shit-happens/restore-a-file-from-the-past | 0 levels/{ => en}/shit-happens/sequence | 0 levels/{ => en}/stash/sequence | 0 levels/{ => en}/stash/stash | 0 levels/{ => en}/stash/stash-branch | 0 levels/{ => en}/stash/stash-clear | 0 levels/{ => en}/stash/stash-merge | 0 levels/{ => en}/stash/stash-pop | 0 levels/{ => en}/tags/add-tag | 0 levels/{ => en}/tags/add-tag-later | 0 levels/{ => en}/tags/remote-tag | 0 levels/{ => en}/tags/remove-tag | 0 levels/{ => en}/tags/sequence | 0 levels/{ => en}/unused/checkout | 0 levels/{ => en}/unused/clone | 0 levels/{ => en}/unused/commit | 0 levels/{ => en}/unused/commit-a | 0 levels/{ => en}/unused/fetch | 0 levels/{ => en}/unused/files-move | 0 levels/{ => en}/unused/index-mv | 0 levels/{ => en}/unused/init | 0 levels/{ => en}/unused/pull-push | 0 levels/{ => en}/unused/remotes-add | 0 levels/{ => en}/unused/remotes-delete | 0 levels/{ => en}/unused/restore | 0 levels/{ => en}/unused/split | 0 levels/{ => en}/unused/steps | 0 levels/{ => en}/unused/who-are-you | 0 levels/{ => en}/workflows/gitignore | 0 levels/{ => en}/workflows/pr | 0 levels/{ => en}/workflows/sequence | 0 project.godot | 4 ++ resources/localizations.csv | 17 +++++ resources/localizations.csv.import | 16 +++++ resources/localizations.en.translation | Bin 0 -> 785 bytes resources/localizations.it.translation | Bin 0 -> 804 bytes scenes/card.tscn | 1 + scenes/cards.gd | 6 +- scenes/cards.tscn | 1 + scenes/chapter.gd | 6 +- scenes/drop_area.tscn | 1 + scenes/file_browser.tscn | 1 + scenes/file_browser_item.tscn | 1 + scenes/helpers.gd | 2 + scenes/input_dialog.tscn | 1 + scenes/level_select.gd | 1 + scenes/level_select.tscn | 65 ++++++++++-------- scenes/levels.gd | 6 +- scenes/main.tscn | 39 ++++++----- scenes/music_button.gd | 1 - scenes/music_button.tscn | 5 +- scenes/no_git.tscn | 22 +++--- scenes/node.tscn | 1 + scenes/notification.tscn | 1 + scenes/title.tscn | 4 +- 125 files changed, 131 insertions(+), 71 deletions(-) rename levels/{ => en}/bisect/bisect (100%) rename levels/{ => en}/bisect/sequence (100%) rename levels/{ => en}/branches/branch-create (100%) rename levels/{ => en}/branches/branch-remove (100%) rename levels/{ => en}/branches/checkout-commit (100%) rename levels/{ => en}/branches/fork (100%) rename levels/{ => en}/branches/grow (100%) rename levels/{ => en}/branches/reorder (100%) rename levels/{ => en}/branches/sequence (100%) rename levels/{ => en}/changing-the-past/rebase (100%) rename levels/{ => en}/changing-the-past/reorder (100%) rename levels/{ => en}/changing-the-past/sequence (100%) rename levels/{ => en}/files/files-add (100%) rename levels/{ => en}/files/files-delete (100%) rename levels/{ => en}/files/sequence (100%) rename levels/{ => en}/index/add (100%) rename levels/{ => en}/index/change (100%) rename levels/{ => en}/index/checkout (100%) rename levels/{ => en}/index/compare (100%) rename levels/{ => en}/index/new (100%) rename levels/{ => en}/index/reset (100%) rename levels/{ => en}/index/rm (100%) rename levels/{ => en}/index/sequence (100%) rename levels/{ => en}/index/steps (100%) rename levels/{ => en}/intro/cli (100%) rename levels/{ => en}/intro/commit (100%) rename levels/{ => en}/intro/copies (100%) rename levels/{ => en}/intro/init (100%) rename levels/{ => en}/intro/remote (100%) rename levels/{ => en}/intro/risky (100%) rename levels/{ => en}/intro/sequence (100%) rename levels/{ => en}/intro/who-are-you (100%) rename levels/{ => en}/low-level/basics (100%) rename levels/{ => en}/low-level/blob-create (100%) rename levels/{ => en}/low-level/blob-remove (100%) rename levels/{ => en}/low-level/commit-create (100%) rename levels/{ => en}/low-level/commit-parents (100%) rename levels/{ => en}/low-level/commit-rhombus (100%) rename levels/{ => en}/low-level/index-add (100%) rename levels/{ => en}/low-level/index-remove (100%) rename levels/{ => en}/low-level/index-update (100%) rename levels/{ => en}/low-level/puzzle-apocalypse (100%) rename levels/{ => en}/low-level/puzzle-precious-blob (100%) rename levels/{ => en}/low-level/puzzle-trees-all-the-way-down (100%) rename levels/{ => en}/low-level/ref-create (100%) rename levels/{ => en}/low-level/ref-move (100%) rename levels/{ => en}/low-level/ref-remove (100%) rename levels/{ => en}/low-level/sequence (100%) rename levels/{ => en}/low-level/symref-create (100%) rename levels/{ => en}/low-level/symref-no-deref (100%) rename levels/{ => en}/low-level/tree-create (100%) rename levels/{ => en}/low-level/tree-nested (100%) rename levels/{ => en}/low-level/tree-read (100%) rename levels/{ => en}/low-level/welcome (100%) rename levels/{ => en}/merge/conflict (100%) rename levels/{ => en}/merge/merge (100%) rename levels/{ => en}/merge/merge-abort (100%) rename levels/{ => en}/merge/sequence (100%) rename levels/{ => en}/remotes/friend (100%) rename levels/{ => en}/remotes/problems (100%) rename levels/{ => en}/remotes/sequence (100%) rename levels/{ => en}/sandbox/empty (100%) rename levels/{ => en}/sandbox/remote (100%) rename levels/{ => en}/sandbox/sequence (100%) rename levels/{ => en}/sandbox/three-commits (100%) rename levels/{ => en}/sequence (100%) rename levels/{ => en}/shit-happens/bad-commit (100%) rename levels/{ => en}/shit-happens/pushed-something-broken (100%) rename levels/{ => en}/shit-happens/reflog (100%) rename levels/{ => en}/shit-happens/restore-a-file (100%) rename levels/{ => en}/shit-happens/restore-a-file-from-the-past (100%) rename levels/{ => en}/shit-happens/sequence (100%) rename levels/{ => en}/stash/sequence (100%) rename levels/{ => en}/stash/stash (100%) rename levels/{ => en}/stash/stash-branch (100%) rename levels/{ => en}/stash/stash-clear (100%) rename levels/{ => en}/stash/stash-merge (100%) rename levels/{ => en}/stash/stash-pop (100%) rename levels/{ => en}/tags/add-tag (100%) rename levels/{ => en}/tags/add-tag-later (100%) rename levels/{ => en}/tags/remote-tag (100%) rename levels/{ => en}/tags/remove-tag (100%) rename levels/{ => en}/tags/sequence (100%) rename levels/{ => en}/unused/checkout (100%) rename levels/{ => en}/unused/clone (100%) rename levels/{ => en}/unused/commit (100%) rename levels/{ => en}/unused/commit-a (100%) rename levels/{ => en}/unused/fetch (100%) rename levels/{ => en}/unused/files-move (100%) rename levels/{ => en}/unused/index-mv (100%) rename levels/{ => en}/unused/init (100%) rename levels/{ => en}/unused/pull-push (100%) rename levels/{ => en}/unused/remotes-add (100%) rename levels/{ => en}/unused/remotes-delete (100%) rename levels/{ => en}/unused/restore (100%) rename levels/{ => en}/unused/split (100%) rename levels/{ => en}/unused/steps (100%) rename levels/{ => en}/unused/who-are-you (100%) rename levels/{ => en}/workflows/gitignore (100%) rename levels/{ => en}/workflows/pr (100%) rename levels/{ => en}/workflows/sequence (100%) create mode 100644 resources/localizations.csv create mode 100644 resources/localizations.csv.import create mode 100644 resources/localizations.en.translation create mode 100644 resources/localizations.it.translation diff --git a/levels/bisect/bisect b/levels/en/bisect/bisect similarity index 100% rename from levels/bisect/bisect rename to levels/en/bisect/bisect diff --git a/levels/bisect/sequence b/levels/en/bisect/sequence similarity index 100% rename from levels/bisect/sequence rename to levels/en/bisect/sequence diff --git a/levels/branches/branch-create b/levels/en/branches/branch-create similarity index 100% rename from levels/branches/branch-create rename to levels/en/branches/branch-create diff --git a/levels/branches/branch-remove b/levels/en/branches/branch-remove similarity index 100% rename from levels/branches/branch-remove rename to levels/en/branches/branch-remove diff --git a/levels/branches/checkout-commit b/levels/en/branches/checkout-commit similarity index 100% rename from levels/branches/checkout-commit rename to levels/en/branches/checkout-commit diff --git a/levels/branches/fork b/levels/en/branches/fork similarity index 100% rename from levels/branches/fork rename to levels/en/branches/fork diff --git a/levels/branches/grow b/levels/en/branches/grow similarity index 100% rename from levels/branches/grow rename to levels/en/branches/grow diff --git a/levels/branches/reorder b/levels/en/branches/reorder similarity index 100% rename from levels/branches/reorder rename to levels/en/branches/reorder diff --git a/levels/branches/sequence b/levels/en/branches/sequence similarity index 100% rename from levels/branches/sequence rename to levels/en/branches/sequence diff --git a/levels/changing-the-past/rebase b/levels/en/changing-the-past/rebase similarity index 100% rename from levels/changing-the-past/rebase rename to levels/en/changing-the-past/rebase diff --git a/levels/changing-the-past/reorder b/levels/en/changing-the-past/reorder similarity index 100% rename from levels/changing-the-past/reorder rename to levels/en/changing-the-past/reorder diff --git a/levels/changing-the-past/sequence b/levels/en/changing-the-past/sequence similarity index 100% rename from levels/changing-the-past/sequence rename to levels/en/changing-the-past/sequence diff --git a/levels/files/files-add b/levels/en/files/files-add similarity index 100% rename from levels/files/files-add rename to levels/en/files/files-add diff --git a/levels/files/files-delete b/levels/en/files/files-delete similarity index 100% rename from levels/files/files-delete rename to levels/en/files/files-delete diff --git a/levels/files/sequence b/levels/en/files/sequence similarity index 100% rename from levels/files/sequence rename to levels/en/files/sequence diff --git a/levels/index/add b/levels/en/index/add similarity index 100% rename from levels/index/add rename to levels/en/index/add diff --git a/levels/index/change b/levels/en/index/change similarity index 100% rename from levels/index/change rename to levels/en/index/change diff --git a/levels/index/checkout b/levels/en/index/checkout similarity index 100% rename from levels/index/checkout rename to levels/en/index/checkout diff --git a/levels/index/compare b/levels/en/index/compare similarity index 100% rename from levels/index/compare rename to levels/en/index/compare diff --git a/levels/index/new b/levels/en/index/new similarity index 100% rename from levels/index/new rename to levels/en/index/new diff --git a/levels/index/reset b/levels/en/index/reset similarity index 100% rename from levels/index/reset rename to levels/en/index/reset diff --git a/levels/index/rm b/levels/en/index/rm similarity index 100% rename from levels/index/rm rename to levels/en/index/rm diff --git a/levels/index/sequence b/levels/en/index/sequence similarity index 100% rename from levels/index/sequence rename to levels/en/index/sequence diff --git a/levels/index/steps b/levels/en/index/steps similarity index 100% rename from levels/index/steps rename to levels/en/index/steps diff --git a/levels/intro/cli b/levels/en/intro/cli similarity index 100% rename from levels/intro/cli rename to levels/en/intro/cli diff --git a/levels/intro/commit b/levels/en/intro/commit similarity index 100% rename from levels/intro/commit rename to levels/en/intro/commit diff --git a/levels/intro/copies b/levels/en/intro/copies similarity index 100% rename from levels/intro/copies rename to levels/en/intro/copies diff --git a/levels/intro/init b/levels/en/intro/init similarity index 100% rename from levels/intro/init rename to levels/en/intro/init diff --git a/levels/intro/remote b/levels/en/intro/remote similarity index 100% rename from levels/intro/remote rename to levels/en/intro/remote diff --git a/levels/intro/risky b/levels/en/intro/risky similarity index 100% rename from levels/intro/risky rename to levels/en/intro/risky diff --git a/levels/intro/sequence b/levels/en/intro/sequence similarity index 100% rename from levels/intro/sequence rename to levels/en/intro/sequence diff --git a/levels/intro/who-are-you b/levels/en/intro/who-are-you similarity index 100% rename from levels/intro/who-are-you rename to levels/en/intro/who-are-you diff --git a/levels/low-level/basics b/levels/en/low-level/basics similarity index 100% rename from levels/low-level/basics rename to levels/en/low-level/basics diff --git a/levels/low-level/blob-create b/levels/en/low-level/blob-create similarity index 100% rename from levels/low-level/blob-create rename to levels/en/low-level/blob-create diff --git a/levels/low-level/blob-remove b/levels/en/low-level/blob-remove similarity index 100% rename from levels/low-level/blob-remove rename to levels/en/low-level/blob-remove diff --git a/levels/low-level/commit-create b/levels/en/low-level/commit-create similarity index 100% rename from levels/low-level/commit-create rename to levels/en/low-level/commit-create diff --git a/levels/low-level/commit-parents b/levels/en/low-level/commit-parents similarity index 100% rename from levels/low-level/commit-parents rename to levels/en/low-level/commit-parents diff --git a/levels/low-level/commit-rhombus b/levels/en/low-level/commit-rhombus similarity index 100% rename from levels/low-level/commit-rhombus rename to levels/en/low-level/commit-rhombus diff --git a/levels/low-level/index-add b/levels/en/low-level/index-add similarity index 100% rename from levels/low-level/index-add rename to levels/en/low-level/index-add diff --git a/levels/low-level/index-remove b/levels/en/low-level/index-remove similarity index 100% rename from levels/low-level/index-remove rename to levels/en/low-level/index-remove diff --git a/levels/low-level/index-update b/levels/en/low-level/index-update similarity index 100% rename from levels/low-level/index-update rename to levels/en/low-level/index-update diff --git a/levels/low-level/puzzle-apocalypse b/levels/en/low-level/puzzle-apocalypse similarity index 100% rename from levels/low-level/puzzle-apocalypse rename to levels/en/low-level/puzzle-apocalypse diff --git a/levels/low-level/puzzle-precious-blob b/levels/en/low-level/puzzle-precious-blob similarity index 100% rename from levels/low-level/puzzle-precious-blob rename to levels/en/low-level/puzzle-precious-blob diff --git a/levels/low-level/puzzle-trees-all-the-way-down b/levels/en/low-level/puzzle-trees-all-the-way-down similarity index 100% rename from levels/low-level/puzzle-trees-all-the-way-down rename to levels/en/low-level/puzzle-trees-all-the-way-down diff --git a/levels/low-level/ref-create b/levels/en/low-level/ref-create similarity index 100% rename from levels/low-level/ref-create rename to levels/en/low-level/ref-create diff --git a/levels/low-level/ref-move b/levels/en/low-level/ref-move similarity index 100% rename from levels/low-level/ref-move rename to levels/en/low-level/ref-move diff --git a/levels/low-level/ref-remove b/levels/en/low-level/ref-remove similarity index 100% rename from levels/low-level/ref-remove rename to levels/en/low-level/ref-remove diff --git a/levels/low-level/sequence b/levels/en/low-level/sequence similarity index 100% rename from levels/low-level/sequence rename to levels/en/low-level/sequence diff --git a/levels/low-level/symref-create b/levels/en/low-level/symref-create similarity index 100% rename from levels/low-level/symref-create rename to levels/en/low-level/symref-create diff --git a/levels/low-level/symref-no-deref b/levels/en/low-level/symref-no-deref similarity index 100% rename from levels/low-level/symref-no-deref rename to levels/en/low-level/symref-no-deref diff --git a/levels/low-level/tree-create b/levels/en/low-level/tree-create similarity index 100% rename from levels/low-level/tree-create rename to levels/en/low-level/tree-create diff --git a/levels/low-level/tree-nested b/levels/en/low-level/tree-nested similarity index 100% rename from levels/low-level/tree-nested rename to levels/en/low-level/tree-nested diff --git a/levels/low-level/tree-read b/levels/en/low-level/tree-read similarity index 100% rename from levels/low-level/tree-read rename to levels/en/low-level/tree-read diff --git a/levels/low-level/welcome b/levels/en/low-level/welcome similarity index 100% rename from levels/low-level/welcome rename to levels/en/low-level/welcome diff --git a/levels/merge/conflict b/levels/en/merge/conflict similarity index 100% rename from levels/merge/conflict rename to levels/en/merge/conflict diff --git a/levels/merge/merge b/levels/en/merge/merge similarity index 100% rename from levels/merge/merge rename to levels/en/merge/merge diff --git a/levels/merge/merge-abort b/levels/en/merge/merge-abort similarity index 100% rename from levels/merge/merge-abort rename to levels/en/merge/merge-abort diff --git a/levels/merge/sequence b/levels/en/merge/sequence similarity index 100% rename from levels/merge/sequence rename to levels/en/merge/sequence diff --git a/levels/remotes/friend b/levels/en/remotes/friend similarity index 100% rename from levels/remotes/friend rename to levels/en/remotes/friend diff --git a/levels/remotes/problems b/levels/en/remotes/problems similarity index 100% rename from levels/remotes/problems rename to levels/en/remotes/problems diff --git a/levels/remotes/sequence b/levels/en/remotes/sequence similarity index 100% rename from levels/remotes/sequence rename to levels/en/remotes/sequence diff --git a/levels/sandbox/empty b/levels/en/sandbox/empty similarity index 100% rename from levels/sandbox/empty rename to levels/en/sandbox/empty diff --git a/levels/sandbox/remote b/levels/en/sandbox/remote similarity index 100% rename from levels/sandbox/remote rename to levels/en/sandbox/remote diff --git a/levels/sandbox/sequence b/levels/en/sandbox/sequence similarity index 100% rename from levels/sandbox/sequence rename to levels/en/sandbox/sequence diff --git a/levels/sandbox/three-commits b/levels/en/sandbox/three-commits similarity index 100% rename from levels/sandbox/three-commits rename to levels/en/sandbox/three-commits diff --git a/levels/sequence b/levels/en/sequence similarity index 100% rename from levels/sequence rename to levels/en/sequence diff --git a/levels/shit-happens/bad-commit b/levels/en/shit-happens/bad-commit similarity index 100% rename from levels/shit-happens/bad-commit rename to levels/en/shit-happens/bad-commit diff --git a/levels/shit-happens/pushed-something-broken b/levels/en/shit-happens/pushed-something-broken similarity index 100% rename from levels/shit-happens/pushed-something-broken rename to levels/en/shit-happens/pushed-something-broken diff --git a/levels/shit-happens/reflog b/levels/en/shit-happens/reflog similarity index 100% rename from levels/shit-happens/reflog rename to levels/en/shit-happens/reflog diff --git a/levels/shit-happens/restore-a-file b/levels/en/shit-happens/restore-a-file similarity index 100% rename from levels/shit-happens/restore-a-file rename to levels/en/shit-happens/restore-a-file diff --git a/levels/shit-happens/restore-a-file-from-the-past b/levels/en/shit-happens/restore-a-file-from-the-past similarity index 100% rename from levels/shit-happens/restore-a-file-from-the-past rename to levels/en/shit-happens/restore-a-file-from-the-past diff --git a/levels/shit-happens/sequence b/levels/en/shit-happens/sequence similarity index 100% rename from levels/shit-happens/sequence rename to levels/en/shit-happens/sequence diff --git a/levels/stash/sequence b/levels/en/stash/sequence similarity index 100% rename from levels/stash/sequence rename to levels/en/stash/sequence diff --git a/levels/stash/stash b/levels/en/stash/stash similarity index 100% rename from levels/stash/stash rename to levels/en/stash/stash diff --git a/levels/stash/stash-branch b/levels/en/stash/stash-branch similarity index 100% rename from levels/stash/stash-branch rename to levels/en/stash/stash-branch diff --git a/levels/stash/stash-clear b/levels/en/stash/stash-clear similarity index 100% rename from levels/stash/stash-clear rename to levels/en/stash/stash-clear diff --git a/levels/stash/stash-merge b/levels/en/stash/stash-merge similarity index 100% rename from levels/stash/stash-merge rename to levels/en/stash/stash-merge diff --git a/levels/stash/stash-pop b/levels/en/stash/stash-pop similarity index 100% rename from levels/stash/stash-pop rename to levels/en/stash/stash-pop diff --git a/levels/tags/add-tag b/levels/en/tags/add-tag similarity index 100% rename from levels/tags/add-tag rename to levels/en/tags/add-tag diff --git a/levels/tags/add-tag-later b/levels/en/tags/add-tag-later similarity index 100% rename from levels/tags/add-tag-later rename to levels/en/tags/add-tag-later diff --git a/levels/tags/remote-tag b/levels/en/tags/remote-tag similarity index 100% rename from levels/tags/remote-tag rename to levels/en/tags/remote-tag diff --git a/levels/tags/remove-tag b/levels/en/tags/remove-tag similarity index 100% rename from levels/tags/remove-tag rename to levels/en/tags/remove-tag diff --git a/levels/tags/sequence b/levels/en/tags/sequence similarity index 100% rename from levels/tags/sequence rename to levels/en/tags/sequence diff --git a/levels/unused/checkout b/levels/en/unused/checkout similarity index 100% rename from levels/unused/checkout rename to levels/en/unused/checkout diff --git a/levels/unused/clone b/levels/en/unused/clone similarity index 100% rename from levels/unused/clone rename to levels/en/unused/clone diff --git a/levels/unused/commit b/levels/en/unused/commit similarity index 100% rename from levels/unused/commit rename to levels/en/unused/commit diff --git a/levels/unused/commit-a b/levels/en/unused/commit-a similarity index 100% rename from levels/unused/commit-a rename to levels/en/unused/commit-a diff --git a/levels/unused/fetch b/levels/en/unused/fetch similarity index 100% rename from levels/unused/fetch rename to levels/en/unused/fetch diff --git a/levels/unused/files-move b/levels/en/unused/files-move similarity index 100% rename from levels/unused/files-move rename to levels/en/unused/files-move diff --git a/levels/unused/index-mv b/levels/en/unused/index-mv similarity index 100% rename from levels/unused/index-mv rename to levels/en/unused/index-mv diff --git a/levels/unused/init b/levels/en/unused/init similarity index 100% rename from levels/unused/init rename to levels/en/unused/init diff --git a/levels/unused/pull-push b/levels/en/unused/pull-push similarity index 100% rename from levels/unused/pull-push rename to levels/en/unused/pull-push diff --git a/levels/unused/remotes-add b/levels/en/unused/remotes-add similarity index 100% rename from levels/unused/remotes-add rename to levels/en/unused/remotes-add diff --git a/levels/unused/remotes-delete b/levels/en/unused/remotes-delete similarity index 100% rename from levels/unused/remotes-delete rename to levels/en/unused/remotes-delete diff --git a/levels/unused/restore b/levels/en/unused/restore similarity index 100% rename from levels/unused/restore rename to levels/en/unused/restore diff --git a/levels/unused/split b/levels/en/unused/split similarity index 100% rename from levels/unused/split rename to levels/en/unused/split diff --git a/levels/unused/steps b/levels/en/unused/steps similarity index 100% rename from levels/unused/steps rename to levels/en/unused/steps diff --git a/levels/unused/who-are-you b/levels/en/unused/who-are-you similarity index 100% rename from levels/unused/who-are-you rename to levels/en/unused/who-are-you diff --git a/levels/workflows/gitignore b/levels/en/workflows/gitignore similarity index 100% rename from levels/workflows/gitignore rename to levels/en/workflows/gitignore diff --git a/levels/workflows/pr b/levels/en/workflows/pr similarity index 100% rename from levels/workflows/pr rename to levels/en/workflows/pr diff --git a/levels/workflows/sequence b/levels/en/workflows/sequence similarity index 100% rename from levels/workflows/sequence rename to levels/en/workflows/sequence diff --git a/project.godot b/project.godot index 8af698d..808e7e6 100644 --- a/project.godot +++ b/project.godot @@ -149,6 +149,10 @@ mute={ ] } +[locale] + +translations=PoolStringArray( "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ) + [network] limits/debugger_stdout/max_chars_per_second=100000 diff --git a/resources/localizations.csv b/resources/localizations.csv new file mode 100644 index 0000000..12f76b2 --- /dev/null +++ b/resources/localizations.csv @@ -0,0 +1,17 @@ +keys,en,it +LEVELS,Livels,Livelli +QUIT,Quit,Esci +BACK,Back,Indietro +RELOAD,Reload,Ricarica +MUSIC,Toggle Music,Musica +NEXT_LEVEL,Next Level,Prossimo Livello +GIT_MESSAGE,"Hi! It seems that you don't have Git installed yet! + +On Linux, please install it from your package manager, usually the package is called "git"! + +On macOS 10.8 and below, you can download Git from git-scm.com.","Ciao! Sembra che tu non abbia ancora installato Git! + +Su Linux, installalo dal tuo gestore di pacchetti, di solito il pacchetto si chiama "git"! + +Su macOS 10.8 e versioni precedenti, puoi scaricare Git da git-scm.com." +INSTALL,"Sure, I'll install it!","Sicuro, lo installerò" \ No newline at end of file diff --git a/resources/localizations.csv.import b/resources/localizations.csv.import new file mode 100644 index 0000000..e2044a4 --- /dev/null +++ b/resources/localizations.csv.import @@ -0,0 +1,16 @@ +[remap] + +importer="csv_translation" +type="Translation" + +[deps] + +files=[ "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ] + +source_file="res://resources/localizations.csv" +dest_files=[ "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ] + +[params] + +compress=true +delimiter=0 diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..b578dfbf17d0b2a7dc89e09f2005de5d44e12211 GIT binary patch literal 785 zcmbW0&ubGw6vyADF-_WP6(JP~HZh@9FpUAhVm-9x&<4^UW*0nE4BPFHEZOdc%ti$9 z;D6AAihqE?lV=Y?r6?Z6gBL+OdF;(gTUx=1-?eO2F9= zQkr!kX%Im_L(nj`4cxBgn`@4slL*&3R#W(a!JVYvw%z(snzY(>%ZEv%fg#YZbfZux z(g<5v|D2g0Bnr}i+w`y?eT_j+2YdFD*r&k7z`GRa31}Kj0q(^-+}=E!g+2kFK?JaG z7;$Y2$~nxv?>pP?pgcSi=I;-d-t%|9^w=@~>6_hykBIq&nDG4O<15!*BmTS2w`j@W zd-H5ecz$>NWf$R}d+@B|;0w5AT1`^=v%Q{Ho_xNv*xK)D88WX8AJDHhf8WmOrS_?f$TXKHv9bs92H`qxK4R5N;b zkcb|Ryy~jy>lf}OV{8#HEwyAjOUyJ4h#S(LvCmNEQ6!_s%=$(5VkTzW2WOzxVDvxKg>4Wr4-O zAx^_D-ZsQy#WifvFg(k#!*@q!4V5E+%Z1Z&OT&u?Wx)_?@n& z(;0SxB-o)lD@f2$js}Ui9Mz z%eRDO8cb$2MU_e9qZ8GY+;B|){#2<}wYAaK%DsH^d|lp3%VZ`a%Q};Hhx9)wbeOJ> zOb_by-}#FJ?d2aYqOm)v_LSP4`RNBUJGuMH8#Wo%?I(JXLYegJ&N(w4!+VrB0c+DzRG$ G|HnUm*SY)v literal 0 HcmV?d00001 diff --git a/scenes/card.tscn b/scenes/card.tscn index 55c230f..9de01e4 100644 --- a/scenes/card.tscn +++ b/scenes/card.tscn @@ -170,5 +170,6 @@ stretch_mode = 6 __meta__ = { "_edit_use_anchors_": false } + [connection signal="mouse_entered" from="Area2D" to="." method="_mouse_entered"] [connection signal="mouse_exited" from="Area2D" to="." method="_mouse_exited"] diff --git a/scenes/cards.gd b/scenes/cards.gd index d68dc02..e6373d3 100644 --- a/scenes/cards.gd +++ b/scenes/cards.gd @@ -3,7 +3,7 @@ extends Control var card_store = {} var cards var card_radius = 1500 -var lang = "it" # TODO: Make a global variable to setting dir and cards localizations +#var lang = "it" # TODO: Make a global variable to setting dir and cards localizations func _ready(): load_card_store() @@ -17,7 +17,7 @@ func _process(_delta): func load_card_store(): card_store = {} - var cards_json = JSON.parse(helpers.read_file("res://resources/cards_i18n.json")).result + var cards_json = JSON.parse(helpers.read_file("res://resources/cards.json")).result for card in cards_json: card_store[card["id"]] = card @@ -40,7 +40,7 @@ func draw_card(card): new_card.id = card["id"] new_card.command = card["command"] - new_card.description = card["description"][lang] + new_card.description = card["description"][helpers.lang] new_card.energy = 0 #card.energy new_card.position = Vector2(rect_size.x, rect_size.y*2) add_child(new_card) diff --git a/scenes/cards.tscn b/scenes/cards.tscn index 1fc2fcc..bc678d1 100644 --- a/scenes/cards.tscn +++ b/scenes/cards.tscn @@ -49,4 +49,5 @@ text = "3" __meta__ = { "_edit_use_anchors_": false } + [connection signal="pressed" from="Button" to="." method="redraw_all_cards"] diff --git a/scenes/chapter.gd b/scenes/chapter.gd index 9f2abc2..b0c9ad4 100644 --- a/scenes/chapter.gd +++ b/scenes/chapter.gd @@ -13,7 +13,7 @@ func load(path): var level_names = [] var dir = Directory.new() - dir.open("res://levels/%s" % slug) + dir.open("res://levels/" + helpers.lang + "/%s" % slug) dir.list_dir_begin() while true: @@ -28,7 +28,7 @@ func load(path): var final_level_sequence = [] - var level_sequence = Array(helpers.read_file("res://levels/%s/sequence" % slug, "").split("\n")) + var level_sequence = Array(helpers.read_file("res://levels/" + helpers.lang + "/%s/sequence" % slug, "").split("\n")) for level in level_sequence: if level == "": @@ -42,7 +42,7 @@ func load(path): for l in final_level_sequence: var level = Level.new() - level.load("res://levels/%s/%s" % [slug, l]) + level.load("res://levels/" + helpers.lang + "/%s/%s" % [slug, l]) levels.push_back(level) func _to_string(): diff --git a/scenes/drop_area.tscn b/scenes/drop_area.tscn index ed564e6..8a85979 100644 --- a/scenes/drop_area.tscn +++ b/scenes/drop_area.tscn @@ -45,5 +45,6 @@ material = SubResource( 3 ) position = Vector2( -0.102825, -0.377726 ) scale = Vector2( 2.25501, 2.25501 ) texture = ExtResource( 2 ) + [connection signal="area_entered" from="Area2D" to="." method="_mouse_entered"] [connection signal="area_exited" from="Area2D" to="." method="_mouse_exited"] diff --git a/scenes/file_browser.tscn b/scenes/file_browser.tscn index cbc6bec..7bfbe1d 100644 --- a/scenes/file_browser.tscn +++ b/scenes/file_browser.tscn @@ -131,5 +131,6 @@ __meta__ = { [node name="PopupMenu" type="PopupMenu" parent="."] margin_right = 20.0 margin_bottom = 20.0 + [connection signal="pressed" from="Panel/TextEdit/SaveButton" to="." method="save"] [connection signal="pressed" from="Panel/TextEdit/CloseButton" to="." method="close"] diff --git a/scenes/file_browser_item.tscn b/scenes/file_browser_item.tscn index d623e75..4ceb076 100644 --- a/scenes/file_browser_item.tscn +++ b/scenes/file_browser_item.tscn @@ -122,4 +122,5 @@ autowrap = true [node name="PopupMenu" type="PopupMenu" parent="."] margin_right = 20.0 margin_bottom = 20.0 + [connection signal="id_pressed" from="PopupMenu" to="." method="_popup_menu_pressed"] diff --git a/scenes/helpers.gd b/scenes/helpers.gd index 57dd61f..6d983d7 100644 --- a/scenes/helpers.gd +++ b/scenes/helpers.gd @@ -1,5 +1,7 @@ extends Node +var lang = "it" # Variable for localization + var debug_file_io = false # Crash the game and display the error message. diff --git a/scenes/input_dialog.tscn b/scenes/input_dialog.tscn index 17876b9..4642eed 100644 --- a/scenes/input_dialog.tscn +++ b/scenes/input_dialog.tscn @@ -21,4 +21,5 @@ anchor_bottom = 1.0 __meta__ = { "_edit_use_anchors_": false } + [connection signal="text_entered" from="LineEdit" to="." method="_text_entered"] diff --git a/scenes/level_select.gd b/scenes/level_select.gd index acd0866..42bff1b 100644 --- a/scenes/level_select.gd +++ b/scenes/level_select.gd @@ -15,6 +15,7 @@ func back(): func reload(): + for child in level_list.get_children(): child.queue_free() diff --git a/scenes/level_select.tscn b/scenes/level_select.tscn index 2f8e4f3..d60e69e 100644 --- a/scenes/level_select.tscn +++ b/scenes/level_select.tscn @@ -42,35 +42,11 @@ margin_right = 1320.0 margin_bottom = 1080.0 size_flags_horizontal = 3 -[node name="Button" type="Button" parent="."] -margin_left = 61.0902 -margin_top = 59.0538 -margin_right = 126.09 -margin_bottom = 98.0538 -text = "Back" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Button2" type="Button" parent="."] -margin_left = 138.588 -margin_top = 59.3009 -margin_right = 226.588 -margin_bottom = 98.3009 -focus_mode = 0 -enabled_focus_mode = 0 -text = "Reload" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Button3" parent="." instance=ExtResource( 4 )] - [node name="HelpLabel" type="Label" parent="."] visible = false margin_left = 63.0 margin_top = 159.0 -margin_right = 378.0 +margin_right = 379.0 margin_bottom = 220.0 text = "Help us improving Oh My Git! by answering some questions:" @@ -90,6 +66,41 @@ text = "To the survey /o/" __meta__ = { "_edit_use_anchors_": false } -[connection signal="pressed" from="Button" to="." method="back"] -[connection signal="pressed" from="Button2" to="." method="reload"] + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +anchor_right = 1.0 +margin_left = 89.0 +margin_top = 24.0 +margin_bottom = 63.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Back" type="Button" parent="HBoxContainer"] +margin_right = 75.0 +margin_bottom = 39.0 +text = "BACK" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Reload" type="Button" parent="HBoxContainer"] +margin_left = 80.0 +margin_right = 188.0 +margin_bottom = 39.0 +focus_mode = 0 +enabled_focus_mode = 0 +text = "RELOAD" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Toggle_Music" parent="HBoxContainer" instance=ExtResource( 4 )] +margin_left = 193.0 +margin_top = 0.0 +margin_right = 282.0 +margin_bottom = 39.0 + [connection signal="pressed" from="HelpLabel/Button3" to="." method="onSurveyPressed"] +[connection signal="pressed" from="HBoxContainer/Back" to="." method="back"] +[connection signal="pressed" from="HBoxContainer/Reload" to="." method="reload"] diff --git a/scenes/levels.gd b/scenes/levels.gd index 593b728..07d645c 100644 --- a/scenes/levels.gd +++ b/scenes/levels.gd @@ -9,7 +9,7 @@ func reload(): chapters = [] var dir = Directory.new() - dir.open("res://levels") + dir.open("res://levels/" + helpers.lang) # TODO: Add language directory to get a correct language dir.list_dir_begin() var chapter_names = [] @@ -26,7 +26,7 @@ func reload(): var final_chapter_sequence = [] - var chapter_sequence = Array(helpers.read_file("res://levels/sequence", "").split("\n")) + var chapter_sequence = Array(helpers.read_file("res://levels/" + helpers.lang + "/sequence", "").split("\n")) for chapter in chapter_sequence: if chapter == "": @@ -40,5 +40,5 @@ func reload(): for c in final_chapter_sequence: var chapter = Chapter.new() - chapter.load("res://levels/%s" % c) + chapter.load("res://levels/" + helpers.lang + "/%s" % c) chapters.push_back(chapter) diff --git a/scenes/main.tscn b/scenes/main.tscn index e19dec2..303f9a7 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -206,31 +206,31 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="BackButton" type="Button" parent="Menu"] -margin_right = 65.0 +[node name="Back" type="Button" parent="Menu"] +margin_right = 75.0 margin_bottom = 39.0 focus_mode = 0 enabled_focus_mode = 0 -text = "Back" +text = "BACK" __meta__ = { "_edit_use_anchors_": false } -[node name="ReloadButton2" type="Button" parent="Menu"] -margin_left = 73.0 -margin_right = 161.0 +[node name="Reload" type="Button" parent="Menu"] +margin_left = 83.0 +margin_right = 191.0 margin_bottom = 39.0 focus_mode = 0 enabled_focus_mode = 0 -text = "Reload" +text = "RELOAD" __meta__ = { "_edit_use_anchors_": false } [node name="CardsButton" type="Button" parent="Menu"] visible = false -margin_left = 458.0 -margin_right = 539.0 +margin_left = 169.0 +margin_right = 250.0 margin_bottom = 39.0 focus_mode = 0 enabled_focus_mode = 0 @@ -251,35 +251,36 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="Button3" parent="Menu" instance=ExtResource( 11 )] -margin_left = 169.0 +[node name="Toogle_Music" parent="Menu" instance=ExtResource( 11 )] +margin_left = 199.0 margin_top = 0.0 -margin_right = 315.0 +margin_right = 288.0 margin_bottom = 39.0 [node name="CLIBadge" parent="Menu" instance=ExtResource( 10 )] anchor_right = 0.0 anchor_bottom = 0.0 -margin_left = 323.0 -margin_right = 368.0 +margin_left = 296.0 +margin_right = 341.0 margin_bottom = 39.0 [node name="NextLevelButton" type="Button" parent="Menu"] -margin_left = 376.0 -margin_right = 493.0 +margin_left = 349.0 +margin_right = 501.0 margin_bottom = 39.0 focus_mode = 0 custom_styles/hover = SubResource( 2 ) custom_styles/normal = ExtResource( 4 ) enabled_focus_mode = 0 -text = "Next level" +text = "NEXT_LEVEL" __meta__ = { "_edit_use_anchors_": false } + [connection signal="saved" from="Rows/Columns/RightSide/FileBrowser" to="." method="update_repos"] [connection signal="command_done" from="Rows/Controls/Terminal" to="." method="update_repos"] -[connection signal="pressed" from="Menu/BackButton" to="." method="back"] -[connection signal="pressed" from="Menu/ReloadButton2" to="." method="reload_level"] +[connection signal="pressed" from="Menu/Back" to="." method="back"] +[connection signal="pressed" from="Menu/Reload" to="." method="reload_level"] [connection signal="pressed" from="Menu/CardsButton" to="." method="toggle_cards"] [connection signal="pressed" from="Menu/Tip!" to="." method="new_tip"] [connection signal="pressed" from="Menu/NextLevelButton" to="." method="load_next_level"] diff --git a/scenes/music_button.gd b/scenes/music_button.gd index 6cc4e03..330356a 100644 --- a/scenes/music_button.gd +++ b/scenes/music_button.gd @@ -1,6 +1,5 @@ extends Button - func _ready(): pass diff --git a/scenes/music_button.tscn b/scenes/music_button.tscn index 70f47b0..a48cc46 100644 --- a/scenes/music_button.tscn +++ b/scenes/music_button.tscn @@ -2,16 +2,17 @@ [ext_resource path="res://scenes/music_button.gd" type="Script" id=1] -[node name="Button3" type="Button"] +[node name="Toggle_music" type="Button"] margin_left = 241.005 margin_top = 58.856 margin_right = 387.005 margin_bottom = 97.856 focus_mode = 0 enabled_focus_mode = 0 -text = "Toggle music" +text = "MUSIC" script = ExtResource( 1 ) __meta__ = { "_edit_use_anchors_": false } + [connection signal="pressed" from="." to="." method="toggle_music"] diff --git a/scenes/no_git.tscn b/scenes/no_git.tscn index b4cad7c..60bc98c 100644 --- a/scenes/no_git.tscn +++ b/scenes/no_git.tscn @@ -58,11 +58,11 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="Button" type="Button" parent="VBoxContainer"] +[node name="Levels" type="Button" parent="VBoxContainer"] visible = false margin_right = 351.0 margin_bottom = 39.0 -text = "Levels" +text = "LEVELS" [node name="Button3" type="Button" parent="VBoxContainer"] visible = false @@ -70,10 +70,10 @@ margin_right = 351.0 margin_bottom = 39.0 text = "Sandbox" -[node name="Button2" type="Button" parent="VBoxContainer"] +[node name="Install" type="Button" parent="VBoxContainer"] margin_right = 351.0 margin_bottom = 39.0 -text = "Sure, I'll install it!" +text = "INSTALL" [node name="Sprite" type="Sprite" parent="."] @@ -94,12 +94,12 @@ margin_left = 20.0 margin_top = 21.0 margin_right = 546.0 margin_bottom = 252.0 -text = "Hi! It seems that you don't have Git installed yet! - -On Linux, please install it from your package manager, usually the package is called \"git\"! - -On macOS 10.8 and below, you can download Git from git-scm.com." +text = "GIT_MESSAGE" autowrap = true -[connection signal="pressed" from="VBoxContainer/Button" to="." method="levels"] +__meta__ = { +"_edit_use_anchors_": false +} + +[connection signal="pressed" from="VBoxContainer/Levels" to="." method="levels"] [connection signal="pressed" from="VBoxContainer/Button3" to="." method="sandbox"] -[connection signal="pressed" from="VBoxContainer/Button2" to="." method="quit"] +[connection signal="pressed" from="VBoxContainer/Install" to="." method="quit"] diff --git a/scenes/node.tscn b/scenes/node.tscn index 643a44c..f951214 100644 --- a/scenes/node.tscn +++ b/scenes/node.tscn @@ -81,6 +81,7 @@ custom_colors/font_color = Color( 1, 1, 1, 1 ) __meta__ = { "_edit_use_anchors_": false } + [connection signal="mouse_entered" from="Rect" to="." method="_on_hover"] [connection signal="mouse_exited" from="Rect" to="." method="_on_unhover"] [connection signal="mouse_entered" from="Area2D" to="." method="_on_hover"] diff --git a/scenes/notification.tscn b/scenes/notification.tscn index 5d944e0..3b552c5 100644 --- a/scenes/notification.tscn +++ b/scenes/notification.tscn @@ -60,4 +60,5 @@ text = "Got it!" __meta__ = { "_edit_use_anchors_": false } + [connection signal="pressed" from="Panel/CenterContainer/OK" to="." method="confirm"] diff --git a/scenes/title.tscn b/scenes/title.tscn index f919e19..2aa0fe7 100644 --- a/scenes/title.tscn +++ b/scenes/title.tscn @@ -52,7 +52,7 @@ __meta__ = { [node name="Button" type="Button" parent="VBoxContainer"] margin_right = 351.0 margin_bottom = 39.0 -text = "Levels" +text = "LEVELS" [node name="Button3" type="Button" parent="VBoxContainer"] margin_top = 44.0 @@ -64,7 +64,7 @@ text = "Sandbox" margin_top = 88.0 margin_right = 351.0 margin_bottom = 127.0 -text = "Quit" +text = "QUIT" [node name="Sprite" type="Sprite" parent="."] From 50ee071f0eb99cc408454f8bcfa9a50c7efaf01d Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 8 Sep 2021 17:00:51 +0200 Subject: [PATCH 04/49] finished the mechanism for setting the language --- images/settings_32x32.png | Bin 0 -> 1022 bytes images/settings_32x32.png.import | 34 +++++++++++++++ levels/{en => en_EN}/bisect/bisect | 0 levels/{en => en_EN}/bisect/sequence | 0 levels/{en => en_EN}/branches/branch-create | 0 levels/{en => en_EN}/branches/branch-remove | 0 levels/{en => en_EN}/branches/checkout-commit | 0 levels/{en => en_EN}/branches/fork | 0 levels/{en => en_EN}/branches/grow | 0 levels/{en => en_EN}/branches/reorder | 0 levels/{en => en_EN}/branches/sequence | 0 levels/{en => en_EN}/changing-the-past/rebase | 0 .../{en => en_EN}/changing-the-past/reorder | 0 .../{en => en_EN}/changing-the-past/sequence | 0 levels/{en => en_EN}/files/files-add | 0 levels/{en => en_EN}/files/files-delete | 0 levels/{en => en_EN}/files/sequence | 0 levels/{en => en_EN}/index/add | 0 levels/{en => en_EN}/index/change | 0 levels/{en => en_EN}/index/checkout | 0 levels/{en => en_EN}/index/compare | 0 levels/{en => en_EN}/index/new | 0 levels/{en => en_EN}/index/reset | 0 levels/{en => en_EN}/index/rm | 0 levels/{en => en_EN}/index/sequence | 0 levels/{en => en_EN}/index/steps | 0 levels/{en => en_EN}/intro/cli | 0 levels/{en => en_EN}/intro/commit | 0 levels/{en => en_EN}/intro/copies | 0 levels/{en => en_EN}/intro/init | 0 levels/{en => en_EN}/intro/remote | 0 levels/{en => en_EN}/intro/risky | 0 levels/{en => en_EN}/intro/sequence | 0 levels/{en => en_EN}/intro/who-are-you | 0 levels/{en => en_EN}/low-level/basics | 0 levels/{en => en_EN}/low-level/blob-create | 0 levels/{en => en_EN}/low-level/blob-remove | 0 levels/{en => en_EN}/low-level/commit-create | 0 levels/{en => en_EN}/low-level/commit-parents | 0 levels/{en => en_EN}/low-level/commit-rhombus | 0 levels/{en => en_EN}/low-level/index-add | 0 levels/{en => en_EN}/low-level/index-remove | 0 levels/{en => en_EN}/low-level/index-update | 0 .../{en => en_EN}/low-level/puzzle-apocalypse | 0 .../low-level/puzzle-precious-blob | 0 .../low-level/puzzle-trees-all-the-way-down | 0 levels/{en => en_EN}/low-level/ref-create | 0 levels/{en => en_EN}/low-level/ref-move | 0 levels/{en => en_EN}/low-level/ref-remove | 0 levels/{en => en_EN}/low-level/sequence | 0 levels/{en => en_EN}/low-level/symref-create | 0 .../{en => en_EN}/low-level/symref-no-deref | 0 levels/{en => en_EN}/low-level/tree-create | 0 levels/{en => en_EN}/low-level/tree-nested | 0 levels/{en => en_EN}/low-level/tree-read | 0 levels/{en => en_EN}/low-level/welcome | 0 levels/{en => en_EN}/merge/conflict | 0 levels/{en => en_EN}/merge/merge | 0 levels/{en => en_EN}/merge/merge-abort | 0 levels/{en => en_EN}/merge/sequence | 0 levels/{en => en_EN}/remotes/friend | 0 levels/{en => en_EN}/remotes/problems | 0 levels/{en => en_EN}/remotes/sequence | 0 levels/{en => en_EN}/sandbox/empty | 0 levels/{en => en_EN}/sandbox/remote | 0 levels/{en => en_EN}/sandbox/sequence | 0 levels/{en => en_EN}/sandbox/three-commits | 0 levels/{en => en_EN}/sequence | 0 levels/{en => en_EN}/shit-happens/bad-commit | 0 .../shit-happens/pushed-something-broken | 0 levels/{en => en_EN}/shit-happens/reflog | 0 .../{en => en_EN}/shit-happens/restore-a-file | 0 .../shit-happens/restore-a-file-from-the-past | 0 levels/{en => en_EN}/shit-happens/sequence | 0 levels/{en => en_EN}/stash/sequence | 0 levels/{en => en_EN}/stash/stash | 0 levels/{en => en_EN}/stash/stash-branch | 0 levels/{en => en_EN}/stash/stash-clear | 0 levels/{en => en_EN}/stash/stash-merge | 0 levels/{en => en_EN}/stash/stash-pop | 0 levels/{en => en_EN}/tags/add-tag | 0 levels/{en => en_EN}/tags/add-tag-later | 0 levels/{en => en_EN}/tags/remote-tag | 0 levels/{en => en_EN}/tags/remove-tag | 0 levels/{en => en_EN}/tags/sequence | 0 levels/{en => en_EN}/unused/checkout | 0 levels/{en => en_EN}/unused/clone | 0 levels/{en => en_EN}/unused/commit | 0 levels/{en => en_EN}/unused/commit-a | 0 levels/{en => en_EN}/unused/fetch | 0 levels/{en => en_EN}/unused/files-move | 0 levels/{en => en_EN}/unused/index-mv | 0 levels/{en => en_EN}/unused/init | 0 levels/{en => en_EN}/unused/pull-push | 0 levels/{en => en_EN}/unused/remotes-add | 0 levels/{en => en_EN}/unused/remotes-delete | 0 levels/{en => en_EN}/unused/restore | 0 levels/{en => en_EN}/unused/split | 0 levels/{en => en_EN}/unused/steps | 0 levels/{en => en_EN}/unused/who-are-you | 0 levels/{en => en_EN}/workflows/gitignore | 0 levels/{en => en_EN}/workflows/pr | 0 levels/{en => en_EN}/workflows/sequence | 0 levels/{it => it_IT}/bisect/bisect | 0 levels/{it => it_IT}/bisect/sequence | 0 levels/{it => it_IT}/branches/branch-create | 0 levels/{it => it_IT}/branches/branch-remove | 0 levels/{it => it_IT}/branches/checkout-commit | 0 levels/{it => it_IT}/branches/fork | 0 levels/{it => it_IT}/branches/grow | 0 levels/{it => it_IT}/branches/reorder | 0 levels/{it => it_IT}/branches/sequence | 0 levels/{it => it_IT}/changing-the-past/rebase | 0 .../{it => it_IT}/changing-the-past/reorder | 0 .../{it => it_IT}/changing-the-past/sequence | 0 levels/{it => it_IT}/files/files-add | 0 levels/{it => it_IT}/files/files-delete | 0 levels/{it => it_IT}/files/sequence | 0 levels/{it => it_IT}/index/add | 0 levels/{it => it_IT}/index/change | 0 levels/{it => it_IT}/index/checkout | 0 levels/{it => it_IT}/index/compare | 0 levels/{it => it_IT}/index/new | 0 levels/{it => it_IT}/index/reset | 0 levels/{it => it_IT}/index/rm | 0 levels/{it => it_IT}/index/sequence | 0 levels/{it => it_IT}/index/steps | 0 levels/{it => it_IT}/intro/cli | 0 levels/{it => it_IT}/intro/commit | 0 levels/{it => it_IT}/intro/copies | 0 levels/{it => it_IT}/intro/init | 0 levels/{it => it_IT}/intro/remote | 0 levels/{it => it_IT}/intro/risky | 0 levels/{it => it_IT}/intro/sequence | 0 levels/{it => it_IT}/intro/who-are-you | 0 levels/{it => it_IT}/low-level/basics | 0 levels/{it => it_IT}/low-level/blob-create | 0 levels/{it => it_IT}/low-level/blob-remove | 0 levels/{it => it_IT}/low-level/commit-create | 0 levels/{it => it_IT}/low-level/commit-parents | 0 levels/{it => it_IT}/low-level/commit-rhombus | 0 levels/{it => it_IT}/low-level/index-add | 0 levels/{it => it_IT}/low-level/index-remove | 0 levels/{it => it_IT}/low-level/index-update | 0 .../{it => it_IT}/low-level/puzzle-apocalypse | 0 .../low-level/puzzle-precious-blob | 0 .../low-level/puzzle-trees-all-the-way-down | 0 levels/{it => it_IT}/low-level/ref-create | 0 levels/{it => it_IT}/low-level/ref-move | 0 levels/{it => it_IT}/low-level/ref-remove | 0 levels/{it => it_IT}/low-level/sequence | 0 levels/{it => it_IT}/low-level/symref-create | 0 .../{it => it_IT}/low-level/symref-no-deref | 0 levels/{it => it_IT}/low-level/tree-create | 0 levels/{it => it_IT}/low-level/tree-nested | 0 levels/{it => it_IT}/low-level/tree-read | 0 levels/{it => it_IT}/low-level/welcome | 0 levels/{it => it_IT}/merge/conflict | 0 levels/{it => it_IT}/merge/merge | 0 levels/{it => it_IT}/merge/merge-abort | 0 levels/{it => it_IT}/merge/sequence | 0 levels/{it => it_IT}/remotes/friend | 0 levels/{it => it_IT}/remotes/problems | 0 levels/{it => it_IT}/remotes/sequence | 0 levels/{it => it_IT}/sandbox/empty | 0 levels/{it => it_IT}/sandbox/remote | 0 levels/{it => it_IT}/sandbox/sequence | 0 levels/{it => it_IT}/sandbox/three-commits | 0 levels/{it => it_IT}/sequence | 0 levels/{it => it_IT}/shit-happens/bad-commit | 0 .../shit-happens/pushed-something-broken | 0 levels/{it => it_IT}/shit-happens/reflog | 0 .../{it => it_IT}/shit-happens/restore-a-file | 0 .../shit-happens/restore-a-file-from-the-past | 0 levels/{it => it_IT}/shit-happens/sequence | 0 levels/{it => it_IT}/stash/sequence | 0 levels/{it => it_IT}/stash/stash | 0 levels/{it => it_IT}/stash/stash-branch | 0 levels/{it => it_IT}/stash/stash-clear | 0 levels/{it => it_IT}/stash/stash-merge | 0 levels/{it => it_IT}/stash/stash-pop | 0 levels/{it => it_IT}/tags/add-tag | 0 levels/{it => it_IT}/tags/add-tag-later | 0 levels/{it => it_IT}/tags/remote-tag | 0 levels/{it => it_IT}/tags/remove-tag | 0 levels/{it => it_IT}/tags/sequence | 0 levels/{it => it_IT}/unused/checkout | 0 levels/{it => it_IT}/unused/clone | 0 levels/{it => it_IT}/unused/commit | 0 levels/{it => it_IT}/unused/commit-a | 0 levels/{it => it_IT}/unused/fetch | 0 levels/{it => it_IT}/unused/files-move | 0 levels/{it => it_IT}/unused/index-mv | 0 levels/{it => it_IT}/unused/init | 0 levels/{it => it_IT}/unused/pull-push | 0 levels/{it => it_IT}/unused/remotes-add | 0 levels/{it => it_IT}/unused/remotes-delete | 0 levels/{it => it_IT}/unused/restore | 0 levels/{it => it_IT}/unused/split | 0 levels/{it => it_IT}/unused/steps | 0 levels/{it => it_IT}/unused/who-are-you | 0 levels/{it => it_IT}/workflows/gitignore | 0 levels/{it => it_IT}/workflows/pr | 0 levels/{it => it_IT}/workflows/sequence | 0 resources/localizations.csv | 5 ++- resources/localizations.en.translation | Bin 785 -> 865 bytes resources/localizations.it.translation | Bin 804 -> 884 bytes scenes/cards.gd | 2 +- scenes/chapter.gd | 6 +-- scenes/game.gd | 3 ++ scenes/helpers.gd | 2 - scenes/levels.gd | 6 +-- scenes/title.gd | 39 ++++++++++++++++++ scenes/title.tscn | 7 ++++ 214 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 images/settings_32x32.png create mode 100644 images/settings_32x32.png.import rename levels/{en => en_EN}/bisect/bisect (100%) rename levels/{en => en_EN}/bisect/sequence (100%) rename levels/{en => en_EN}/branches/branch-create (100%) rename levels/{en => en_EN}/branches/branch-remove (100%) rename levels/{en => en_EN}/branches/checkout-commit (100%) rename levels/{en => en_EN}/branches/fork (100%) rename levels/{en => en_EN}/branches/grow (100%) rename levels/{en => en_EN}/branches/reorder (100%) rename levels/{en => en_EN}/branches/sequence (100%) rename levels/{en => en_EN}/changing-the-past/rebase (100%) rename levels/{en => en_EN}/changing-the-past/reorder (100%) rename levels/{en => en_EN}/changing-the-past/sequence (100%) rename levels/{en => en_EN}/files/files-add (100%) rename levels/{en => en_EN}/files/files-delete (100%) rename levels/{en => en_EN}/files/sequence (100%) rename levels/{en => en_EN}/index/add (100%) rename levels/{en => en_EN}/index/change (100%) rename levels/{en => en_EN}/index/checkout (100%) rename levels/{en => en_EN}/index/compare (100%) rename levels/{en => en_EN}/index/new (100%) rename levels/{en => en_EN}/index/reset (100%) rename levels/{en => en_EN}/index/rm (100%) rename levels/{en => en_EN}/index/sequence (100%) rename levels/{en => en_EN}/index/steps (100%) rename levels/{en => en_EN}/intro/cli (100%) rename levels/{en => en_EN}/intro/commit (100%) rename levels/{en => en_EN}/intro/copies (100%) rename levels/{en => en_EN}/intro/init (100%) rename levels/{en => en_EN}/intro/remote (100%) rename levels/{en => en_EN}/intro/risky (100%) rename levels/{en => en_EN}/intro/sequence (100%) rename levels/{en => en_EN}/intro/who-are-you (100%) rename levels/{en => en_EN}/low-level/basics (100%) rename levels/{en => en_EN}/low-level/blob-create (100%) rename levels/{en => en_EN}/low-level/blob-remove (100%) rename levels/{en => en_EN}/low-level/commit-create (100%) rename levels/{en => en_EN}/low-level/commit-parents (100%) rename levels/{en => en_EN}/low-level/commit-rhombus (100%) rename levels/{en => en_EN}/low-level/index-add (100%) rename levels/{en => en_EN}/low-level/index-remove (100%) rename levels/{en => en_EN}/low-level/index-update (100%) rename levels/{en => en_EN}/low-level/puzzle-apocalypse (100%) rename levels/{en => en_EN}/low-level/puzzle-precious-blob (100%) rename levels/{en => en_EN}/low-level/puzzle-trees-all-the-way-down (100%) rename levels/{en => en_EN}/low-level/ref-create (100%) rename levels/{en => en_EN}/low-level/ref-move (100%) rename levels/{en => en_EN}/low-level/ref-remove (100%) rename levels/{en => en_EN}/low-level/sequence (100%) rename levels/{en => en_EN}/low-level/symref-create (100%) rename levels/{en => en_EN}/low-level/symref-no-deref (100%) rename levels/{en => en_EN}/low-level/tree-create (100%) rename levels/{en => en_EN}/low-level/tree-nested (100%) rename levels/{en => en_EN}/low-level/tree-read (100%) rename levels/{en => en_EN}/low-level/welcome (100%) rename levels/{en => en_EN}/merge/conflict (100%) rename levels/{en => en_EN}/merge/merge (100%) rename levels/{en => en_EN}/merge/merge-abort (100%) rename levels/{en => en_EN}/merge/sequence (100%) rename levels/{en => en_EN}/remotes/friend (100%) rename levels/{en => en_EN}/remotes/problems (100%) rename levels/{en => en_EN}/remotes/sequence (100%) rename levels/{en => en_EN}/sandbox/empty (100%) rename levels/{en => en_EN}/sandbox/remote (100%) rename levels/{en => en_EN}/sandbox/sequence (100%) rename levels/{en => en_EN}/sandbox/three-commits (100%) rename levels/{en => en_EN}/sequence (100%) rename levels/{en => en_EN}/shit-happens/bad-commit (100%) rename levels/{en => en_EN}/shit-happens/pushed-something-broken (100%) rename levels/{en => en_EN}/shit-happens/reflog (100%) rename levels/{en => en_EN}/shit-happens/restore-a-file (100%) rename levels/{en => en_EN}/shit-happens/restore-a-file-from-the-past (100%) rename levels/{en => en_EN}/shit-happens/sequence (100%) rename levels/{en => en_EN}/stash/sequence (100%) rename levels/{en => en_EN}/stash/stash (100%) rename levels/{en => en_EN}/stash/stash-branch (100%) rename levels/{en => en_EN}/stash/stash-clear (100%) rename levels/{en => en_EN}/stash/stash-merge (100%) rename levels/{en => en_EN}/stash/stash-pop (100%) rename levels/{en => en_EN}/tags/add-tag (100%) rename levels/{en => en_EN}/tags/add-tag-later (100%) rename levels/{en => en_EN}/tags/remote-tag (100%) rename levels/{en => en_EN}/tags/remove-tag (100%) rename levels/{en => en_EN}/tags/sequence (100%) rename levels/{en => en_EN}/unused/checkout (100%) rename levels/{en => en_EN}/unused/clone (100%) rename levels/{en => en_EN}/unused/commit (100%) rename levels/{en => en_EN}/unused/commit-a (100%) rename levels/{en => en_EN}/unused/fetch (100%) rename levels/{en => en_EN}/unused/files-move (100%) rename levels/{en => en_EN}/unused/index-mv (100%) rename levels/{en => en_EN}/unused/init (100%) rename levels/{en => en_EN}/unused/pull-push (100%) rename levels/{en => en_EN}/unused/remotes-add (100%) rename levels/{en => en_EN}/unused/remotes-delete (100%) rename levels/{en => en_EN}/unused/restore (100%) rename levels/{en => en_EN}/unused/split (100%) rename levels/{en => en_EN}/unused/steps (100%) rename levels/{en => en_EN}/unused/who-are-you (100%) rename levels/{en => en_EN}/workflows/gitignore (100%) rename levels/{en => en_EN}/workflows/pr (100%) rename levels/{en => en_EN}/workflows/sequence (100%) rename levels/{it => it_IT}/bisect/bisect (100%) rename levels/{it => it_IT}/bisect/sequence (100%) rename levels/{it => it_IT}/branches/branch-create (100%) rename levels/{it => it_IT}/branches/branch-remove (100%) rename levels/{it => it_IT}/branches/checkout-commit (100%) rename levels/{it => it_IT}/branches/fork (100%) rename levels/{it => it_IT}/branches/grow (100%) rename levels/{it => it_IT}/branches/reorder (100%) rename levels/{it => it_IT}/branches/sequence (100%) rename levels/{it => it_IT}/changing-the-past/rebase (100%) rename levels/{it => it_IT}/changing-the-past/reorder (100%) rename levels/{it => it_IT}/changing-the-past/sequence (100%) rename levels/{it => it_IT}/files/files-add (100%) rename levels/{it => it_IT}/files/files-delete (100%) rename levels/{it => it_IT}/files/sequence (100%) rename levels/{it => it_IT}/index/add (100%) rename levels/{it => it_IT}/index/change (100%) rename levels/{it => it_IT}/index/checkout (100%) rename levels/{it => it_IT}/index/compare (100%) rename levels/{it => it_IT}/index/new (100%) rename levels/{it => it_IT}/index/reset (100%) rename levels/{it => it_IT}/index/rm (100%) rename levels/{it => it_IT}/index/sequence (100%) rename levels/{it => it_IT}/index/steps (100%) rename levels/{it => it_IT}/intro/cli (100%) rename levels/{it => it_IT}/intro/commit (100%) rename levels/{it => it_IT}/intro/copies (100%) rename levels/{it => it_IT}/intro/init (100%) rename levels/{it => it_IT}/intro/remote (100%) rename levels/{it => it_IT}/intro/risky (100%) rename levels/{it => it_IT}/intro/sequence (100%) rename levels/{it => it_IT}/intro/who-are-you (100%) rename levels/{it => it_IT}/low-level/basics (100%) rename levels/{it => it_IT}/low-level/blob-create (100%) rename levels/{it => it_IT}/low-level/blob-remove (100%) rename levels/{it => it_IT}/low-level/commit-create (100%) rename levels/{it => it_IT}/low-level/commit-parents (100%) rename levels/{it => it_IT}/low-level/commit-rhombus (100%) rename levels/{it => it_IT}/low-level/index-add (100%) rename levels/{it => it_IT}/low-level/index-remove (100%) rename levels/{it => it_IT}/low-level/index-update (100%) rename levels/{it => it_IT}/low-level/puzzle-apocalypse (100%) rename levels/{it => it_IT}/low-level/puzzle-precious-blob (100%) rename levels/{it => it_IT}/low-level/puzzle-trees-all-the-way-down (100%) rename levels/{it => it_IT}/low-level/ref-create (100%) rename levels/{it => it_IT}/low-level/ref-move (100%) rename levels/{it => it_IT}/low-level/ref-remove (100%) rename levels/{it => it_IT}/low-level/sequence (100%) rename levels/{it => it_IT}/low-level/symref-create (100%) rename levels/{it => it_IT}/low-level/symref-no-deref (100%) rename levels/{it => it_IT}/low-level/tree-create (100%) rename levels/{it => it_IT}/low-level/tree-nested (100%) rename levels/{it => it_IT}/low-level/tree-read (100%) rename levels/{it => it_IT}/low-level/welcome (100%) rename levels/{it => it_IT}/merge/conflict (100%) rename levels/{it => it_IT}/merge/merge (100%) rename levels/{it => it_IT}/merge/merge-abort (100%) rename levels/{it => it_IT}/merge/sequence (100%) rename levels/{it => it_IT}/remotes/friend (100%) rename levels/{it => it_IT}/remotes/problems (100%) rename levels/{it => it_IT}/remotes/sequence (100%) rename levels/{it => it_IT}/sandbox/empty (100%) rename levels/{it => it_IT}/sandbox/remote (100%) rename levels/{it => it_IT}/sandbox/sequence (100%) rename levels/{it => it_IT}/sandbox/three-commits (100%) rename levels/{it => it_IT}/sequence (100%) rename levels/{it => it_IT}/shit-happens/bad-commit (100%) rename levels/{it => it_IT}/shit-happens/pushed-something-broken (100%) rename levels/{it => it_IT}/shit-happens/reflog (100%) rename levels/{it => it_IT}/shit-happens/restore-a-file (100%) rename levels/{it => it_IT}/shit-happens/restore-a-file-from-the-past (100%) rename levels/{it => it_IT}/shit-happens/sequence (100%) rename levels/{it => it_IT}/stash/sequence (100%) rename levels/{it => it_IT}/stash/stash (100%) rename levels/{it => it_IT}/stash/stash-branch (100%) rename levels/{it => it_IT}/stash/stash-clear (100%) rename levels/{it => it_IT}/stash/stash-merge (100%) rename levels/{it => it_IT}/stash/stash-pop (100%) rename levels/{it => it_IT}/tags/add-tag (100%) rename levels/{it => it_IT}/tags/add-tag-later (100%) rename levels/{it => it_IT}/tags/remote-tag (100%) rename levels/{it => it_IT}/tags/remove-tag (100%) rename levels/{it => it_IT}/tags/sequence (100%) rename levels/{it => it_IT}/unused/checkout (100%) rename levels/{it => it_IT}/unused/clone (100%) rename levels/{it => it_IT}/unused/commit (100%) rename levels/{it => it_IT}/unused/commit-a (100%) rename levels/{it => it_IT}/unused/fetch (100%) rename levels/{it => it_IT}/unused/files-move (100%) rename levels/{it => it_IT}/unused/index-mv (100%) rename levels/{it => it_IT}/unused/init (100%) rename levels/{it => it_IT}/unused/pull-push (100%) rename levels/{it => it_IT}/unused/remotes-add (100%) rename levels/{it => it_IT}/unused/remotes-delete (100%) rename levels/{it => it_IT}/unused/restore (100%) rename levels/{it => it_IT}/unused/split (100%) rename levels/{it => it_IT}/unused/steps (100%) rename levels/{it => it_IT}/unused/who-are-you (100%) rename levels/{it => it_IT}/workflows/gitignore (100%) rename levels/{it => it_IT}/workflows/pr (100%) rename levels/{it => it_IT}/workflows/sequence (100%) diff --git a/images/settings_32x32.png b/images/settings_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..977e052e4742d5bd65f3875c25feabed05d62212 GIT binary patch literal 1022 zcmVpF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H101|XX zSad;kbZBpK08DjbVIV_cZeeU`#Ge_{0000)bVXQnLvL_-a%pF1bO1v`AVG9=a%p09 zbZKvHAZT=Sa5^t9V{&C-bZK^FV{dJ3Z*FrgZ*pfZY-wXHy%_7D{2XP=9gAf9?^MK;cMK%fwPN-y| zuGEF%kSv6V5)fAosL(Aa7%|YID2f9HL5+xXMq;1?iJG?ixwyCRyz2Mr)&qYyP@L&M zx9&Z+PSGA6yoYXVvAA$(h*gCG63!rO!X zoGh0F`*Doaa;(XIMLdRs*oDV&3$}#hhjHqF*s0+6HXg*w_$BL(;G!n-t1zc|f1hrM zzo`)0#T$cyPsZ*-@K-p!X$5$xkYgT~SI(Uf_ynHH&og)km*PU4gwL=&+e#S6Ml8cm z_#XG;j%@!B*T;ah_%l>_Zwr!Pu@)x+$EIlfC>XxbzCA}QJnc<*rN+~N%|UrWYNsZQ zVw=<{^H~mHD^?U@&zD-X;=2{5gJOFj!Fucu#C6$=D+)Pw1imTK0jU%-7#k2cS|E=_ z4BD2B_$%=3go|@frThV>^$FhAg1nL!`oxdacz(tOm2nJ5gYn^7a7WtbNHT$ySte_? zeR^A5E~?5ujaBsu?+OmPYPR$Gta4?y+dZ?}?Vgd7)$Qlja(o@~-&iSQyDbaPbM@*5 z;BU;f^gSA$FRL3j={+3x)$AP$58$Nq`d8t73%8(-_=ab3ZDkn8v0(fZOZp_(s{J8+ zzEAvOd>nX=%QMEWLHV0>S@gq-ys{GcG?ov@F^WBbZ|@@f9vnW%3Hsp>ZkD=X5cXxC z!vpLG<;y4I57Oljui`Zg1f)0dqTVyHUuv^KE3dF2`&WF|Rfe5G`FbHq#PSxT6&B;0 z!1HD_t`C*XNpryejRykxF|4Ndwt5%0<>v`$Kv^dp%6WXArG%x@Ff%T#`T)Meqc|)3 zY{7H&z;)8kM$RPBPh)Zq!obJ28fw}m=TDp4^9vU ziBAFI3qZU$j$`p!Ak7ZM96$_H7ZSq3_yWiWsRiM<2QLm@1JXcsQDDU&!$9~OyYrDP zKw1!p#i3##@!30G2_FU0AVWbIrhe+~FF)=A`P@(p6Q9tiV={B{J4SJr1wa{ID26%b zOUm-4Kq0tu)Q#V7JqzS>LNObVmIvauK zrT#Je3!e7%KclDm3_st3Z~qw;8C>(yb25uF7<>}*(n}N5QyGF%bMg~Y82nNzN)&uj U%TjX~0!uSXfaWp;1qV3;0Ni9#g#Z8m delta 308 zcmaFJHj!=QNGkxb9uPA^arMCo!pcDQ6d=9; z#7t1}kPr^WeLyxy4+zIScyaJBkYFxguy&LJRY@E97H1|;E@YY`7g(BE!Vr|2lb@Kv;FnraqTrKSmYM_9&kz(GRPBPh)Zq!obJ28fw}m=TDp4^9x~ z1k%%i_y!O!j^kLo4oGtVF-RPyE+mA5@g0y4G6RI;9=tdRQV&!Y1y%?$41~Y2J0IBw zqy>Rk94ZD9pS|Oi@Npo`4#XhCVd|&u{_^7ikk1FiAU!bg35_}?3nu?%6z5$I6b0!5 zVW!E7OyVl)#_zYD1M)x~=LTXnAeIN>&p_;%my(%UQj|YAg=v1EZ)tI6aw5Y&&lA(7 z*#0s63vQmqrXrTW?^_`KpXu->phQS`JW$-nO^wCcdIFFY)a>8P0;B_qmpw}O=d){* R7*L;UadIXDLr`##GXT|%Rz3g# delta 332 zcmeyuwuEhi4`V$W0|SEq5dVh)F(6w8h?SsX8c>=QNGkxb9uPA^arMCo!iqrlbRfO~ z#7t1}kPr^W{XjNI4+zIScyaIukmdklP9TQq|Hketbp#|J2*lz@5>t17`Eh14FOzuv z4xlJI5QDVBwB2HH4v~V2gXCc1Us9GY1#-bwfJ_B>O&*AE0kLOZN@i+FQ9i@J;O1#; zDq;!zz6H|%nGSDa@GULQOipC@=gh&v_D>Ng&!ijG|YVvHR4n^1E Date: Wed, 8 Sep 2021 17:21:23 +0200 Subject: [PATCH 05/49] add org file in gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8537f75..0dbc370 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /dependencies/ /build/ *~ +*.org From 14e753aadd9a65f40d01ea716c41de19a3db1956 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 8 Sep 2021 17:22:38 +0200 Subject: [PATCH 06/49] add emacs backup files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0dbc370..3c165fe 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /build/ *~ *.org +#*# From 331f08b899a2ee40f2197799fcf3dd271a1d1c75 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Thu, 9 Sep 2021 14:26:32 +0200 Subject: [PATCH 07/49] traductions of the levels --- levels/it_IT/branches/branch-create | 30 ++++++++++++------------ levels/it_IT/branches/branch-remove | 36 ++++++++++++++--------------- levels/it_IT/files/files-add | 25 ++++++++++---------- levels/it_IT/files/files-delete | 24 +++++++++---------- 4 files changed, 57 insertions(+), 58 deletions(-) diff --git a/levels/it_IT/branches/branch-create b/levels/it_IT/branches/branch-create index 110d929..428c4a5 100644 --- a/levels/it_IT/branches/branch-create +++ b/levels/it_IT/branches/branch-create @@ -1,29 +1,29 @@ -title = Creating branches +title = Creare ramificazioni cards = checkout commit-auto branch branch-delete reset-hard [description] -You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties! +Vieni invitato a due feste! In una di queste, suona il tuo gruppo preferito e l'altra è la festa del tuo miglio amico. Dove andrai? Non preoccuparti - come agente del viaggio nel tempo, puoi andare ad entrambe le feste! -To make it easier to tell which timeline is which, you can create time portals! (We call these "branches".) +Per rendere più facile dire quale sia la linea temporale, puoi creare portali temporali! (Chiamiamoli "rami-branchs") [cli] -Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called "birthday", you can type `git checkout birthday` to travel to it! +Anche viaggiare tra differenti rami temporali è davvero facile usando la linea di comando! Hai un ramo chiamato "birthday", puoi digitare `git checkout birthday` per arrivarci. [setup] -echo "You wrap the birthday present, and grab your concert ticket." > you +echo "Incarta il regalo di compleanno e prendi il biglietto del concerto." > you git add . -git commit -m "Evening preparations" -echo "You go to the birthday party!" >> you +git commit -m "Preparazione serale" +echo "Vai alla festa di compleanno!" >> you git add . -git commit -m "Go to the birthday" +git commit -m "Vai al compleanno" git checkout HEAD~1 -echo "You go to the concert!" > you +echo "Vai al concerto!" > you git add . -git commit -m "Go to the concert" +git commit -m "Vai al concerto" git checkout HEAD~1 @@ -31,14 +31,14 @@ git branch -D main [win] -# Create a branch called 'birthday' that points to the birthday timeline. -git show birthday | grep 'to the birthday' +# Crea un ramo chiamato 'birthday questo punta alla linea temporale del compleanno +git show birthday | grep 'al compleanno' # Create a branch called 'concert' that points to the concert timeline. -git show concert | grep 'to the concert' +git show concert | grep 'al concerto' [congrats] -Now you can travel between those branches easily (using `git checkout`) - try it! +Adesso tu puoi viaggiare tra quie rami facilmente (usando `git checkout`) - Prova! -Your friend is happy that you made it to the birthday party and you also got your concert ticket signed. Yay! +Il tuo amico è felice che tu sia andato alla sua festa di compleanno e anche tu sei contento del biglietto del concerto firmato. Yay! diff --git a/levels/it_IT/branches/branch-remove b/levels/it_IT/branches/branch-remove index 3b576e0..07f8583 100644 --- a/levels/it_IT/branches/branch-remove +++ b/levels/it_IT/branches/branch-remove @@ -1,37 +1,37 @@ -title = Deleting branches +title = Cancellare rami cards = checkout commit-auto reset-hard branch-delete [description] -Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks! +La vita è piena di pericolim, vero? Anche quando cammini a scuola2, sembra che ci siano molti rischi! -This Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around. +Questo Lunedì è particolarmente brutto.Sei arrivato a scuola ma ci sono delle line temporali che tu non vuoi tenere in giro [setup] -echo You leave your house and start walking to school. > you +echo Esci di casa e ti incammini verso la scuola. > you git add . -git commit -m "Good morning!" +git commit -m "Buon giorno!" -echo You walk on the right side of the street. >> you -git commit -am "Right side" +echo Cammini nel lato destro della strada. >> you +git commit -am "Lato destro" -echo You jump over an manhole in the walkway, and arrive at school on time. >> you -git commit -am "Jump" +echo Salti in un tombino nel marciapiede e arrivi in orario a scuola. >> you +git commit -am "Salto" git checkout HEAD^ -b friend -echo Suddenly, you fall down, splash into stinking water, and are eaten by an alligator. >> you -git commit -am "A new friend" +echo All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori. >> you +git commit -am "Un nuovo amico" git checkout HEAD~2 -b music -echo You walk on the left side of the street. >> you -git commit -am "Left side" +echo Cammini nel lato sinistro della strada. >> you +git commit -am "Lato sinistro" -echo Because you\'re kind of late, you start running. Someone throws a piano out of their windows, and it smashes you. >> you -git commit -am "Sounds nice" +echo Siccome sei in ritardo, inizi a corre ma qualcuno lanci un pianoforte dalla finestra e ti schiacci. >> you +git commit -am "Bei suoni" git checkout HEAD^ -b ice-cream -echo You\'re not in a hurry, and walk slowly. You even get some ice cream on your way. You arrive at school too late, your teacher is angry, and you are expelled. >> you +echo Non sei preoccupato e cammini lentamente. Prendi anche un gelato per strada. Arrivi troppo tardi a scuola, il tuo insegnante è arrabbiato e vieni espulso da scuola. >> you git commit -am "Yum" git branch -M main leap @@ -39,9 +39,9 @@ git checkout leap^^ [win] -# Find the bad branches and delete them. Keep only the best one. +# Trova i rami cattivi e cancellali. Tieni solo il migliore. test "$(git show-ref --heads | cut -f2 -d' ')" = "$(echo refs/heads/leap)" [congrats] -On second thought, maybe you even prefer the ice cream timeline to the main one? :) +Ripensandoci preferisci la linea temporale del gelato? :) diff --git a/levels/it_IT/files/files-add b/levels/it_IT/files/files-add index 0676df6..f0149b9 100644 --- a/levels/it_IT/files/files-add +++ b/levels/it_IT/files/files-add @@ -1,32 +1,31 @@ -title = Interior design +title = Arredatore di interni cards = file-new file-delete [description] -Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile, -you see that their colors match the color of your bed! +Ora che la tua stanza sembra in ordine, puoi iniziare a disfare le tue cose. Hai portato con te due mobili nuovi e con un sorriso luminoso, +vedi che i loro colori corrispondono al colore del tuo letto! -Build up your two pieces of furniture by playing the touch card. -Then name your furniture - you can choose whatever you like. +Costruisci i tuoi due mobili usando la carta touch. +Quindi dai il nome ai tuoi mobili - puoi sciegliere quello che tu vuoi. -Make sure the colors match! You can find the bed's color in its description. -Don't forget to add a color and description to your new furnitures, too! +Assicurati che i colori siano uguali! Puoi trovare il colore del letto nella descrizione. +Non dimenticare di aggiungere un colore e una descrizione anche ai tuoi nuovi mobile. [setup] - -echo A yellow cozy bed. > bed +echo Un accogliente letto giallo. > bed [win] -# Add two more pieces of furniture +# Aggiungi altri due mobili NUM_FILES="$(ls | wc -l)" test "$NUM_FILES" -ge 3 -# Make sure the colors match your bed's color. +# Assicurati che i colori corrispondano a quelle del tuo letto NUM_FILES="$(ls | wc -l)" -YELLOW_FILES="$(grep -li yellow * | wc -l)" +YELLOW_FILES="$(grep -li giallo * | wc -l)" test "$NUM_FILES" -ge 2 && test "$YELLOW_FILES" = "$NUM_FILES" [congrats] -Don't you immediately feel more at home? +Non ti senti già più a casa? diff --git a/levels/it_IT/files/files-delete b/levels/it_IT/files/files-delete index 7bf33be..9b207dc 100644 --- a/levels/it_IT/files/files-delete +++ b/levels/it_IT/files/files-delete @@ -1,36 +1,36 @@ -title = Unexpected Roommates +title = Coinquilini inaspettati cards = file-delete [description] -The first day at Time Travel School comes to an end and you receive the key to your room. -Full of excitement you open the door just to find... spider webs! Spider webs everywhere! +Il primo giorno alla Scuola del viaggio nel tempo sta per finire e tu ricevi le chiavi della tua stanza. +Eccitatissimo apri la porta giusto per vedere... ragnatele! Ragnatele ovunque! -Remove all the spider webs you can find with the remove card! +Cava tutte le ragnatele che puoi trovare con la carta remove! [cli] -On the command line, you can easily delete all files ending in -web using this command: +Nella line di comando, puoi facilmente eliminare tutti i file che finiscono in "web" usando il comando: rm *web [setup] -echo A tiny spider web is next to your window. > tiny_web -echo A big spider web sticks above your bed. > big_web -echo A cozy bed. > bed -echo An extra thick spider web is right beside your door. > thick_web +echo Una piccola ragnatela è accanto alla tua finestra. > tiny_web +echo Una grande ragnatela attaccata sopra al tuo letto. > big_web +echo Un letto accogliente. > bed +echo Una ragnatela spessa è alla destra della tua porta. > thick_web [win] -# Remove all spider webs. +# Rimuovi tutte le ragnatele. ! ls | grep thick_web && ! ls | grep big_web && ! ls | grep tiny_web -# But make sure you keep your bed! +# Ma assicurati di mantenere il tuo letto! ls | grep bed [congrats] -Your room looks now very tidy and cozy! Time to unpack your stuff! +Guarda la tua stanza adesso è davvero ordinata ed accogliente! Il momento per disfare le valige! From 68577813c2bc3ccfb550a1fb10a12c45d3b5fdac Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Mon, 13 Sep 2021 17:54:39 +0200 Subject: [PATCH 08/49] some levels translated --- levels/it_IT/branches/checkout-commit | 34 ++++++++++----------- levels/it_IT/branches/fork | 44 +++++++++++++-------------- levels/it_IT/branches/grow | 31 +++++++++---------- levels/it_IT/stash/stash-branch | 23 +++++++------- levels/it_IT/stash/stash-clear | 30 +++++++++--------- levels/it_IT/stash/stash-merge | 29 +++++++++--------- levels/it_IT/stash/stash-pop | 20 ++++++------ levels/it_IT/tags/add-tag | 26 ++++++++-------- levels/it_IT/tags/add-tag-later | 26 ++++++++-------- levels/it_IT/tags/remote-tag | 30 +++++++++--------- levels/it_IT/tags/remove-tag | 22 +++++++------- 11 files changed, 156 insertions(+), 159 deletions(-) diff --git a/levels/it_IT/branches/checkout-commit b/levels/it_IT/branches/checkout-commit index 87061d8..3d913df 100644 --- a/levels/it_IT/branches/checkout-commit +++ b/levels/it_IT/branches/checkout-commit @@ -1,43 +1,43 @@ -title = Moving through time +title = Muoversi attraverso il tempo cards = checkout commit-auto [description] -The yellow boxes are frozen points in time, we call them "commits"! You can travel between them using the "checkout" card! (Try it!) +La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli "commits"! Puoi viaggiare tra loro usando la carta "checkout"! (Provala!) -Can you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit! +Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i files per risolvere il problema ed invia un nuovo commit! [cli] -To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want! +Guarda uno specifico commit, digita `git checkout` uno spazio e premi il tasto destro sopra il commit che vuoi! -This will insert the commit's unique identifier! +Questo inserirà l'identificatore unico del commit! [setup] -echo "This piggy bank belongs to the big sister. -It contains 10 coins." > piggy_bank +echo "Questo salvadanaio appartiene alla sorella maggiore. +Contiene 10 monete." > piggy_bank git add . -git commit -m "The beginning" +git commit -m "L'inizio" -echo "A young girl with brown, curly hair." > little_sister +echo "Una giovane donna con capelli, ricci, marroni." > little_sister git add . -git commit -m "Little sister comes in" +git commit -m "La sorella piccola è arrivata" -echo "Has 10 coins." >> little_sister -echo "This piggy bank belongs to the big sister. -It is empty." > piggy_bank +echo "Ha 10 monete." >> little_sister +echo "Questo salvadanaio appartiene alla sorella maggiore. +E' vuoto." > piggy_bank git add . -git commit -m "Little sister does something" +git commit -m "La sorella piccola ha fatto qualcosa" git checkout HEAD^^ git branch -df main [win] -# Restore sisterly peace. -{ git show HEAD:piggy_bank | grep "10 coins"; } && { git show HEAD:little_sister | grep -v "10 coins"; } && { git rev-parse HEAD^^^; } +# Ripristina il salvadanaio della sorella. +{ git show HEAD:piggy_bank | grep "10 monete"; } && { git show HEAD:little_sister | grep -v "10 monete"; } && { git rev-parse HEAD^^^; } [congrats] -Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations... +Stupendo! Adesso hai preso famiglirità con la macchina del tempo, vediamo situazioni più complicate... diff --git a/levels/it_IT/branches/fork b/levels/it_IT/branches/fork index a58dcf5..46b94c6 100644 --- a/levels/it_IT/branches/fork +++ b/levels/it_IT/branches/fork @@ -1,65 +1,65 @@ -title = Make parallel commits +title = Crea universi paralleli cards = checkout commit-auto [description] -Did you know that creating parallel timelines is perfectly legal and safe? It's true! +Sai che creare line temporali parallele è perfettamente legale e sicuro? Vero! -Can you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy! +Puoi scoprire qundo le cose sono andate male in questo zoo? Poi torna all'ultimo momento buono e crea un universo parallelo dove sono tutti felicy! [cli] -The blue animal represents a concept known as the "HEAD pointer" in Git: It shows you which commit is the current one. +L'animale blue rappresenta un concetto conosciuto come "HEAD pointer" in Git: Ti mostra qual'è il commit attuale. -Here's a cool trick to go to the previous commit: +Ecco un simpatico trucchetto andare al commit precedente: git checkout HEAD^ -You can also go back two commits by typing, for example: +Puoi anche andare indietro di 2 commit digitando, pre esempio: git checkout HEAD~2 [setup] mkdir cage -echo "Looks very hungry." > cage/lion +echo "Sembra molto affamato." > cage/lion -echo "A small child. -It really loves cats!" > child +echo "Un ragazzino.. +Ama veramente i gatti!" > child git add . -git commit -m "The beginning" +git commit -m "L'inizio" -echo "It's holding a lollipop." >> child -git commit -am "The child buys something" +echo "Tiene in mano un leccalecca." >> child +git commit -am "Il ragazzo compra qualcosa" mv child cage git add . -git commit -m "The child climbs somewhere" +git commit -m "Il bambino si arrampica da qualche parte" git rm cage/child -echo "Looks happy. :)" > cage/lion +echo "E' felice. :)" > cage/lion git add . git commit -m "Oh no" -echo "It's sleeping." > cage/lion +echo "Sta dormendo." > cage/lion git add . -git commit -m "Nap time!" +git commit -m "Ora del pisolino!" git checkout --detach git branch -d main [win] -# Make sure that the child is happy. +# Assicurati che il ragazzino sia felice. git ls-tree --name-only -r HEAD | grep child -# Make sure that the lion gets something to eat. -git show HEAD:cage/lion | grep -v "very hungry" +# Assicurati che il leone abbia qualcosa da mangiare. +git show HEAD:cage/lion | grep -v "molto affamato" [congrats] -Whew, good job! This seems like a *much* better outcome. +Whew, ottimo lavoro! Questo sembra un risultato molto migliore. -Feel free to add more parallel timelines, or make them longer. +Sentiti libero di aggiungere altre line temporali parallele o allungarle. -If you're ready, our next mission is already waiting... +Se sei pronto, la prossima missione ci sta aspettando... diff --git a/levels/it_IT/branches/grow b/levels/it_IT/branches/grow index 77fe360..d560682 100644 --- a/levels/it_IT/branches/grow +++ b/levels/it_IT/branches/grow @@ -1,34 +1,33 @@ -title = Branches grow with you! +title = I rami crescono con tè! cards = checkout commit-auto branch branch-delete reset-hard [description] -Note that there are two options to "travel to the end of a timeline": +Nota che ci sono due opzioni per "viaggire fino alla fine della linea temporale": -First, you can directly travel to the commit, like we've done it before. +Primo, puoi direttamente viaggiare al commit, come abbiamo fatto prima. -And second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline! +e secondo, puoi viaggiare fino all'etichetta del ramo. In questo caso, quando crei un nuovo commit, il ramo cresce con te e punta ancora alla fine della linea temporale! [cli] +Per viaggire in un ramo, digita `git checkout name_of_the_branch`. -To travel to a branch, type `git checkout name_of_the_branch`. - -And to travel to the last commit, type `git checkout --detach name_of_the_branch`. +e per viaggiare all'ultimo commit, digita `git checkout --detach name_of_the_branch`. [setup] -echo "You wrap the birthday present, and grab your concert ticket." > you +echo "In carti il regalo di complanno e prendi il biglietto del concerto." > you git add . -git commit -m "Evening preparations" -echo "You go to the birthday party!" >> you +git commit -m "Preparazioni della sera" +echo "Vai alla festa di compleanno!" >> you git add . -git commit -m "Go to the birthday" +git commit -m "Vai alla festa di compleanno" git branch birthday git checkout HEAD~1 -echo "You go to the concert!" > you +echo "Vai al concerto!" > you git add . -git commit -m "Go to the concert" +git commit -m "Vai al concerto" git branch concert git checkout HEAD~1 @@ -37,7 +36,7 @@ git branch -D main [win] -# Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit +# Viaggi direttamente all'ultimo commit giallo della line temporale del compleanno, fai un cambiamento per te e crea un commit for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do if test $(git rev-parse $commit^) = $(git rev-parse birthday); then return 0 @@ -45,5 +44,5 @@ for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch done return 1 -# Travel to the blue 'concert' branch, make a change to 'you', and a commit. -git show concert^ | grep "Go to the concert" +# Viaggi fino al ramo, blue, del concerto, fai un cambiamento ed un commit. +git show concert^ | grep "Vai al concerto" diff --git a/levels/it_IT/stash/stash-branch b/levels/it_IT/stash/stash-branch index 16c9eae..e51e4d2 100644 --- a/levels/it_IT/stash/stash-branch +++ b/levels/it_IT/stash/stash-branch @@ -1,14 +1,13 @@ -title = Branch from stash +title = Ramo dalla scorta cards = checkout commit-auto merge reset-hard [description] -If you want to keep your changes but they don't belong to the main branch, you can easily -create a new branch from your stashed changes. Just use +Se vuoi matenere tutte le modifiche ma non appartengono al ramo principale, puoi facilemnte creare un nuovo ramo dai cambiamenti dalle modifiche nascoste. Usando git stash branch -If you just want to use the latest stash entry, you can leave the option empty. +Se vuoi solo usare l'ultimo elemento della scorta puoi lasciare vuota l'opzione . -Create a new branch from the stashed changes! +Crea un nuovo ramo dalle modifiche nascoste!! --- tipp1 @@ -19,24 +18,24 @@ tipp3 [setup] -echo "Apple Pie:" > recipe +echo "Torta di mele:" > recipe git add . -git commit -m "creating a recipe" +git commit -m "creata una ricetta" -echo "- 4 Apples" >> recipe +echo "- 4 Mele" >> recipe git add . -git commit -m "Adding ingredients" +git commit -m "Aggiunto ingredienti" -echo "- 500g Flour" >> recipe +echo "- 500g Farina" >> recipe git stash push git checkout main [win] -# Did you create a new branch from the stashed changes? +# Hai creato un nuovo ramo dai cambiamenti nascosti? test "$(git branch --list| wc -l)" -ge 2 [actions] @@ -45,4 +44,4 @@ test "$(git branch --list| wc -l)" -ge 2 [congrats] -Stashed changes are in a new branch! :) +I cambiamenti nascosti sono nel nuovo ramo! :) diff --git a/levels/it_IT/stash/stash-clear b/levels/it_IT/stash/stash-clear index 9a1b697..32f82cb 100644 --- a/levels/it_IT/stash/stash-clear +++ b/levels/it_IT/stash/stash-clear @@ -1,17 +1,17 @@ -title = Clear the Stash +title = Pulire la scorta cards = checkout commit-auto merge reset-hard [description] -If you want to inspect your stash stack, use the command +Se vuoi controllare la tua scorta, usa il comando git stash list - -Oh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with + +Oh, non vuoi mantenere i tuoi cambiamenti nella scorta? C'è un modo per farlo? Poi vai avanti e pulisci la scorta con git stash clear -If you only want to discard a certain stash entry, you can use +Se vuoi solo scartare un certo elemento dalla scorta, puoi usare git stash drop -Clear your stash stack! +Pulisci la tua pila di scorta! --- tipp1 @@ -22,30 +22,30 @@ tipp3 [setup] -echo "Apple Pie:" > recipe +echo "Torta di mele:" > recipe git add . -git commit -m "creating a recipe" +git commit -m "creata una ricetta" -echo "- 4 Apples" >> recipe +echo "- 4 Mele" >> recipe git add . -git commit -m "Adding ingredients" +git commit -m "Aggiunto ingredienti" -echo "- 500g Flour" >> recipe +echo "- 500g Farina" >> recipe git stash push -echo "- 200g Sugar" >> recipe +echo "- 200g Zucchero" >> recipe git stash push -echo "- Pinch of Salt" >> recipe +echo "- Pizzico di sale" >> recipe git stash push git checkout main [win] -# Did you clear your stash stack? +# Hai pulito la tua pila di scorta? test "$(git stash list | wc -l)" -eq 0 [actions] @@ -54,4 +54,4 @@ test "$(git stash list | wc -l)" -eq 0 [congrats] -All clear! :) +Pulito tutto! :) diff --git a/levels/it_IT/stash/stash-merge b/levels/it_IT/stash/stash-merge index a8c9ac1..a4ed759 100644 --- a/levels/it_IT/stash/stash-merge +++ b/levels/it_IT/stash/stash-merge @@ -1,13 +1,12 @@ -title = Merging popped stash +title = Unire la scorta spuntata cards = checkout commit-auto merge reset-hard [description] -When you want to reapply your changes but you already continued working on your file, you might get -a merge conflict! Let's practise this situation. -Pop the changes from the stash with +Quando vuoi riapplicare i cambiamenti ma hai continuato a lavora nei tuoi file, potresti ricevere un conflitto di unione! Facciamo un pò di pratica con questa situazione. +Fai uscire le modifiche dalla scorta con git stash pop -and resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards. +e risolvi i conflitti di unione. Invia la soluzione dei cambiamenti e dopo pulisci la scorta. --- tipp1 @@ -18,31 +17,31 @@ tipp3 [setup] -echo "Apple Pie:" > recipe +echo "Torta di mele:" > recipe git add . -git commit -m "creating a recipe" +git commit -m "creata una ricetta" -echo "- 4 Apples" >> recipe +echo "- 4 Mele" >> recipe git add . -git commit -m "Adding ingredients" +git commit -m "Aggiunti ingredienti" -echo "- 500g Flour" >> recipe +echo "- 500g Farina" >> recipe git stash push -echo "- Pinch of Salt" >> recipe +echo "- Pizzico di sale" >> recipe git checkout main git add recipe [win] -# Did you resolve the confict and commit? -{ git show HEAD | grep "Flour"; } && { git show HEAD | grep "Salt"; } +# Hai rislto i conflitti ed inviato? +{ git show HEAD | grep "Farina"; } && { git show HEAD | grep "Sale"; } -# Did you clear stash stack? +# Hai pulito la pila di scorta? test "$(git stash list | wc -l)" -eq 0 [actions] @@ -51,4 +50,4 @@ test "$(git stash list | wc -l)" -eq 0 [congrats] -Yay, you got your changes back! :) +Yay, hai riavuto le tue modifiche in dietro! :) diff --git a/levels/it_IT/stash/stash-pop b/levels/it_IT/stash/stash-pop index 5ac12d5..cffc30d 100644 --- a/levels/it_IT/stash/stash-pop +++ b/levels/it_IT/stash/stash-pop @@ -1,11 +1,11 @@ -title = Pop from Stash +title = Pop dalla scorta cards = checkout commit-auto merge reset-hard [description] -When you stashed your changes and you want to apply them back to your current working directory, you can use +Quando hai nascosto le tue modifiche e vuoi riapplicarle nella tua directory di lavoro, puoi usare git stash pop -This will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use +Questo rimuoverà i cambiamenti dalla pila di scorta. Se voui anche mantenere le modifiche della pila di scorta usa git stash apply --- @@ -17,24 +17,24 @@ tipp3 [setup] -echo "Apple Pie:" > recipe +echo "Torta di mele:" > recipe git add . -git commit -m "creating a recipe" +git commit -m "creata una ricetta" -echo "- 4 Apples" >> recipe +echo "- 4 Mele" >> recipe git add . -git commit -m "Adding ingredients" +git commit -m "Aggiunto ingredienti" -echo "- 500g Flour" >> recipe +echo "- 500g Farina" >> recipe git stash push git checkout main [win] -# Did you pop the changes from the stash stack? +# Hai pop i cambiamenti dalla pila di scorta? test "$(git stash list | wc -l)" -eq 0 [actions] @@ -43,4 +43,4 @@ test "$(git stash list | wc -l)" -eq 0 [congrats] -Yay, you got your changes back! :) +Yay, hai riavuto i tuoi cambiamenti in dietro! :) diff --git a/levels/it_IT/tags/add-tag b/levels/it_IT/tags/add-tag index 9c5703a..2351635 100644 --- a/levels/it_IT/tags/add-tag +++ b/levels/it_IT/tags/add-tag @@ -1,17 +1,17 @@ -title = Creating tags +title = Creare etichette cards = checkout commit-auto merge reset-hard [description] -Some of your commits may be special commits. Maybe you reached a milestone or a new version number. +Alcuni dei tuoi commit potrebbero essere commit speciali. Potresti aver raggiunto un traguargo o un nuovo numero di versione. -You can mark these commits with a special flag called 'tag'. +Puoi contrassegnare questo commit con un flag spegiale chiamato 'tag'. -Write +Scrivi git tag -to tag your commit. +per etichettare il tuo commit. --- tipp1 @@ -22,26 +22,26 @@ tipp3 [setup] -echo "event 1" > feature-list +echo "event 1" > elenco-caratteristiche git add . -git commit -m "Adding feature 1" +git commit -m "Aggiunta caratteristica 1" -echo "event 2" >> feature-list +echo "event 2" >> elenco-caratteristiche git add . -git commit -m "Adding feature 2" +git commit -m "Aggiunta caratteristica 2" -echo "event 3" >> feature-list +echo "event 3" >> elenco-caratteristiche git add . -git commit -m "Adding feature 3" +git commit -m "Aggiunta caratteristica 3" git checkout --detach main [win] -# Did you create a new tag? +# Hai creato un nuovo tag? test "$(git tag -l | wc -l)" -ge 1 [actions] @@ -50,4 +50,4 @@ test "$(git tag -l | wc -l)" -ge 1 [congrats] -Nice! You tagged your first commit :) +Bene! Hai etichettato il tuo primo commit :) diff --git a/levels/it_IT/tags/add-tag-later b/levels/it_IT/tags/add-tag-later index 905647c..49e17d4 100644 --- a/levels/it_IT/tags/add-tag-later +++ b/levels/it_IT/tags/add-tag-later @@ -1,14 +1,14 @@ -title = Tagging later +title = Etichettare dopo cards = checkout commit-auto merge reset-hard [description] -But what happens if you forgot to tag your current commit? -No Prob! You can also tag older commits via +Ma cosa succede se ti dimentichi di etichettare il corrente commit? +No c'è problema! Puoi etichettare i vecchi commit tramite git tag - -Tag the commit "Adding feature 2" with the name "v1"! + +Etichetta il commit "Aggiunta caratteristica 2" con il nome "v1"! --- tipp1 @@ -19,26 +19,26 @@ tipp3 [setup] -echo "event 1" > feature-list +echo "event 1" > elenco-caratteristiche git add . -git commit -m "Adding feature 1" +git commit -m "Aggiunta caratteristica 1" -echo "event 2" >> feature-list +echo "event 2" >> elenco-caratteristiche git add . -git commit -m "Adding feature 2" +git commit -m "Aggiunta caratteristica 2" -echo "event 3" >> feature-list +echo "event 3" >> elecno-caratteristiche git add . -git commit -m "Adding feature 3" +git commit -m "Aggiunta caratteristica 3" git checkout --detach main [win] -# Did you create a new tag? +# Hai creato una nuova etichetta? test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" [actions] @@ -47,4 +47,4 @@ test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" [congrats] -Well done :) +Motlo bene :) diff --git a/levels/it_IT/tags/remote-tag b/levels/it_IT/tags/remote-tag index 0726915..0a68035 100644 --- a/levels/it_IT/tags/remote-tag +++ b/levels/it_IT/tags/remote-tag @@ -1,34 +1,34 @@ -title = Remote Tags +title = Etichette remote cards = pull push commit-auto checkout [description] -When you work with remote repositories, tags are not pushed or pulled automatically. +Quando lavori con un repositor remoto, le etichette non sono messe o prese automaticamente. -You can push a tag with +Puoi inviare un tag con git push -Or all tags with: +O tutti i tags con git push --tags - -Deleting tags on your remote works with: + +Rimuovere i tags nel repository remoto con git push --delete -You can also sync +Puoi anche sincronizzare git fetch --prune --prune-tags -Add a tag named "v2" to the last commit and push it to the remote. Also pull the v1 tag to your local repository. +Aggiungere un nome di tag "v2" nell'ultimo commit ed inviarlo nel remoto, anche prendere il tag "v1" in quello locale. [setup yours] git checkout main git checkout main -echo "toothbrush sharing" > project-ideas +echo "Condivisione dello spazzolino" > project-ideas git add . -git commit -m "First idea" +git commit -m "Prima idea" -echo "Is my phone upside down? App" >> project-ideas -git commit -am "Another idea" +echo "Il mio telefono è sottosopra? App" >> project-ideas +git commit -am "Un'altra idea" @@ -45,14 +45,14 @@ git branch -u friend/main main git tag v1 HEAD~1 [win] -# v1 tag in your repo +# v1 tag nel tuo repo test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" -# v2 tag in your repo +# v2 tag nel tuo repo test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" [win friend] -# v2 tag in the remote +# v2 tag nel remoto test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" diff --git a/levels/it_IT/tags/remove-tag b/levels/it_IT/tags/remove-tag index 98f2800..2d2dfd9 100644 --- a/levels/it_IT/tags/remove-tag +++ b/levels/it_IT/tags/remove-tag @@ -1,13 +1,13 @@ -title = Removing tags +title = Rimuovere etichette cards = checkout commit-auto merge reset-hard [description] -You added way too many tags? No prob! Delete them with +Hai aggiunto molte ectichette? Non c'è problema! Cancellali con git tag -d -Remove all tags in this repo! +Rimuovi tutti i tag in questo repository! --- tipp1 @@ -18,20 +18,20 @@ tipp3 [setup] -echo "event 1" > feature-list +echo "event 1" > elenco-caratteristiche git add . -git commit -m "Adding feature 1" +git commit -m "Aggiunta caratteristica 1" -echo "event 2" >> feature-list +echo "event 2" >> elenco-caratteristiche git add . -git commit -m "Adding feature 2" +git commit -m "Aggiunta caratteristica 2" -echo "event 3" >> feature-list +echo "event 3" >> elenco-caratteristiche git add . -git commit -m "Adding feature 3" +git commit -m "Aggiunta caratteristica 3" git tag v1 HEAD~2 git tag v2 HEAD~1 @@ -41,7 +41,7 @@ git checkout --detach main [win] -# Did you remove all tags? +# Hai riosso tutte le etichette? test "$(git tag -l | wc -l)" -eq 0 [actions] @@ -50,4 +50,4 @@ test "$(git tag -l | wc -l)" -eq 0 [congrats] -Well done :) +Molto bene :) From 5488edcfc3337249b96b7297a2b8c2ea486d61af Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 14 Sep 2021 12:18:31 +0200 Subject: [PATCH 09/49] some traductions --- levels/it_IT/branches/reorder | 74 ++++++------ resources/cards.json | 214 +++++++++++++++++----------------- 2 files changed, 144 insertions(+), 144 deletions(-) diff --git a/levels/it_IT/branches/reorder b/levels/it_IT/branches/reorder index 1c36c08..d8a0212 100644 --- a/levels/it_IT/branches/reorder +++ b/levels/it_IT/branches/reorder @@ -1,89 +1,89 @@ -title = Moving branches around +title = Muovere i rami cards = checkout commit-auto merge reset-hard [description] -One of your colleagues messed up here, and put the branches in the wrong timelines! +Uno dei tuoi colleghi ha fatto un casino qui e ha messo le branches nelle line temporali sbagliate! -You could delete and re-create these branches - but you can also directly move them to different commits, by using +Potresti cancellare e ricreare queste branches - ma puoi anche muoverle direttamente in un differente commit usando: git checkout -on the branch names, and then using +nel nome della branch e poi usare git reset --hard -on the commit where you want the branch to be. +nel commit dove vuoi che la branch vada. -The donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch! +La ciambella è nella branch giusto ma la linea temporale è incompleta - fai *mangiare* la ciambella a quella branch! [setup] -echo "You do not have a baguette. +echo "Tu non hai una baguette. -You do not have coffee. +Non hai un caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "The Beginning" +git commit -m "L'inizio" git checkout -b coffee -echo "You have a baguette. +echo "Tu hai una baguette. -You do not have coffee. +Non hai un caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You buy a baguette" +git commit -m "Compri una ciambella" -echo "You ate a baguette. +echo "Mangi una baguette. -You do not have coffee. +Non hai un caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You eat the baguette" +git commit -m "Mangi una baguette" git checkout -b baguette main -echo "You do not have a baguette. +echo "Non hai una ciambella. -You have coffee. +Hai un caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You buy some coffee" +git commit -m "Compri un pò di caffe" -echo "You do not have a baguette. +echo "Non hai una baguette. -You drank coffee. +Hai bevuto caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You drink the coffee" +git commit -m "Bevi il caffe" git checkout -b donut main -echo "You do not have a baguette. +echo "Non hai una baguette. -You do not have coffee. +Non hai caffe. -You have a donut." > you +Hai una ciambella." > you git add . -git commit -m "You buy a donut" +git commit -m "Compri una ciambella" git checkout --detach main [win] -# Did you eat a baguette on the baguette branch? -git show baguette:you | grep "You ate.*baguette" +# Mangi una baguette nella branch delle baguette? +git show baguette:you | grep "Mangi.*baguette" -# Did you drink a coffee on the coffee branch? -git show coffee:you | grep "You drank.*coffee" +# Bevi un caffe nella branch del caffe? +git show coffee:you | grep "Bevi.*coffe" -# Did you eat a donut on the donut branch? -git show donut:you | grep "You ate.*donut" +# Mangi una ciambella nella branch delle ciambelle? +git show donut:you | grep "Mangi.*ciambella" [actions] -test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Remember to checkout the blue branch tag when you want it to grow with the timeline." +test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Ricordati di controllare l'etichetta branch blue quando vuoi che cresca con la linea temporale." diff --git a/resources/cards.json b/resources/cards.json index d284b4e..e3c9518 100644 --- a/resources/cards.json +++ b/resources/cards.json @@ -3,288 +3,288 @@ "id": "init", "command": "git init", "description": { - "en": "Drag this card into the empty space above to initialize the time machine!", - "it": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" + "en_EN": "Drag this card into the empty space above to initialize the time machine!", + "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" } }, { "id": "clone", - "command": "git clone ../[remote] .", + "command": "git_IT clone ../[remote] .", "description": { - "en": "Create your own copy of someone else's repo.", - "it": "Crea la copia del Repo di qualcun'altro." + "en_EN": "Create your own copy of someone else's repo.", + "it_IT": "Crea la copia del Repo di qualcun'altro." } }, { "id": "config-name", - "command": "git config --global user.name [string]", + "command": "git_IT config --global user.name [string]", "description": { - "en": "Set your name.\n\n(Will not change anything outside of this game.)", - "it": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" + "en_EN": "Set your name.\n\n(Will not change anything outside of this game.)", + "it_IT": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" } }, { "id": "config-email", - "command": "git config --global user.email [string]", + "command": "git_IT config --global user.email [string]", "description": { - "en": "Set your email address.", - "it": "Imposta la tua e-mail." + "en_EN": "Set your email address.", + "it_IT": "Imposta la tua e-mail." } }, { "id": "checkout", - "command": "git checkout [commit, ref]", + "command": "git_IT checkout [commit_IT, ref]", "description": { - "en": "Drag this card to a commit or to a branch to travel to it!", - "it": "Sposta questa carta su un commit o su una branch per viaggiare in quello specifico momento." + "en_EN": "Drag this card to a commit_IT or to a branch to travel to it_IT!", + "it_IT": "Sposta questa carta su un commit_IT o su una branch per viaggiare in quello specifico momen_ENto." } }, { "id": "checkout-file", - "command": "git checkout [file]", + "command": "git_IT checkout [file]", "description": { - "en": "Reset changes in a local file.", - "it": "Resetta i cambiamenti in un file locale" + "en_EN": "Reset changes in a local file.", + "it_IT": "Resetta i cambiamen_ENti in un file locale" } }, { "id": "checkout-from", - "command": "git checkout [commit, ref] [file]", + "command": "git_IT checkout [commit_IT, ref] [file]", "description": { - "en": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.", - "it": "Prendi il contenuto del file da uno specifico commits e resetta sia la directory di lavoro sia l'indice." + "en_EN": "Get the file conten_ENts from the specified commit_ITs, and reset both the working directory, as well as the index, to it_IT.", + "it_IT": "Pren_ENdi il conten_ENuto del file da uno specifico commit_ITs e resetta sia la directory di lavoro sia l'indice." } }, { - "id": "commit-a", - "command": "git commit -a", + "id": "commit_IT-a", + "command": "git_IT commit_IT -a", "description": { - "en": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.", - "it": "Crea un nuovo commit, dopo aver aggiunto automatico tutti i cambiamenti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato." + "en_EN": "Make a new commit_IT, after automatically adding all changes to the index.\nYou'll be asked to en_ENter a short description of what you changed.", + "it_IT": "Crea un nuovo commit_IT, dopo aver aggiunto automatico tutti i cambiamen_ENti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato." } }, { - "id": "commit-auto", - "command": "git add .; git commit", + "id": "commit_IT-auto", + "command": "git_IT add .; git_IT commit_IT", "description": { - "en": "Make a new commit containing your current environment! Type in a description of what changed!", - "it": "Crea un nuovo commit contenente il tuo ambiente attuale! Scrivi nella descrizione di cosa hai cambiato" + "en_EN": "Make a new commit_IT containing your curren_ENt en_ENvironmen_ENt! Type in a description of what changed!", + "it_IT": "Crea un nuovo commit_IT conten_ENen_ENte il tuo ambien_ENte attuale! Scrivi nella descrizione di cosa hai cambiato" } }, { "id": "merge", - "command": "git merge [commit, ref]", + "command": "git_IT merge [commit_IT, ref]", "description": { - "en": "Merge the specified timeline into yours. If necessary, will create a merge commit.", - "it": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di unione." + "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit_IT.", + "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit_IT di unione." } }, { "id": "merge-abort", - "command": "git merge --abort", + "command": "git_IT merge --abort", "description": { - "en": "Abort the current merge attempt, and reconstruct the previous state.", - "it": "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente." + "en_EN": "Abort the curren_ENt merge attempt, and reconstruct the previous state.", + "it_IT": "Interrompe il corren_ENte ten_ENtativo di unione e ricostruisce lo stato preceden_ENte." } }, { "id": "rebase", - "command": "git rebase [commit]", + "command": "git_IT rebase [commit_IT]", "description": { - "en": "Put the events in your current timeline on top of the specified one.", - "it": "Mette l'evento nella tua, corrente, linea temporale sopra a quello specificato." + "en_EN": "Put the even_ENts in your curren_ENt timeline on top of the specified one.", + "it_IT": "Mette l'even_ENto nella tua, corren_ENte, linea temporale sopra a quello specificato." } }, { "id": "pull", - "command": "git pull", + "command": "git_IT pull", "description": { - "en": "Get someone else's version of the current timeline, and try to merge it into yours.", - "it": "Prende la versione corrente della line temporale di qualcun'altro e prova ad unirla alla tua." + "en_EN": "Get someone else's version of the curren_ENt timeline, and try to merge it_IT into yours.", + "it_IT": "Pren_ENde la versione corren_ENte della line temporale di qualcun'altro e prova ad unirla alla tua." } }, { "id": "fetch", - "command": "git fetch [remote]", + "command": "git_IT fetch [remote]", "description": { - "en": "Get a someone else's version of the current timeline.", - "it": "Prende la versione, corrente, della linea temporale di qualcun'altro" + "en_EN": "Get a someone else's version of the curren_ENt timeline.", + "it_IT": "Pren_ENde la versione, corren_ENte, della linea temporale di qualcun'altro" } }, { "id": "push", - "command": "git push", + "command": "git_IT push", "description": { - "en": "Give the current timeline to someone else.", - "it": "Invia la corrente line temporale a qualcun'altro" + "en_EN": "Give the curren_ENt timeline to someone else.", + "it_IT": "Invia la corren_ENte line temporale a qualcun'altro" } }, { "id": "rebase-interactive", - "command": "git rebase -i [commit]", + "command": "git_IT rebase -i [commit_IT]", "description": { - "en": "Make changes to the events in your current timeline, back to the commit you drag this to.", - "it": "Apporta modifiche agli eventi nella tua timeline corrente, torna al commit su cui lo trascini " + "en_EN": "Make changes to the even_ENts in your curren_ENt timeline, back to the commit_IT you drag this to.", + "it_IT": "Apporta modifiche agli even_ENti nella tua timeline corren_ENte, torna al commit_IT su cui lo trascini " } }, { "id": "rebase-continue", - "command": "git rebase --continue", + "command": "git_IT rebase --continue", "description": { - "en": "Continue the current rebasing process.", - "it": "Continua il corrente processo di ricostruzione" + "en_EN": "Continue the curren_ENt rebasing process.", + "it_IT": "Continua il corren_ENte processo di ricostruzione" } }, { "id": "reset-hard", - "command": "git reset --hard [commit]", + "command": "git_IT reset --hard [commit_IT]", "description": { - "en": "Move the branch you're on to the specified commit.", - "it": "Muove il tuo branch (ramo) nello specifico commit." + "en_EN": "Move the branch you're on to the specified commit_IT.", + "it_IT": "Muove il tuo branch (ramo) nello specifico commit_IT." } }, { "id": "reset", - "command": "git reset [commit]", + "command": "git_IT reset [commit_IT]", "description": { - "en": "Jump to the commit, and update the index. Keep the current environment.", - "it": "Salta alcommit e aggiorna l'indice. Mette l'ambiente attuale." + "en_EN": "Jump to the commit_IT, and update the index. Keep the curren_ENt en_ENvironmen_ENt.", + "it_IT": "Salta alcommit_IT e aggiorna l'indice. Mette l'ambien_ENte attuale." } }, { "id": "reset-file", - "command": "git reset [file]", + "command": "git_IT reset [file]", "description": { - "en": "Reset the index version of a file to the version in the commit you're on.", - "it": "Resetta la versione dell'indice di un file alla versione del commit in cui sei" + "en_EN": "Reset the index version of a file to the version in the commit_IT you're on.", + "it_IT": "Resetta la versione dell'indice di un file alla versione del commit_IT in cui sei" } }, { "id": "cherry-pick", - "command": "git cherry-pick [commit]", + "command": "git_IT cherry-pick [commit_IT]", "description": { - "en": "Repeat the specified action on top of your current timeline.", - "it": "Ripete l'azione specificata sulla corrente linea temporale" + "en_EN": "Repeat the specified action on top of your curren_ENt timeline.", + "it_IT": "Ripete l'azione specificata sulla corren_ENte linea temporale" } }, { "id": "revert", - "command": "git revert [commit]", + "command": "git_IT revert [commit_IT]", "description": { - "en": "Make a new commit that reverts the changes of the speicified commit.", - "it": "Crea un nuovo commit che annula le modifiche dello specifico commit" + "en_EN": "Make a new commit_IT that reverts the changes of the speicified commit_IT.", + "it_IT": "Crea un nuovo commit_IT che annula le modifiche dello specifico commit_IT" } }, { "id": "bisect-start", - "command": "git bisect start", + "command": "git_IT bisect start", "description": { - "en": "Start looking for the commit where things got bad.", - "it": "Inizia a cercare il commit dove le cose sono andate storte" + "en_EN": "Start looking for the commit_IT where things got bad.", + "it_IT": "Inizia a cercare il commit_IT dove le cose sono andate storte" } }, { "id": "bisect-good", - "command": "git bisect good", + "command": "git_IT bisect good", "description": { - "en": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!", - "it": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buone` e `cattive`!" + "en_EN": "State that the curren_ENt commit_IT is good! When_EN you're automatically transferred, keep playing the `good` and `bad` cards!", + "it_IT": "Dichiara che l'attuale commit_IT è buono! Continua a giocare con le carte `buone` e `cattive`!" } }, { "id": "bisect-bad", - "command": "git bisect bad", + "command": "git_IT bisect bad", "description": { - "en": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!", - "it": "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!" + "en_EN": "State that the curren_ENt commit_IT is bad! When_EN you're automatically transferred, keep playing the `good` and `bad` cards!", + "it_IT": "Dichiara che l'attuale commit_IT non è valido! Continua a giocare con le carte `buone` e `cattive`!" } }, { "id": "add", - "command": "git add [file]", + "command": "git_IT add [file]", "description": { - "en": "Update the index version of the file to its current real content.", - "it": "Aggiorna l'indice del file con il, corrente, reale contenuto." + "en_EN": "Update the index version of the file to it_ITs curren_ENt real conten_ENt.", + "it_IT": "Aggiorna l'indice del file con il, corren_ENte, reale conten_ENuto." } }, { "id": "rm", - "command": "git rm [file]", + "command": "git_IT rm [file]", "description": { - "en": "Delete a file both in the working directory, as well as the index.", - "it": "Cancella il file sia dalla corrente directory che dall'indice." + "en_EN": "Delete a file both in the working directory, as well as the index.", + "it_IT": "Cancella il file sia dalla corren_ENte directory che dall'indice." } }, { - "id": "commit", - "command": "git commit", + "id": "commit_IT", + "command": "git_IT commit_IT", "description": { - "en": "Make a commit from the current index.", - "it": "Crea un commit dal corrente indice." + "en_EN": "Make a commit_IT from the curren_ENt index.", + "it_IT": "Crea un commit_IT dal corren_ENte indice." } }, { "id": "show", - "command": "git show [commit]", + "command": "git_IT show [commit_IT]", "description": { - "en": "Show what changed in the commit.", - "it": "Mostra cosa è cambiato nel commit." + "en_EN": "Show what changed in the commit_IT.", + "it_IT": "Mostra cosa è cambiato nel commit_IT." } }, { "id": "branch", - "command": "git branch [string]", + "command": "git_IT branch [string]", "description": { - "en": "Create a new branch at your current location.", - "it": "Crea un nuovo branch (ramo) nella tua corrente posizione." + "en_EN": "Create a new branch at your curren_ENt location.", + "it_IT": "Crea un nuovo branch (ramo) nella tua corren_ENte posizione." } }, { "id": "branch-delete", - "command": "git branch -D [ref]", + "command": "git_IT branch -D [ref]", "description": { - "en": "Delete a branch.", - "it": "Cancella un branch.(ramo)" + "en_EN": "Delete a branch.", + "it_IT": "Cancella un branch.(ramo)" } }, { "id": "reflog", - "command": "git reflog [ref, head]", + "command": "git_IT reflog [ref, head]", "description": { - "en": "Display a log of where the ref pointed to in the past.", - "it": "Mostra un log di dove il riferimento puntava in passato" + "en_EN": "Display a log of where the ref pointed to in the past.", + "it_IT": "Mostra un log di dove il riferimen_ENto puntava in passato" } }, { "id": "file-new", "command": "touch [string]", "description": { - "en": "Create a new file.", - "it": "Crea un nuovo file." + "en_EN": "Create a new file.", + "it_IT": "Crea un nuovo file." } }, { "id": "file-delete", "command": "rm [file]", "description": { - "en": "Delete a file.", - "it": "Cancella un file." + "en_EN": "Delete a file.", + "it_IT": "Cancella un file." } }, { - "id": "file-rename", + "id": "file-ren_EName", "command": "mv [file] [string]", "description": { - "en": "Rename a file.", - "it": "Rinomina un file." + "en_EN": "Ren_EName a file.", + "it_IT": "Rinomina un file." } }, { "id": "file-copy", "command": "cp [file] [string]", "description": { - "en": "Make a copy of a file.", - "it": "Crea una copia di un file." + "en_EN": "Make a copy of a file.", + "it_IT": "Crea una copia di un file." } } ] From 1dcde8838bc020db8e3ad3c3850915a973979f90 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 14 Sep 2021 15:16:20 +0200 Subject: [PATCH 10/49] cards localization adjustament --- resources/cards.json | 182 +++++++++++++++++++++---------------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/resources/cards.json b/resources/cards.json index e3c9518..da97e59 100644 --- a/resources/cards.json +++ b/resources/cards.json @@ -1,23 +1,23 @@ [ { - "id": "init", - "command": "git init", + "id": "init", + "command": "git init", "description": { "en_EN": "Drag this card into the empty space above to initialize the time machine!", - "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" + "it": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" } }, { "id": "clone", - "command": "git_IT clone ../[remote] .", + "command": "git clone ../[remote] .", "description": { "en_EN": "Create your own copy of someone else's repo.", - "it_IT": "Crea la copia del Repo di qualcun'altro." + "it_IT": "Crea la copiag del Repo di qualcun'altro." } }, { "id": "config-name", - "command": "git_IT config --global user.name [string]", + "command": "git config --global user.name [string]", "description": { "en_EN": "Set your name.\n\n(Will not change anything outside of this game.)", "it_IT": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" @@ -25,7 +25,7 @@ }, { "id": "config-email", - "command": "git_IT config --global user.email [string]", + "command": "git config --global user.email [string]", "description": { "en_EN": "Set your email address.", "it_IT": "Imposta la tua e-mail." @@ -33,215 +33,215 @@ }, { "id": "checkout", - "command": "git_IT checkout [commit_IT, ref]", + "command": "git checkout [commit, ref]", "description": { - "en_EN": "Drag this card to a commit_IT or to a branch to travel to it_IT!", - "it_IT": "Sposta questa carta su un commit_IT o su una branch per viaggiare in quello specifico momen_ENto." + "en_EN": "Drag this card to a commit or to a branch to travel to it!", + "it_IT": "Sposta questa carta su un commit o su una branch per viaggiare in quello specifico momento." } }, { "id": "checkout-file", - "command": "git_IT checkout [file]", + "command": "git checkout [file]", "description": { "en_EN": "Reset changes in a local file.", - "it_IT": "Resetta i cambiamen_ENti in un file locale" + "it_IT": "Resetta i cambiamenti in un file locale" } }, { "id": "checkout-from", - "command": "git_IT checkout [commit_IT, ref] [file]", + "command": "git checkout [commit, ref] [file]", "description": { - "en_EN": "Get the file conten_ENts from the specified commit_ITs, and reset both the working directory, as well as the index, to it_IT.", - "it_IT": "Pren_ENdi il conten_ENuto del file da uno specifico commit_ITs e resetta sia la directory di lavoro sia l'indice." + "en_EN": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.", + "it_IT": "Prendi il contenuto del file da uno specifico commits e resetta sia la directory di lavoro sia l'indice." } }, { - "id": "commit_IT-a", - "command": "git_IT commit_IT -a", + "id": "commit-a", + "command": "git commit -a", "description": { - "en_EN": "Make a new commit_IT, after automatically adding all changes to the index.\nYou'll be asked to en_ENter a short description of what you changed.", - "it_IT": "Crea un nuovo commit_IT, dopo aver aggiunto automatico tutti i cambiamen_ENti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato." + "en_EN": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.", + "it_IT": "Crea un nuovo commit, dopo aver aggiunto automatico tutti i cambiamenti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato." } }, { - "id": "commit_IT-auto", - "command": "git_IT add .; git_IT commit_IT", + "id": "commit-auto", + "command": "git add .; git commit", "description": { - "en_EN": "Make a new commit_IT containing your curren_ENt en_ENvironmen_ENt! Type in a description of what changed!", - "it_IT": "Crea un nuovo commit_IT conten_ENen_ENte il tuo ambien_ENte attuale! Scrivi nella descrizione di cosa hai cambiato" + "en_EN": "Make a new commit containing your current environment! Type in a description of what changed!", + "it_IT": "Crea un nuovo commit contenente il tuo ambiente attuale! Scrivi nella descrizione di cosa hai cambiato" } }, { "id": "merge", - "command": "git_IT merge [commit_IT, ref]", + "command": "git merge [commit, ref]", "description": { - "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit_IT.", - "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit_IT di unione." + "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit.", + "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di unione." } }, { "id": "merge-abort", - "command": "git_IT merge --abort", + "command": "git merge --abort", "description": { - "en_EN": "Abort the curren_ENt merge attempt, and reconstruct the previous state.", - "it_IT": "Interrompe il corren_ENte ten_ENtativo di unione e ricostruisce lo stato preceden_ENte." + "en_EN": "Abort the current merge attempt, and reconstruct the previous state.", + "it_IT": "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente." } }, { "id": "rebase", - "command": "git_IT rebase [commit_IT]", + "command": "git rebase [commit]", "description": { - "en_EN": "Put the even_ENts in your curren_ENt timeline on top of the specified one.", - "it_IT": "Mette l'even_ENto nella tua, corren_ENte, linea temporale sopra a quello specificato." + "en_EN": "Put the events in your current timeline on top of the specified one.", + "it_IT": "Mette l'evento nella tua, corrente, linea temporale sopra a quello specificato." } }, { "id": "pull", - "command": "git_IT pull", + "command": "git pull", "description": { - "en_EN": "Get someone else's version of the curren_ENt timeline, and try to merge it_IT into yours.", - "it_IT": "Pren_ENde la versione corren_ENte della line temporale di qualcun'altro e prova ad unirla alla tua." + "en_EN": "Get someone else's version of the current timeline, and try to merge it into yours.", + "it_IT": "Prende la versione corrente della line temporale di qualcun'altro e prova ad unirla alla tua." } }, { "id": "fetch", - "command": "git_IT fetch [remote]", + "command": "git fetch [remote]", "description": { - "en_EN": "Get a someone else's version of the curren_ENt timeline.", - "it_IT": "Pren_ENde la versione, corren_ENte, della linea temporale di qualcun'altro" + "en_EN": "Get a someone else's version of the current timeline.", + "it_IT": "Prende la versione, corrente, della linea temporale di qualcun'altro" } }, { "id": "push", - "command": "git_IT push", + "command": "git push", "description": { - "en_EN": "Give the curren_ENt timeline to someone else.", - "it_IT": "Invia la corren_ENte line temporale a qualcun'altro" + "en_EN": "Give the current timeline to someone else.", + "it_IT": "Invia la corrente line temporale a qualcun'altro" } }, { "id": "rebase-interactive", - "command": "git_IT rebase -i [commit_IT]", + "command": "git rebase -i [commit]", "description": { - "en_EN": "Make changes to the even_ENts in your curren_ENt timeline, back to the commit_IT you drag this to.", - "it_IT": "Apporta modifiche agli even_ENti nella tua timeline corren_ENte, torna al commit_IT su cui lo trascini " + "en_EN": "Make changes to the events in your current timeline, back to the commit you drag this to.", + "it_IT": "Apporta modifiche agli eventi nella tua timeline corrente, torna al commit su cui lo trascini " } }, { "id": "rebase-continue", - "command": "git_IT rebase --continue", + "command": "git rebase --continue", "description": { - "en_EN": "Continue the curren_ENt rebasing process.", - "it_IT": "Continua il corren_ENte processo di ricostruzione" + "en_EN": "Continue the current rebasing process.", + "it_IT": "Continua il corrente processo di ricostruzione" } }, { "id": "reset-hard", - "command": "git_IT reset --hard [commit_IT]", + "command": "git reset --hard [commit]", "description": { - "en_EN": "Move the branch you're on to the specified commit_IT.", - "it_IT": "Muove il tuo branch (ramo) nello specifico commit_IT." + "en_EN": "Move the branch you're on to the specified commit.", + "it_IT": "Muove il tuo branch (ramo) nello specifico commit." } }, { "id": "reset", - "command": "git_IT reset [commit_IT]", + "command": "git reset [commit]", "description": { - "en_EN": "Jump to the commit_IT, and update the index. Keep the curren_ENt en_ENvironmen_ENt.", - "it_IT": "Salta alcommit_IT e aggiorna l'indice. Mette l'ambien_ENte attuale." + "en_EN": "Jump to the commit, and update the index. Keep the current environment.", + "it_IT": "Salta alcommit e aggiorna l'indice. Mette l'ambiente attuale." } }, { "id": "reset-file", - "command": "git_IT reset [file]", + "command": "git reset [file]", "description": { - "en_EN": "Reset the index version of a file to the version in the commit_IT you're on.", - "it_IT": "Resetta la versione dell'indice di un file alla versione del commit_IT in cui sei" + "en_EN": "Reset the index version of a file to the version in the commit you're on.", + "it_IT": "Resetta la versione dell'indice di un file alla versione del commit in cui sei" } }, { "id": "cherry-pick", - "command": "git_IT cherry-pick [commit_IT]", + "command": "git cherry-pick [commit]", "description": { - "en_EN": "Repeat the specified action on top of your curren_ENt timeline.", - "it_IT": "Ripete l'azione specificata sulla corren_ENte linea temporale" + "en_EN": "Repeat the specified action on top of your current timeline.", + "it_IT": "Ripete l'azione specificata sulla corrente linea temporale" } }, { "id": "revert", - "command": "git_IT revert [commit_IT]", + "command": "git revert [commit]", "description": { - "en_EN": "Make a new commit_IT that reverts the changes of the speicified commit_IT.", - "it_IT": "Crea un nuovo commit_IT che annula le modifiche dello specifico commit_IT" + "en_EN": "Make a new commit that reverts the changes of the speicified commit.", + "it_IT": "Crea un nuovo commit che annula le modifiche dello specifico commit" } }, { "id": "bisect-start", - "command": "git_IT bisect start", + "command": "git bisect start", "description": { - "en_EN": "Start looking for the commit_IT where things got bad.", - "it_IT": "Inizia a cercare il commit_IT dove le cose sono andate storte" + "en_EN": "Start looking for the commit where things got bad.", + "it_IT": "Inizia a cercare il commit dove le cose sono andate storte" } }, { "id": "bisect-good", - "command": "git_IT bisect good", + "command": "git bisect good", "description": { - "en_EN": "State that the curren_ENt commit_IT is good! When_EN you're automatically transferred, keep playing the `good` and `bad` cards!", - "it_IT": "Dichiara che l'attuale commit_IT è buono! Continua a giocare con le carte `buone` e `cattive`!" + "en_EN": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!", + "it_IT": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buone` e `cattive`!" } }, { "id": "bisect-bad", - "command": "git_IT bisect bad", + "command": "git bisect bad", "description": { - "en_EN": "State that the curren_ENt commit_IT is bad! When_EN you're automatically transferred, keep playing the `good` and `bad` cards!", - "it_IT": "Dichiara che l'attuale commit_IT non è valido! Continua a giocare con le carte `buone` e `cattive`!" + "en_EN": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!", + "it_IT": "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!" } }, { "id": "add", - "command": "git_IT add [file]", + "command": "git add [file]", "description": { - "en_EN": "Update the index version of the file to it_ITs curren_ENt real conten_ENt.", - "it_IT": "Aggiorna l'indice del file con il, corren_ENte, reale conten_ENuto." + "en_EN": "Update the index version of the file to its current real content.", + "it_IT": "Aggiorna l'indice del file con il, corrente, reale contenuto." } }, { "id": "rm", - "command": "git_IT rm [file]", + "command": "git rm [file]", "description": { "en_EN": "Delete a file both in the working directory, as well as the index.", - "it_IT": "Cancella il file sia dalla corren_ENte directory che dall'indice." + "it_IT": "Cancella il file sia dalla corrente directory che dall'indice." } }, { - "id": "commit_IT", - "command": "git_IT commit_IT", + "id": "commit", + "command": "git commit", "description": { - "en_EN": "Make a commit_IT from the curren_ENt index.", - "it_IT": "Crea un commit_IT dal corren_ENte indice." + "en_EN": "Make a commit from the current index.", + "it_IT": "Crea un commit dal corrente indice." } }, { "id": "show", - "command": "git_IT show [commit_IT]", + "command": "git show [commit]", "description": { - "en_EN": "Show what changed in the commit_IT.", - "it_IT": "Mostra cosa è cambiato nel commit_IT." + "en_EN": "Show what changed in the commit.", + "it_IT": "Mostra cosa è cambiato nel commit." } }, { "id": "branch", - "command": "git_IT branch [string]", + "command": "git branch [string]", "description": { - "en_EN": "Create a new branch at your curren_ENt location.", - "it_IT": "Crea un nuovo branch (ramo) nella tua corren_ENte posizione." + "en_EN": "Create a new branch at your current location.", + "it_IT": "Crea un nuovo branch (ramo) nella tua corrente posizione." } }, { "id": "branch-delete", - "command": "git_IT branch -D [ref]", + "command": "git branch -D [ref]", "description": { "en_EN": "Delete a branch.", "it_IT": "Cancella un branch.(ramo)" @@ -249,10 +249,10 @@ }, { "id": "reflog", - "command": "git_IT reflog [ref, head]", + "command": "git reflog [ref, head]", "description": { "en_EN": "Display a log of where the ref pointed to in the past.", - "it_IT": "Mostra un log di dove il riferimen_ENto puntava in passato" + "it_IT": "Mostra un log di dove il riferimento puntava in passato" } }, { @@ -272,10 +272,10 @@ } }, { - "id": "file-ren_EName", + "id": "file-rename", "command": "mv [file] [string]", "description": { - "en_EN": "Ren_EName a file.", + "en_EN": "Rename a file.", "it_IT": "Rinomina un file." } }, From f98922ca5cce9edd50b56e8aaac379f3c8d2a6ad Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 14 Sep 2021 15:25:00 +0200 Subject: [PATCH 11/49] now is right the card_draw --- resources/cards.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/cards.json b/resources/cards.json index da97e59..6eac0d6 100644 --- a/resources/cards.json +++ b/resources/cards.json @@ -4,7 +4,7 @@ "command": "git init", "description": { "en_EN": "Drag this card into the empty space above to initialize the time machine!", - "it": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" + "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" } }, { From 90574216dcd9be17dcce8414366295563204115e Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 14 Sep 2021 17:03:17 +0200 Subject: [PATCH 12/49] some traductions --- levels/it_IT/index/#sequence# | 5 +++ levels/it_IT/index/change | 20 +++++------ levels/it_IT/index/compare | 42 +++++++++++----------- levels/it_IT/index/new | 18 +++++----- levels/it_IT/index/reset | 28 +++++++-------- levels/it_IT/index/steps | 22 ++++++------ levels/it_IT/merge/conflict | 26 +++++++------- levels/it_IT/merge/merge | 68 +++++++++++++++++------------------ levels/it_IT/remotes/friend | 30 ++++++++-------- levels/it_IT/remotes/problems | 18 +++++----- 10 files changed, 141 insertions(+), 136 deletions(-) create mode 100644 levels/it_IT/index/#sequence# diff --git a/levels/it_IT/index/#sequence# b/levels/it_IT/index/#sequence# new file mode 100644 index 0000000..42f7f48 --- /dev/null +++ b/levels/it_IT/index/#sequence# @@ -0,0 +1,5 @@ +compare +new +change +reset +steps diff --git a/levels/it_IT/index/change b/levels/it_IT/index/change index f1e377d..6b701e3 100644 --- a/levels/it_IT/index/change +++ b/levels/it_IT/index/change @@ -1,31 +1,31 @@ -title = Update files in the index +title = Aggiorna i file nell'indice cards = add commit [description] -When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file. +Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice della versione cambiata dei file.. -Let's try that! +Proviamoci! -The icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same! +Le icona nel browser dei file mostrano quando il file attuale (bianco) e la versione nell'indice (blu) sono differenti o quando sono uguali! [win] -Good! The index is sometimes also called the "staging area" - it contains exactly what ends up in the next commit when you use `git commit`! +Bene! L'indice, a volte, può essere chiamato "staging are" - Contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`! [setup] -echo "The candle is burning with a blue flame." > candle +echo "La candela brucia con una fiamma blue." > candle git add . -git commit -m "The beginning" +git commit -m "L'inizio" [win] -# Make a change to the candle. +# Fai una modifica alla candela test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed -# Add the candle. +# Aggiungi la candella. test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added -# Make a commit. +# Fai un commit. test "$(git diff --name-only HEAD HEAD^)" = "candle" diff --git a/levels/it_IT/index/compare b/levels/it_IT/index/compare index 97fa6c7..4f4cf8f 100644 --- a/levels/it_IT/index/compare +++ b/levels/it_IT/index/compare @@ -1,51 +1,51 @@ -title = Step by step +title = Passo dopo passo cards = checkout commit-auto [description] -Welcome to today's lesson! We're going to learn how to make commits with more precision! +Benvenuto nella lezione di oggi! Siamo impareremo come creare commits con più precisione! -Have a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened. +Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato ma una di loro rende più semplice capire cosa è successo. [win] -# Right! Having each change in its own commit makes it easier to understand what's going on! Let's learn how to do that! +# Pronti! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo! git branch --show-current | grep step-by-step [setup] -echo "A small, but heavy glass ball." > ball -echo "A thin book, that's standing upright." > book -echo "A candle, burning with a blue flame." > candle -echo "A smoke detector. It's absolutely silent." > smoke_detector +echo "Una piccola ma pesante palla di vetro." > ball +echo "Un sottile libro che sta in piedi." > book +echo "Una candela brucia con una fiamma blue." > candle +echo "Un sensore di fumo. E' assolutamente silenzioso." > smoke_detector git add . -git commit -m "The beginning" +git commit -m "L'inizio" git branch -M all-at-once -echo "The ball is now touching the book." > ball -echo "The book has fallen over." > book -echo "The candle has been blown out." > candle +echo "La palla adesso tocca il libro." > ball +echo "Il libro è caduto." > book +echo "La candella è stata spenta." > candle -git commit -am "The end" +git commit -am "La fine" git checkout HEAD^ git checkout -b step-by-step -echo "The ball is now touching the book." > ball -git commit -am "The ball rolls towards the book" +echo "La palla adesso tocca il libro." > ball +git commit -am "La palla rotola verso il libro" -echo "The book has fallen over." > book -git commit -am "The book falls over" +echo "Il libro è caduto." > book +git commit -am "Il libro è caduto" -echo "The candle has been blown out." > candle -git commit -am "The book blows out the candle" +echo "La candela è stata spenta." > candle +git commit -am "Il libro ha spento la candela" git checkout HEAD~3 [win] -# Pick the timeline that's clearer, and make the alarm go off! -git show step-by-step:smoke_detector | tail -n 1 | grep -v "absolutely silent" +# Prendi la sequenza temporale più chiara e fai suonare il sensore di fumo! +git show step-by-step:smoke_detector | tail -n 1 | grep -v "assolutamente silenzioso" diff --git a/levels/it_IT/index/new b/levels/it_IT/index/new index 4df3930..cae2465 100644 --- a/levels/it_IT/index/new +++ b/levels/it_IT/index/new @@ -1,28 +1,28 @@ -title = Add new files to the index +title = Aggiungi nuovi file all'indice cards = add commit [description] -So far, when we made a commit, we've always recorded the current status of all objects, right? +Finora, quando abbiamo eseguito un commit abbiamo sempre registrato lo stato di tutti gli oggetti, vero? -But Git allows you to pick which changes you want to put in a commit! +Ma Git ti permette di prendere i cambiamenti che voui mettere in un commit! -To learn how that works, we need to learn about the "index"! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser! +Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel browser dei file! -Initially, the index is empty. To make a commit that contains a new file, we need to add it! +Inizialmente, l'indice è vuoto. Per fare un commit che contenga un nuovo file, dobbiamo aggiungerlo! [cli] -You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time! +Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere un nome file e premi il tasto tab per completare il nome. Questo ti permette di risparmiare tempo! [setup] -echo "The candle is burning with a blue flame." > candle +echo "La candela brucia con una fiamma blue." > candle [win] -# Add the candle. +# Aggiungi la candela. test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added -# Make a commit. +# Crea un commit. test "$(git ls-tree --name-only HEAD)" = "candle" diff --git a/levels/it_IT/index/reset b/levels/it_IT/index/reset index 5e21973..56aa6d7 100644 --- a/levels/it_IT/index/reset +++ b/levels/it_IT/index/reset @@ -1,37 +1,37 @@ -title = Resetting files in the index +title = Resetta i file nell'indice cards = add reset-file commit [description] -See the dark shadow behind the icons? That's the version of the file in the last commit! +Vedi l'ombra scura dietro le icone? Questa è la versione del file nell'ultimo commit! -For example, these candles have been blown out, and that change has been added. +Per esempio, queste candele sono state spente e quella modifica è stata aggiunta! -But you decide that this was a mistake! You only want to blow out the red candle in the next commit! +Ma è stato un errore! Vuoi solo spegnere al candela rossa nel prossimo commit! -If you already have updated the index to a changed file, but want to reset it, you can use `git reset`! +Se hai già giornato l'indice di un file modificato, ma vuoi ripristinarlo, puoi usare `git reset`! [setup] -echo "It's burning!" > red_candle -echo "It's burning!" > green_candle -echo "It's burning!" > blue_candle +echo "Sta bruciando!" > red_candle +echo "Sta bruciando!" > green_candle +echo "Sta bruciando!" > blue_candle git add . -git commit -m "The beginning" +git commit -m "L'inizio" -echo "It's been blown out." > red_candle -echo "It's been blown out." > green_candle -echo "It's been blown out." > blue_candle +echo "E' stata spenta." > red_candle +echo "E' stata spenta." > green_candle +echo "E' stata spenta." > blue_candle git add . [win] -# Reset the changes in the green and blue candles! +# Ripristina i cambiamenti nella candella verde e blu! git show :green_candle | grep burning && git show :blue_candle | grep burning && git show :red_candle | grep -v burning -# And make a commit! +# E fai un commit git show main:green_candle | grep burning && git show main:blue_candle | grep burning && git show main:red_candle | grep -v burning diff --git a/levels/it_IT/index/steps b/levels/it_IT/index/steps index 36e7500..b7700a1 100644 --- a/levels/it_IT/index/steps +++ b/levels/it_IT/index/steps @@ -1,28 +1,28 @@ -title = Adding changes step by step +title = Aggiungi modifice passo dopo passo cards = add reset-file commit [description] -The index is really useful, because it allows us to be precise about which changes we want to include in each commit! +L'indice è veramente utile perché ci permette di essere precisi su quali cambiamenti vogliamo includere in ogni commit! [setup] -echo "A hammer, balancing on its handle." > hammer -echo "A bottle, containing a clear liquid." > bottle -echo "A white sugar cube." > sugar_cube +echo "Un martello, in equilibrio sul suo manico." > hammer +echo "Una bottiglia contenente un liquido trasparente." > bottle +echo "Un cubo di zucche bianco." > sugar_cube git add . -git commit -m "The beginning" +git commit -m "L'inizio" [win] -# Make changes to all three objects, to form a logical sequence of events! +# Fai dei cambiamenti a tutti e tre gli oggetti per creare una sequenza logica di eventi! test "$(git diff --name-only | wc -l)" -eq 3 || file -f .git/candle-changed && touch .git/candle-changed -# Only add one of these changes! +# Aggiungi solo uno dei cambiamenti! test "$(git diff --cached --name-only | wc -l)" -eq 1 || file -f .git/candle-added && touch .git/candle-added -# And make a commit. +# E fai un commit COUNT=0 for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then @@ -32,7 +32,7 @@ done test "$COUNT" -ge 1 -# Make a second commit that only records a single change. +# Fai un secondo commit che registri solo un singolo cambiamento. COUNT=0 for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then @@ -42,7 +42,7 @@ done test "$COUNT" -ge 2 -# And a third one. +# E aggiungine un terzo. COUNT=0 for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then diff --git a/levels/it_IT/merge/conflict b/levels/it_IT/merge/conflict index 1a8b02b..e7c37fa 100644 --- a/levels/it_IT/merge/conflict +++ b/levels/it_IT/merge/conflict @@ -1,47 +1,47 @@ -title = Contradictions +title = Contraddizioni cards = checkout commit-auto merge reset-hard [description] -Sometimes, timelines will contradict each other. +A volte le linee temporali si contraddicono a vicenda. -For example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines. +Per esempio, in questo caso, un nostro cliente vuole che queste linee temporali siano unite ma hanno mangiato cose differenti in entrambe le linee temporali. -Try to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge! +Prova ad unirle insieme! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare gli elementi, ti mostrerà le sezione in conflitti. Puoi scegliere una delle due versioni o creare una combinazione di esse! Rimuovi i markers >>>, <<<, e === e crea un nuovo commit per finalizare l'unione! -Let your finalized timeline be the "main" one. +Lascia che la tua linea temporale definitiva sia "main". [setup] -echo "Just woke up. Is hungry." > sam +echo "Appena sveglio. Sei affamato." > sam git add . -git commit -m "The beginning" +git commit -m "L'inizio" git checkout -b pancakes -echo "Had blueberry pancakes with maple syrup for breakfast." > sam +echo "Avevamo pancakes con mirtilli e sciroppo d'acero per colazione." > sam git add . git commit -m "Pancakes!" echo " Is at work." >> sam -git commit -am "Go to work" +git commit -am "Vai a lavoro" git checkout -b muesli main -echo "Had muesli with oats and strawberries for breakfast." > sam +echo "Avevamo muesli con avena e fragole per colazione." > sam git add . git commit -m "Muesli!" echo " Is at work." >> sam -git commit -am "Go to work" +git commit -am "Vai a lavoro" git checkout main [win] -# Make a breakfast compromise in the 'main' branch. +# Crea un compromesso nella colazione del branch "main". git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)" [congrats] -Yum, that sounds like a good breakfast! +Yum, questa sembra una buona colazione! diff --git a/levels/it_IT/merge/merge b/levels/it_IT/merge/merge index 8b45d06..b23b023 100644 --- a/levels/it_IT/merge/merge +++ b/levels/it_IT/merge/merge @@ -1,82 +1,82 @@ -title = Merging timelines +title = Unire le linee temporali cards = checkout commit-auto merge [description] -Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together! +Ecco un trucco per domire un pò più a lungo: fai tutte le tue attività, in universi paralleli, e poi uniscile! [setup] -echo "You do not have a baguette. +echo "Non hai una baguette. -You do not have coffee. +Non hai caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "The Beginning" +git commit -m "L'inizio" -echo "You have a baguette. +echo "Hai una baguette. -You do not have coffee. +Non hai caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You buy a baguette" +git commit -m "Compri una baguette" -echo "You ate a baguette. +echo "Mangi una baguette. -You do not have coffee. +Non hai caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You eat the baguette" +git commit -m "Mangi la baguette" git checkout HEAD~2 -echo "You do not have a baguette. +echo "Non hai una baguette. -You have coffee. +Hai caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You buy some coffee" +git commit -m "Compri un pò di caffe" -echo "You do not have a baguette. +echo "Non hai una baguette. -You drank coffee. +Bevi caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You drink the coffee" +git commit -m "Bevi il caffe" git checkout HEAD~2 -echo "You do not have a baguette. +echo "Non hai una baguette. -You do not have coffee. +Non hai caffe. -You have a donut." > you +Hai una ciambella." > you git add . -git commit -m "You buy a donut" +git commit -m "Compri una ciambella" -echo "You do not have a baguette. +echo "Non hai una baguette. -You do not have coffee. +Non hai caffe. -You ate a donut." > you +Mangi una ciambella." > you git add . -git commit -m "You eat the donut" +git commit -m "Mangi la ciambella" git checkout --detach git branch -D main [win] -# Build a situation where you consumed a baguette, a coffee, *and* a donut. -{ git show HEAD:you | grep "You ate.*baguette"; } && { git show HEAD:you | grep "You drank.*coffee"; } && { git show HEAD:you | grep "You ate.*donut"; } +# Crea una situazione dove consumi una baguette, un caffe e una ciambella. +{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*coffe"; } && { git show HEAD:you | grep "Mangi.*donut"; } -# Be on a merge commit. +# E' un commit di unione. test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2 [congrats] -I wonder if you're more relaxed when you *sleep* in parallel timelines... +Mi chiedo se sei più rilassato quando *dormi* in linee temporali parallele... diff --git a/levels/it_IT/remotes/friend b/levels/it_IT/remotes/friend index 1b70f33..771db17 100644 --- a/levels/it_IT/remotes/friend +++ b/levels/it_IT/remotes/friend @@ -1,47 +1,47 @@ -title = Friend +title = Amico cards = pull push commit-auto checkout [description] -Your friend added another line to your essay! Get it, add a third one and send it to them! +Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo a loro! -Take turns until you have five lines! +A turno fino a che non ti ritrovi ad avere cinque linee! [setup yours] -echo "Line 1" > essay +echo "Linea 1" > essay git add . -git commit -m "One line" +git commit -m "Una linea" git push -u friend main [setup friend] git checkout main -echo "Line 2, gnihihi" >> essay -git commit -am "Another line" +echo "Linea 2, gnihihi" >> essay +git commit -am "Un'altra linea" [actions friend] if test "$(git log --oneline | wc -l)" -eq 3; then - git reset --hard main # Necessary because the working directory isn't updated when we push to the friend. - echo "Line 4, blurbblubb" >> essay - git commit -am "Final line" - hint "Oh nice, I added a fourth line!" + git reset --hard main # Necessario perché la directory di lavoro non è aggiornata fintanto che non viene inviata all'amico + echo "Linea 4, blurbblubb" >> essay + git commit -am "Linea finale" + hint "Oh bene, Ho aggiunt la quarta linea!" fi [win] -# Got the second line from your friend +# Ricevuto la seconda linea dal tuo amico. git show HEAD:essay | grep gnihihi -# Got the fourth line from your friend. +# Ricevuto la quarta linea dal tuo amico. git show HEAD:essay | grep blurbblubb [win friend] -# The friend got a third line from you +# L'amico ha ricevuto la terza linea da te. test "$(git show HEAD:essay | wc -l)" -ge 3 -# The friend got a fifth line from you +# L'amico ha ricevuto la quinta linea da te. test "$(git show HEAD:essay | wc -l)" -ge 5 diff --git a/levels/it_IT/remotes/problems b/levels/it_IT/remotes/problems index fab71c5..068292a 100644 --- a/levels/it_IT/remotes/problems +++ b/levels/it_IT/remotes/problems @@ -1,33 +1,33 @@ -title = Problems +title = Problemi cards = checkout add pull push commit-auto merge [description] -Both you and your friend have been working on the file, and want to sync up! +Entrambi, tu ed il tuo amicp, avete lavorato sullo stesso file e volete sincronizare! [setup yours] -echo "The bike shed should be ???" > file +echo "Il capannone delle bici dovrebbe essere ???" > file git add . -git commit -m "initial" +git commit -m "inizio" git push -u friend main -echo "The bike shed should be green" > file +echo "Il capannone delle bici dovrebbe essere verde" > file [setup friend] git checkout main -echo "The bike shed should be blue" > file -git commit -a -m "friends version" +echo "Il capannone delle bici dovrebbe essere blue" > file +git commit -a -m "versione dell'amico" [win] -# Commit your local changes. +# Invia le tue modifiche locali. test "$(git status -s)" = "" [win friend] -# Look at your friend's suggestion, make a compromise, and push it back. +# Quarda il suggerimento dell'amico, fai un compromesso e rimandalo in dietro. git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)" From 086922d0c9cf97eff1057a45fdbebc6713b8d728 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 14 Sep 2021 18:06:29 +0200 Subject: [PATCH 13/49] add some localizations and levels traductions --- levels/it_IT/bisect/bisect | 24 ++++++++++++------------ levels/it_IT/workflows/pr | 8 ++++---- resources/localizations.csv | 13 ++++++++++++- resources/localizations.en.translation | Bin 865 -> 1285 bytes resources/localizations.it.translation | Bin 884 -> 1324 bytes scenes/notification.gd | 12 +++++++++++- scenes/terminal.gd | 2 +- scenes/terminal.tscn | 1 + 8 files changed, 41 insertions(+), 19 deletions(-) diff --git a/levels/it_IT/bisect/bisect b/levels/it_IT/bisect/bisect index 0b66edb..a80e2e8 100644 --- a/levels/it_IT/bisect/bisect +++ b/levels/it_IT/bisect/bisect @@ -1,29 +1,29 @@ -title = Yellow brick road +title = Strada di mattoni gialli cards = checkout commit-auto reset-hard bisect-start bisect-good bisect-bad [description] -(Please zoom out a bit using your mouse wheel! :D) +(Perpiacere rimpicciolisci un pochino usando la rotella del mouse! :D) -Oh no! You have lost your key at some point during the day! +Oh no! Hai perso la tua chiave da qualche parte durante il giorno! -Sure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly! +Sicuro, certo potresti guardare in ogni singolo commit nella speranza di trovarlo - ma c'è un modo migliore: la tua macchina del tempo ha un modo integrato per trovare velocemente il punto nel tempo dove le cose sono andate male! -First, play the "bisect start" card. Then, go to a commit where you don't have the key, and play the "bisect bad" card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the "bisect good card". +Per prima cosa, gioca la carta "bisec start". Quindi, vai ad un commit in cui non hai la chiave e gioca la carta "bisect bad". Allo stesso modo vai velocemente in un commit dove hai la chiave *in tascca* e gioca la carta "bisect goofìd". -After you've found the last good commit, reset the main branch to it. What happened to the key after you lost it? +Dopo aver trovato l'ultimo commit valido reimposta la branch principale su di esso. Cosa è successo alla chiave dopo che l'hai persa? [setup] -echo "You still have your key." > you +echo "Hai ancora la tua chiave." > you for i in {1..30}; do if test $i -eq 12; then - echo "Your pocket is empty." > you - echo "Is on the ground." > key + echo "La tua tasca è vuota." > you + echo "E' per terra." > key fi if test $i -eq 13; then - echo "Is holding a key in its beak." > bird + echo "Tiene una chiave nel becco." > bird rm key fi if test $i -eq 14; then @@ -35,9 +35,9 @@ done [win] -# Find the last good commit +# Trova l'ultimo commit buono test "$(git log --pretty=%s main | head -1)" -eq 11 [congrats] -Well done! :) The only problem is that you now have to walk all the way back home, again... +Molto bene! :) L'unico problema è che adesso devi tornare a casa camminando, dinuovo... diff --git a/levels/it_IT/workflows/pr b/levels/it_IT/workflows/pr index 1c72510..98fa95f 100644 --- a/levels/it_IT/workflows/pr +++ b/levels/it_IT/workflows/pr @@ -1,9 +1,9 @@ -title = Cloning a repo +title = Clonare un repo cards = clone commit-auto reset-hard checkout file-new branch [description] -Your friend has a problem! Clone the repo, create a branch called "solution", and fix the problem in this branch. When you're ready, make a "Pull Request" by using `git tag pr`. +Il tuo amico ha un problema! Clona il repo, crea una branch chiamata "solution" e aggiusta il problema in qulla branch. Quando sei pronto crea una "Pull Request" usando `git tag pr`. [setup] @@ -13,12 +13,12 @@ rm -rf .git echo "2 + 3 = " > file git add . -git commit -m "Initial commit" +git commit -m "Commit iniziale" [actions friend] git ls-remote yours | grep pr && git fetch yours && git merge yours/solution -git show main:file | grep 5 && hint "Thanks!" +git show main:file | grep 5 && hint "Grazie!" [win friend] diff --git a/resources/localizations.csv b/resources/localizations.csv index 2a860b7..8716ff6 100644 --- a/resources/localizations.csv +++ b/resources/localizations.csv @@ -17,4 +17,15 @@ Su macOS 10.8 e versioni precedenti, puoi scaricare Git da git-scm.com." INSTALL,"Sure, I'll install it!","Sicuro, lo installerò" LANGUAGE,Language,Linguaggio ITALIAN,Italian,Italiano -ENGLISH,English,Inglese \ No newline at end of file +ENGLISH,English,Inglese +GOT_IT,"Got it!","fatto" +INTERESTING,"Interesting!","interessante" +VERY_USEFULL,"Very useful!","Veramente utile!" +COOL,"Cool!","Bello!" +NICE,"Nice!","Bene!" +THANKS,"Thanks!","Grazie!" +WHATEVER,"Whatever...","Ad ogni costo..." +OKAY,"Okay!","Ok!" +YAY,"Yay!","Yay!" +AWESOME,"Awesome!","Eccezionale!" +YOUR_TERMINAL,"This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!","Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comndi qui!" \ No newline at end of file diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation index 01525b371dbe43672a80083931d72d4a92bd84eb..29648f6b6dbc57f36302ef34dc7bc83d7c7f8eb3 100644 GIT binary patch literal 1285 zcmbW1Uu;WJ9LG<)*}9nxTUKVQjb#g2RsD&@Ojb3s=sMOiL)Kh%v{&!$t=@aFjUe$L z65+w0B|H!o4|qZ%kr2s(ga@98M8cEB5?;2&mbmr((Ibs`a*|KZ@6Y-DIlrFUu5ed? zWmg_{!5qk2H%odVl9p6mkqlW=#kv399f+I<(p=Zfbc{z8EhZ^ZLyPJ$u5wnI>rl z6oX%x)_T1@RzfDMf8Ln}k`G+K31}67*&u^encZF4oosbkxgoo+&+%=990C#03le}P zOK~%>y8tyxJrR+J!!`(ke1tt~@BKLXv=1^3g$N}>&)qmjy%8e*%EK?^l#eDti1_#U zfyi$uShg=$c|u#fM%H4ODnUo<1~#na~;%@9PruNC(z zPQgyUB%#iIzThZ!;a~B>HWtKr(TB)izw+CIdMF}J^gVu6U3vg^F^`Ln#=nzHFM<&9 zZ`yWAC!o-MD7T0|f3jiKe&}Lu<=0NHu7Vx}$8*jNK0RN47WxJ78cY@jMtYEs9tphz zQK$IB?IsP%-*a!ie$Zv+*vVf5&cL=oiX~ZyA2D1(euyi~>V9nhtg5QTtVpoY8Gcu~ zz*Dxj@S~NNQ4dGyh?Hgnb+}Hano3%46}^Qw_LRv*DTsoS>Ugwiwqa|iz*97sT8Ga^1dpr z_WZyYLUIh91tm3Z;>%|dEgo06tHadg7;DoEmuyhSFD_SEYzI&GyG)($Hx<~zmnJf{ m_WB`oK1nm^k^0>%plR@RCQ06A$_7HWUhCLIe#W}+2lx};E+Py7 delta 430 zcmZqWddRjxm$9Cgfq~&a5CADK%>|@Iplm51tpLPoK&%7AAazDiniWVZ0I>}aGXXIp z5LX|ZAPf?p0>l@9cyS!Z;9&f-uN1 z5dOyQd}Ird76f8(s2E6m_KsJ=M}aiRP!NWxpSt_YkGnuVHx$FfCp7Aq%mj*|n}3VN z%{gQNPy!SRAPjTimz3p8fn2cTKn_$le!ulBkmiJ9HXtnz#BYJvDKR;FG9$~>XrIio z)SP05ko@%YoKywh(&EfyhJT(Xrc3=}_!m6w>wiX1^%;J?1>gQNDl)j{rRQW8XE69A o=B1Y=rl&FlrRL-(rZD)WR+K3Cqyi0M2rSJk0UFN`6ddFX01ggapa1{> diff --git a/resources/localizations.it.translation b/resources/localizations.it.translation index 410081c3a76de444c9468a0d450193b9122de478..882761e5a9cb18d2f8ee2eaf1b13810923fa30cd 100644 GIT binary patch literal 1324 zcmbVMUr1A76#w?8d7I^`iHS-&kSmB|*&mapLYbM;bZx8D$lcqz>2lra?kp;NustLZ zB}EOXhlW{!_#y^UPm+*OJp?{P5mYZlMfo66QFr~$ycZ;T>VqHWoZolO_dDPDF4yPx z)iZ6GV0Em8@7*IR-GP`WD-kgsj>>x8e_IZf`9MrkqW!Uu6pTbeVk8)k29=N`ODt#k zo-Ce_*h(-bBt;RsB!y)m$W%xy8*Vqc3&zDG5s9rvc%(nnBgHj>l$3ZZEO#xHDWO=n zHx80917HO*CvA7RD%mQcu>N^xGd5@_D>NI9Gong>^#Cmkum(tD?qJEfN9&&X9yddjzA#cfR>Ba{)eGoQBrY)AD#1@~Ah0 zUVmfyqx}kEnkD7x^)Jo!fdG<-Cp_72e@pkX0W=rAezcPt6%gn;I=^`I?ikWC+N4i2 zqP?!zW$q9h>XrKVk~@`~f?WmBtI6vg7mmQvd4x@KhELtdr%z$IZrSFq_nX1f%hBWO zeJ|dW%g<})lg71&i{DBA@A~JB9pX*okp}7N^}~Y|TM~%%dDw3aZKd}*3=ps9ot+uB zPasYLFMw}Z^|L2&9`#6bf}4T$^|<>Y0)37;Uz_SHxr%`1LZDd`1Gm97$w$LdJQiiD zSGn^}Q1?EV%(JLW-Lb*qUdg3A7Fm`N?&GW4(}qX)s;5l6FzvLp8C3^U1GCN5sfk*y zu2`rtx_KAJ)IOdYAK)zt{Gno9@kEXnqTOwc~xbj&=# z+qTT1f;v{#rmKAL3h;%NuY biA16f*4pD>4N54?Y|~ZNf(DiO@Spqx8;W&&bH zAg(?*L6{RrPY2=~K)g7PWAQp5%>l$9ahST05Dvz7Kt9lndJw@7_u$1rkOr7SkYOPF zjotakHXtns#NtpfkofE!uY`{SX?7q6>4B-Ay8FwI2S7d_5QFr<#3wZBm@EMD(beB# z;dc&M4wV2&GEH`55?4_-e!uk`kOvA2ZXjj@VtF9`48)#!DVeDyMfsBrSY|~0^Vzj& z`acHW(&EhIM23H!C#FlW{bTqS+&qm Date: Wed, 15 Sep 2021 16:26:41 +0200 Subject: [PATCH 14/49] Code refactor and adding, in the README file, the instructions to add the localizations of levels and cards --- README.md | 12 ++++++++++++ scenes/cards.gd | 1 - scenes/game.gd | 6 +++++- scenes/levels.gd | 1 + scenes/title.gd | 30 ++++++++++++++++-------------- 5 files changed, 34 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 0f7ee77..5c47bf5 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,18 @@ A level can consist of multiple repositories. To have more than one, you can use At this stage, we're still exploring ourselves which kind of levels would be fun! So feel free to try new things: basic introductions with a little story? Really hard puzzles? Levels where you have to find information? Levels where you need to fix a problem? Levels with three remotes? +## Add localizations +1. Add the localization text into the section "description" in the file ./resource/cards.json + Example: + "description": { + "en_EN": "Drag this card into the empty space above to initialize the time machine!", + "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo", + "es_ES": "" + } +2. Add, into the directory *levels*, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI ) +1. Add, the localization into the dictionary game.langs (es. var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"} the first and default localization it must be en_EN + + ## Contribute code! To open the game in the [Godot editor](https://godotengine.org), run `godot project.godot`. You can then run the game using *F5*. diff --git a/scenes/cards.gd b/scenes/cards.gd index ee03e89..aed300e 100644 --- a/scenes/cards.gd +++ b/scenes/cards.gd @@ -3,7 +3,6 @@ extends Control var card_store = {} var cards var card_radius = 1500 -#var lang = "it" # TODO: Make a global variable to setting dir and cards localizations func _ready(): load_card_store() diff --git a/scenes/game.gd b/scenes/game.gd index e8d689e..9cd9f92 100644 --- a/scenes/game.gd +++ b/scenes/game.gd @@ -1,5 +1,6 @@ extends Node +var langs = {0: "en_EN", 1: "it_IT"} # Localizations allowed var lang = OS.get_locale() # Variable for game localization var tmp_prefix = OS.get_user_data_dir() + "/tmp/" @@ -20,7 +21,10 @@ var state = {} var mutex func _ready(): - print(lang) + # Check if present localization language + if not langs.values().has(lang): + lang = langs[0] + mutex = Mutex.new() load_state() diff --git a/scenes/levels.gd b/scenes/levels.gd index 25593f7..5a3d9f9 100644 --- a/scenes/levels.gd +++ b/scenes/levels.gd @@ -3,6 +3,7 @@ extends Node var chapters func _ready(): + var lang = game.lang reload() func reload(): diff --git a/scenes/title.gd b/scenes/title.gd index b79d977..cf99a2d 100644 --- a/scenes/title.gd +++ b/scenes/title.gd @@ -3,6 +3,7 @@ extends Control onready var popup = $VBoxContainer/Language func _ready(): + check_correct_lang_item() if !OS.has_feature("standalone") and !game.skipped_title: game.skipped_title = true get_tree().change_scene("res://scenes/level_select.tscn") @@ -26,28 +27,31 @@ func sandbox(): get_tree().change_scene("res://scenes/main.tscn") +# Check the apropriate locale +func check_correct_lang_item(): + for i in game.langs.keys(): + if game.lang == game.langs[i]: + popup.get_popup().set_item_checked(i, true) + +# Set all items to unchecked func uncheck_all_item(): - # Set all item unchecked - var num = popup.get_popup().get_item_count() - for n in num: - popup.get_popup().set_item_checked(n, false) - pass + for i in game.langs.keys(): + popup.get_popup().set_item_checked(i, false) +# Create popup items width allowed locales func make_popup_item(): - popup.get_popup().add_radio_check_item("en_EN", 0) - popup.get_popup().add_radio_check_item(tr("it_IT"), 1) + for i in game.langs.keys(): + popup.get_popup().add_radio_check_item(game.langs[i], i) uncheck_all_item() - if game.lang == "en_EN": - popup.get_popup().set_item_checked(0, true) - elif game.lang == "it_IT": - popup.get_popup().set_item_checked(1, true) + check_correct_lang_item() popup.get_popup().connect("id_pressed", self, "_on_item_pressed") +# Change the translations and localizations of the cards and strings func _on_item_pressed(id): uncheck_all_item() @@ -56,6 +60,4 @@ func _on_item_pressed(id): TranslationServer.set_locale(game.lang) - # DELETE ME - print(popup.get_popup().get_item_text(id)) - print(game.lang) + From 2f1ff72c763b1fa1c444dd253054e9cc8b2e669a Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 15 Sep 2021 16:45:00 +0200 Subject: [PATCH 15/49] README file adjustaments --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5c47bf5..7cf855c 100644 --- a/README.md +++ b/README.md @@ -77,14 +77,16 @@ At this stage, we're still exploring ourselves which kind of levels would be fun ## Add localizations 1. Add the localization text into the section "description" in the file ./resource/cards.json +``` Example: "description": { "en_EN": "Drag this card into the empty space above to initialize the time machine!", "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo", "es_ES": "" } -2. Add, into the directory *levels*, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI ) -1. Add, the localization into the dictionary game.langs (es. var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"} the first and default localization it must be en_EN +``` +2. Add, into the directory **levels**, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI ) +1. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN ## Contribute code! From 6fb0f729cce42ad3a17ac19e49049929eb244767 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 15 Sep 2021 16:46:34 +0200 Subject: [PATCH 16/49] README file some adjustaments --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7cf855c..21b5c6b 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ At this stage, we're still exploring ourselves which kind of levels would be fun "description": { "en_EN": "Drag this card into the empty space above to initialize the time machine!", "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo", - "es_ES": "" + "es_ES": "Arrastre esta tarjeta al área en blanco de arriba para inicializar la máquina del tiempo" } ``` 2. Add, into the directory **levels**, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI ) From 9db0d092141807b2511aa3987e9ff1ed3e5bdebb Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 15 Sep 2021 16:47:45 +0200 Subject: [PATCH 17/49] README file some adjustaments --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 21b5c6b..03c8931 100644 --- a/README.md +++ b/README.md @@ -78,12 +78,12 @@ At this stage, we're still exploring ourselves which kind of levels would be fun ## Add localizations 1. Add the localization text into the section "description" in the file ./resource/cards.json ``` - Example: - "description": { - "en_EN": "Drag this card into the empty space above to initialize the time machine!", - "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo", - "es_ES": "Arrastre esta tarjeta al área en blanco de arriba para inicializar la máquina del tiempo" - } +Example: +"description": { + "en_EN": "Drag this card into the empty space above to initialize the time machine!", + "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo", + "es_ES": "Arrastre esta tarjeta al área en blanco de arriba para inicializar la máquina del tiempo" +} ``` 2. Add, into the directory **levels**, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI ) 1. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN From b54abd298d1d7eaf4d62c7bb917d21192b33efcc Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 15 Sep 2021 16:56:36 +0200 Subject: [PATCH 18/49] README file now its ok :) --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 03c8931..3f2cb6a 100644 --- a/README.md +++ b/README.md @@ -85,9 +85,10 @@ Example: "es_ES": "Arrastre esta tarjeta al área en blanco de arriba para inicializar la máquina del tiempo" } ``` -2. Add, into the directory **levels**, the directory with the levels to you want to adding (es. ./levels/fr_FR/LIVELLI ) +2. Add, into the directory **levels**, the directory with the levels do you want to adding (es. ./levels/fr_FR/LIVELLI ) 1. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN - + +If one or more localizations in the descriptions of cards are missing and levels require that card, the game crashes! ## Contribute code! From f8530a58c744846785b444506ba16831665a73c6 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 15 Sep 2021 18:15:10 +0200 Subject: [PATCH 19/49] some adjustaments and code refactor --- levels/it_IT/branches/branch-create | 8 ++++---- levels/it_IT/branches/branch-remove | 2 +- levels/it_IT/intro/risky | 2 +- resources/localizations.csv | 9 ++++++++- resources/localizations.en.translation | Bin 1285 -> 1869 bytes resources/localizations.it.translation | Bin 1324 -> 1972 bytes scenes/cards.gd | 2 +- scenes/file_browser.gd | 2 +- scenes/game.gd | 2 +- scenes/level.gd | 4 ++-- scenes/level_select.gd | 2 +- scenes/node.gd | 2 +- scenes/repository.gd | 2 +- scenes/repository.tscn | 1 + 14 files changed, 23 insertions(+), 15 deletions(-) diff --git a/levels/it_IT/branches/branch-create b/levels/it_IT/branches/branch-create index 428c4a5..2544ead 100644 --- a/levels/it_IT/branches/branch-create +++ b/levels/it_IT/branches/branch-create @@ -31,11 +31,11 @@ git branch -D main [win] -# Crea un ramo chiamato 'birthday questo punta alla linea temporale del compleanno -git show birthday | grep 'al compleanno' +# Crea un ramo chiamato 'birthday' questo punta alla linea temporale del compleanno +git show birthday | grep 'birthday' -# Create a branch called 'concert' that points to the concert timeline. -git show concert | grep 'al concerto' +# Crea un ramo chiamato 'concert' questo punta alla linea temporale del compleanno +git show concert | grep 'concert' [congrats] diff --git a/levels/it_IT/branches/branch-remove b/levels/it_IT/branches/branch-remove index 07f8583..00a2d4c 100644 --- a/levels/it_IT/branches/branch-remove +++ b/levels/it_IT/branches/branch-remove @@ -20,7 +20,7 @@ echo Salti in un tombino nel marciapiede e arrivi in orario a scuola. >> you git commit -am "Salto" git checkout HEAD^ -b friend -echo All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori. >> you +echo "All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori." >> you git commit -am "Un nuovo amico" git checkout HEAD~2 -b music diff --git a/levels/it_IT/intro/risky b/levels/it_IT/intro/risky index 0203433..57a52d1 100644 --- a/levels/it_IT/intro/risky +++ b/levels/it_IT/intro/risky @@ -15,7 +15,7 @@ All'improvviso, il tuo gatto salta sul tavolo, strappa via il modulo, e scappa v Devi trovare una buona soluzione. -(Premi "Next Level" appena sei pronto!) +(Premi "Prossimo livello" appena sei pronto!) [setup] diff --git a/resources/localizations.csv b/resources/localizations.csv index 8716ff6..e64522b 100644 --- a/resources/localizations.csv +++ b/resources/localizations.csv @@ -28,4 +28,11 @@ WHATEVER,"Whatever...","Ad ogni costo..." OKAY,"Okay!","Ok!" YAY,"Yay!","Yay!" AWESOME,"Awesome!","Eccezionale!" -YOUR_TERMINAL,"This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!","Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comndi qui!" \ No newline at end of file +YOUR_TERMINAL,"This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!","Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comandi qui!" +INTERACT,"This is the time machine of another person! To interact with it, you need special commands!","Questa è la macchina del tempo di u'altra persona! Per interagirci hai bisogno di comandi speciali!" +GOLDEN_BADGE,"You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?","Ti aggiudicherai un badge d'oro per ogni livello che risolverai senza usare le cards! Puoi risolverli usando solo la linea di comando?" +GOOD_JOB,"Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.","Ottimo lavoro hai risolto il livello!\n\nSentiti libero di provare altro o clicca su 'Prossimo livello'" +COMPLETE_GOAL,"Complete the goal of this level","Completa l'obbiettivo di questo ivello!" +DRAG_AROUND,"You can drag these around with your mouse!","Puoi trascinarli in giro con il mouse!" +EDIT_FILE,"Click on these files to edit them!","Clicca su questi files per modificarli!" +YOUR_CARDS,"These are your cards! Drag them to highlighted areas to play them!","Queste sono le tue carte! Spostale nell'area evidenziata per usarle!" \ No newline at end of file diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation index 29648f6b6dbc57f36302ef34dc7bc83d7c7f8eb3..8809d36cf439d6a33670b3ba7c3c4cf7ae3f4feb 100644 GIT binary patch literal 1869 zcmbVNZ%kWN6u&K4N}=E=fdREEDH&l>Dl!!*8+09%j=$0lC|%Y)%3E7n-h;l@jp8O6 zV?<{p*&i@t$u>s(pd`j&f-%`7qMLIc*arhKG0rba#E6NE0LE9(>3U5={Nzo3IrseT zIp^Ns%qGC%_UVs6An~pAE$cyh#WJ zeVpg9o8S)m20}m*A^|7>u}D=0Lpe!D3f6z-j0H&sXaNQQt|%-S$aFv!0CPf)F3k?T zD6W@*+z+VQagKhqaqdXMSsUy-0KI@d045Lt(0fphB_^))4{Q*x3V1HeT<@=j)qxP;l}Pl%F~- zpZWxX;oHy$=LOH!C%JuIkXS3kdhZ9*ApX@iQp^i;V2DG9wWsmUE{-SzpfmwD0-*0a zaBWcg0C-xjijVUh=inUY=@@|etFFHF+)~{C)db#dmrHQ&=zD0~druC%`ywdVV<+I* zyOLEG`0uQ1i@)WL9_;A-^uDpzO82Af&i;ILrQvc7@Oglz0o1;@V(nA>eb9NpczXb! zLF_|}+fVFXhVu)Bq{;U(8xV+SZM)iBAC&;XaGo%H2#9DtU)@=!Of$;5w8~H?pCgi& z!oCm@9ZqZh^y^n7t~}wPri0j)hn+6;Y-a;J(@RXJ;Jee$77_TJ@-{-rBlbfk~P3As;-1I^|6eIR5MW zOwIT^QArIEZI>QJCD!5z$Z`V`{jo|zDRXVh83p>xE(~Rwz>0k|DBWIK zsEs^Ifxy=MgR4rZywRCdy)YE(V_we94BH~qODslZy-ug;bhPM-MEGF2)y4ey&gX}{R0#>PVpi(91IIy5YX zaCY9~39#Dcu;6o(23OvoZJDNi7)DCpepGJE8aHOuX-=JURF7IDv1t*lcgOQZ7+=y3 Hf298a@cZPX delta 804 zcmX@h*UGg)m$6=)0Rq^7lmHO_2LdrDtpKG#Vro#f4wSY-l5+vF{eUOTil&c333`|goxCbu|<^tL5Q0$lOcU%#u5ac)zh8Zw> z$17owfgDf_(|?P_Im7^{h!-dh!ly%pAA&r^1;ji+4AZ|jj$^Saki!nNA8ZIr;!Dc% zr9gFHM}Zv10@ajW)X!lHR0Ol|oyZoE7N8s_6z2&Ym#zV_Ve&>N7+?DU)x#VDGhf~K z{Z@4#2d0k+Xg}ChU*_a#WdS8XmV)rq-CuryXl^Km8F0}(DzO2`0r?1IILzl08g)$4 zfP7fU2`}g{l>+j8fEZ*4OkMTC3BtWV{uCg-0FwL0?tCN?XrLgF14;`pi@5Htw$2A~ z(1YG~VWC1Pk~m0S9*DbuVor(4*$jTE6(tHjsb#4-4FAISF+I=A%lpUhFT}?}JopBm zv@UDH7`9Uvp9nxBqK2|yI7II zu{^anKR0!2A{;d^wPxiRECiJ^z@um1>e%*%wz`l{1S!C5}?_hC#FmN zV+czvs#GW~PE9M#0g44r`}&{JQ+Vc)vZuk3I~{b8lg9}7joy5Ikn9FZ%4Xi$j^L<2!z zUnJn~^Ti@QB@he;S#IW8*xw&yOJV5`DvE!5P+?1;Xc0k{jqMIp=ZpEf`+{s4)b4>m zZ!nfN&`nA#8VYZ}7p4TFp`9@p88ZN8K+Ck=;izCaWWxH-o=rF)QXWXlP>hkO7;pfz z7O@1#9AG&>Es{-NtM1cF)B0M-b-?=j&MEHcw5>7YtQGssz*e9Kpniq`{T`D0GW54H z_PWnFY=?lO0JT&M90P~~LbvIA-|LW6^CM{+*`FI)d-00#UeC@9dwBVULK+egPSEoV z9sH%E40;KWndi^^v-t{a#1&0V_cvcTDUBgN&6t3#cJ^(3r=R$w+~nVN_4@hVv`+Wx z@jsgC+}~xy>-KM6%=<}!-2z{luWsLSemw66^aSt&px?JWdVn8;PTbH;k4*oXmz~a= z+28x0-@Nq(lF^gR%$w}u$sD{F@}>Id>Cl}wkA}-$gQUEKn_EvzL1;eY_t%oT**kEg zTn__!oqOl^EjtFq1KXQ`Ugw6%UB%0x&|4%_ep28)0l5(f0(yMjhhtAz;rB9ZG*{j3 zc5_1$biE!u@7E9Re&+y`dYo+o9-lM(b`U}L_u10ha$y91#1TQyJ04%Nj(VUOX7csr z2OE#j`z-|QfbMUvyzyxd!L9Ci%i-wtxQ^`}d2}`o)th2lZ6^N?cGn1UZQe;w*sP$FLv`OMQHvSdw zS}jPQP4UT78+h%!jeEFOLmf8>bNsqf_TQs=ZQESCx zVYT`syLPFF50{MfwDQs#a8qk@jSezgGnJGa7tOZvf5K?5Rr%;=nW(o4&^8yE{&uq2 z1&t!r%~whi7vmF!CeE&QUB5l0+RNnmCP7-tQ;3i!vZH6L*G#;&@^bR{VCt@Gg;^s5 zw|%i%uwF~B<4fc-R(XHQ@`^?X#`P2^7(FDET4gj?xM-X?&C~{Whfig$UeE)&y~K9) z*(_0>F1L7$l+iugSgr9{Bv%xWi^(|`}@n}Zmo9j0(FRq(MbFbp5iYl zQ+!zIA6#jjk!4%@;Vc^L8iR?*Vf1Ea%>zm(;Mdx4))vVfx#C@yQyY7Y(Co>6`><*s dOd9+DsJzVW$@!+^t`4oRhPgxm_;17a`d{hC3UUAd delta 786 zcmZ9JZ%7ky7{{Mm=XtI_t8OfCQ5(dBSZ}O+GZl0$QQWL~S{B)cTRA3YZYESOM(l+W zL8DP4^hJaIyr>|=!19$ODD;_dlE=zhW$v&T@`z_i2Ppk`i1n6J{i~$31T^*zcOaaM4*Hx(m1F?(zBAXQ$ z`TT9=CUg}vfJi#B)`dh~ju8#!mcDCuVAliA74;wFpspi{{mk1z?F)aPqu8-c%f%28 zokgcg;>jZ<)TZ%78F1`U=C*nc3U9}ge>fMNWyl?1CouM|x$i@AKc;zI+89IrF6esz z_h6ciZoce=VkgScb~wbUm3iav3<5lWxw~BX#S8r3;9d9G_&oA>2oDzZg&Y23dD!9v z+Jo8S{EyB9_KUphD+TR2>=NeFdniBagR9eM$XoJlpw_T|dK$O|L)=dI+sc!kA`HF^ z!`CUjSBvQ$#%mkSyvyZ>V%)ZwPF2y9Xok@dTeJ6Z!AW$$V zd?lM2jg!C0$#v_cMxHw4mVbw6b<0+3K9Iks9CF1R;mhu-?acxW$FF*+GdVs!;idkx UmqOXm6gie!?2RFlq65+3A3ig$;s5{u diff --git a/scenes/cards.gd b/scenes/cards.gd index aed300e..095ee96 100644 --- a/scenes/cards.gd +++ b/scenes/cards.gd @@ -55,7 +55,7 @@ func draw(ids): arrange_cards() if ids.size() > 0: - game.notify("These are your cards! Drag them to highlighted areas to play them!", self, "cards") + game.notify(tr("YOUR_CARDS"), self, "cards") func arrange_cards(): var t = Timer.new() diff --git a/scenes/file_browser.gd b/scenes/file_browser.gd index 1af3fa2..b2d45f0 100644 --- a/scenes/file_browser.gd +++ b/scenes/file_browser.gd @@ -82,7 +82,7 @@ func update(): grid.add_child(item) if files.size() > 0: - game.notify("Click on these files to edit them!", self, "file-browser") + game.notify("EDIT_FILE", self, "file-browser") if false: match mode: diff --git a/scenes/game.gd b/scenes/game.gd index 9cd9f92..66695b3 100644 --- a/scenes/game.gd +++ b/scenes/game.gd @@ -126,7 +126,7 @@ func notify(text, target=null, hint_slug=null): return var notification = preload("res://scenes/notification.tscn").instance() - notification.text = text + notification.text = tr(text) if not target: target = get_tree().root target.call_deferred("add_child", notification) diff --git a/scenes/level.gd b/scenes/level.gd index 97c1746..06b8740 100644 --- a/scenes/level.gd +++ b/scenes/level.gd @@ -42,7 +42,7 @@ func load(path): if cli_hints != "": description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]" - congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.") + congrats = config.get("congrats", "GOOD_JOB") cards = Array(config.get("cards", "").split(" ")) if cards == [""]: cards = [] @@ -78,7 +78,7 @@ func load(path): else: repo = "yours" - var desc = "Complete the goal of this level" + var desc = tr("COMPLETE_GOAL") for line in Array(config[k].split("\n")): if line.length() > 0 and line[0] == "#": desc = line.substr(1).strip_edges(true, true) diff --git a/scenes/level_select.gd b/scenes/level_select.gd index 42bff1b..cdcaaf9 100644 --- a/scenes/level_select.gd +++ b/scenes/level_select.gd @@ -57,7 +57,7 @@ func reload(): level_list.add_child(hb) if badge.active: - game.notify("You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?", badge, "cli-badge") + game.notify("GOLDEN_BADGE", badge, "cli-badge") level_id += 1 chapter_id += 1 diff --git a/scenes/node.gd b/scenes/node.gd index f19e66a..f810a81 100644 --- a/scenes/node.gd +++ b/scenes/node.gd @@ -80,7 +80,7 @@ func type_set(new_type): $Sprite.texture = preload("res://nodes/tree.svg") "commit": $Sprite.texture = preload("res://nodes/commit.svg") - game.notify("You can drag these around with your mouse!", self, "drag-nodes") + game.notify("DRAG_AROUND", self, "drag-nodes") "tag": $Sprite.texture = preload("res://nodes/blob.svg") "ref": diff --git a/scenes/repository.gd b/scenes/repository.gd index 916bb03..c2f1524 100644 --- a/scenes/repository.gd +++ b/scenes/repository.gd @@ -89,7 +89,7 @@ func set_label(new_label): $Rows/RepoVis/SeparatorLine/DropArea.queue_free() $Rows/RepoVis/SeparatorLine.hide() else: - game.notify("This is the time machine of another person! To interact with it, you need special commands!", self, "remote") + game.notify("INTERACT", self, "remote") label_node.text = new_label func random_position(): diff --git a/scenes/repository.tscn b/scenes/repository.tscn index 566b5e8..35264e9 100644 --- a/scenes/repository.tscn +++ b/scenes/repository.tscn @@ -113,6 +113,7 @@ margin_bottom = 61.0 __meta__ = { "_edit_use_anchors_": false } + [connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] [connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] [connection signal="pressed" from="Rows/RepoVis/Button" to="." method="update_everything"] From 42ebe9e6716baf9242209c305b0b070e157b6404 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Thu, 16 Sep 2021 18:42:31 +0200 Subject: [PATCH 20/49] export configurations file --- export_presets.cfg | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/export_presets.cfg b/export_presets.cfg index 99aaf85..49998cc 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -7,22 +7,21 @@ custom_features="" export_filter="all_resources" include_filter="levels/*, scripts/*, resources/*, cards/*" exclude_filter="dependencies/*, cache/*" -export_path="" -patch_list=PoolStringArray( ) +export_path="../../../Downloads/Oh My Git!.x86_64" script_export_mode=1 script_encryption_key="" [preset.0.options] +custom_template/debug="" +custom_template/release="" +binary_format/64_bits=true +binary_format/embed_pck=false texture_format/bptc=false texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false texture_format/no_bptc_fallbacks=true -binary_format/64_bits=true -binary_format/embed_pck=false -custom_template/release="" -custom_template/debug="" [preset.1] @@ -34,7 +33,6 @@ export_filter="all_resources" include_filter="levels/*, scripts/*, resources/*, cards/*" exclude_filter="dependencies/*, cache/*" export_path="" -patch_list=PoolStringArray( ) script_export_mode=1 script_encryption_key="" @@ -66,22 +64,21 @@ custom_features="" export_filter="all_resources" include_filter="levels/*, scripts/*, resources/*, cards/*" exclude_filter="dependencies/*, cache/*" -export_path="" -patch_list=PoolStringArray( ) +export_path="../../../Downloads/Oh My Git!.exe" script_export_mode=1 script_encryption_key="" [preset.2.options] +custom_template/debug="" +custom_template/release="" +binary_format/64_bits=true +binary_format/embed_pck=false texture_format/bptc=false texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false texture_format/no_bptc_fallbacks=true -binary_format/64_bits=true -binary_format/embed_pck=false -custom_template/release="" -custom_template/debug="" codesign/enable=false codesign/identity="" codesign/password="" @@ -109,15 +106,17 @@ export_filter="all_resources" include_filter="levels/*, scripts/*, resources/*" exclude_filter="dependencies/*, cache/*" export_path="" -patch_list=PoolStringArray( ) script_export_mode=1 script_encryption_key="" [preset.3.options] +custom_template/debug="" +custom_template/release="" +variant/export_type=0 vram_texture_compression/for_desktop=true vram_texture_compression/for_mobile=false html/custom_html_shell="" html/head_include="" -custom_template/release="" -custom_template/debug="" +html/canvas_resize_policy=2 +html/experimental_virtual_keyboard=false From b9fc323a58f8c1a622efd8725db8d0b4017625d9 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Thu, 16 Sep 2021 18:56:27 +0200 Subject: [PATCH 21/49] Adding another line for the explanation of localization mechanism --- README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f2cb6a..88ba387 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,17 @@ Example: } ``` 2. Add, into the directory **levels**, the directory with the levels do you want to adding (es. ./levels/fr_FR/LIVELLI ) -1. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN +3. Add, the localization into the dictionary game.langs (es. `var langs = {0: "en_EN", 1: "it_IT", 2: "es_ES"}` the first and default localization it must be en_EN +4. Add column of specific locale and relative traductions for avery keys in the file ./resource/localization.csv +``` +Example: + +keys,en,it,es +LEVELS,Livels,Livelli,niveles +QUIT,Quit,Esci,Salir +BACK,Back,Indietro,Espalda + +``` If one or more localizations in the descriptions of cards are missing and levels require that card, the game crashes! From 6e0661b662465081fc77243b46e0a10ee32e9a5e Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Fri, 17 Sep 2021 11:40:31 +0200 Subject: [PATCH 22/49] Some levels translations --- levels/it_IT/changing-the-past/rebase | 70 ++++++++--------- levels/it_IT/changing-the-past/reorder | 75 +++++++++---------- levels/it_IT/shit-happens/bad-commit | 25 ++++--- .../shit-happens/pushed-something-broken | 38 +++++----- levels/it_IT/shit-happens/reflog | 10 +-- levels/it_IT/shit-happens/restore-a-file | 18 ++--- .../shit-happens/restore-a-file-from-the-past | 17 +++-- 7 files changed, 127 insertions(+), 126 deletions(-) diff --git a/levels/it_IT/changing-the-past/rebase b/levels/it_IT/changing-the-past/rebase index 6ed89a8..5de4a47 100644 --- a/levels/it_IT/changing-the-past/rebase +++ b/levels/it_IT/changing-the-past/rebase @@ -3,84 +3,84 @@ cards = checkout commit-auto reset-hard rebase [description] -Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all. +Okay - Viene vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro i regolamenti dell'International Time Travel Association. Dopotutto, dovrai svolgere i tuoi compiti in sequenza. -See the "rebase" card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops. +Vedi la carta "rebase"? Quando la sposti su un commit, copierà gli eventi della tua corrente linea temporale dopo quello specificato! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi. -Again, we want to make that our base reality - the "main" branch should point to that timeline! +Nuovamente, vogliamo rendere questa la nostra realtà di base - il ramo "main" dovrebbe puntare a quella linea temporale! [setup] -echo "You do not have a baguette. +echo "Non hai una baguette. -You do not have coffee. +Non hai caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "The Beginning" +git commit -m "L'inizio" git checkout -b baguette main -echo "You have a baguette. +echo "Hai una baguette. -You do not have coffee. +Non hai caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You buy a baguette" +git commit -m "Compri una baguette" -echo "You ate a baguette. +echo "Mangi una baguette. -You do not have coffee. +Non hai caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You eat the baguette" +git commit -m "Mangi la baguette" git checkout -b coffee main -echo "You do not have a baguette. +echo "Non hai una baguette. -You have coffee. +Hai del caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You buy some coffee" +git commit -m "Compri un pò di caffe" -echo "You do not have a baguette. +echo "Non hai una baguette. -You drank coffee. +Hai bevuto caffe. -You do not have a donut." > you +Non hai una ciambella." > you git add . -git commit -m "You drink the coffee" +git commit -m "Bevi il caffe" git checkout -b donut main -echo "You do not have a baguette. +echo "Non hai una baguette -You do not have coffee. +Non hai caffe. -You have a donut." > you +Hai una ciamebella." > you git add . -git commit -m "You buy a donut" +git commit -m "Compri una ciambella" -echo "You do not have a baguette. +echo "Non hai una baguette. -You do not have coffee. +Non hai caffe. -You ate a donut." > you +Mangi una ciambella." > you git add . -git commit -m "You eat the donut" +git commit -m "Mangi la ciambella" git checkout --detach main [win] -# Order all tree branches into one and move the main branch ref -{ git show main:you | grep "You ate.*baguette"; } && { git show main:you | grep "You drank.*coffee"; } && { git show main:you | grep "You ate.*donut"; } && { test "$(git log main --oneline | wc -l)" -eq 7; } +# Ordina le tre ramificazioni in una e muovi il riferimento al ramo principale +{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "Bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; } [congrats] -Notice how the other timelines and commits are still there - if anything goes wrong, you can also travel back to them. +Nota come gli altri commit e linee temporali siano ancora li - se qualcosa va storto, puoi ancora tornare in dietro. -It's really hard to actually *destroy* stuff with your time machine. +E' davvero difficile *distruggere* le cose con la tua macchina del tempo. diff --git a/levels/it_IT/changing-the-past/reorder b/levels/it_IT/changing-the-past/reorder index 04f66cb..93c340c 100644 --- a/levels/it_IT/changing-the-past/reorder +++ b/levels/it_IT/changing-the-past/reorder @@ -1,78 +1,77 @@ -title = Reordering events +title = Riordinare gli eventi cards = checkout commit-auto reset-hard rebase-interactive cherry-pick [description] -Oops, looks like there's something messed up here. Can you put the events back into their correct order? +Oops, guarda c'è qualcosa di incasinato qui. Puoi rimettere gli eventi nel corretto ordine? -There are two ways to do this: You can drag the "interactive rebase" card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it. - -Or you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches! +Ci sono due modi per farlo: Puoi spostare la carta "interactive rebase" nel commit precedente a quello che vuoi cambiare, poi aprire e riordinare le linee nel file e salvarlo. +Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit nell'ordine desiderato. Hai carte per entrambe i modi! [setup] -echo "You just woke up. +echo "Ti sei appena svegliato. -You are NOT wearing underwear. +Non indossi biancheria intima. -You are NOT wearing pants. +Non indossi pantaloni. -You are NOT wearing a shirt. +Non indossi la maglia. -You are NOT wearing shoes." > you +Non indossi le scarpe." > you git add . -git commit -m "The Beginning" +git commit -m "L'inizio" -echo "You just woke up. +echo "Ti sei appena svegliato. -You are NOT wearing underwear. +Non indossi biancheria intima. -You are NOT wearing pants. +Non indossi pantaloni. -You are NOT wearing a shirt. +Non indossi la maglia. -You are wearing shoes." > you -git commit -am "Put on shoes" +Indossi le scarpe." > you +git commit -am "Metti le scarpe" -echo "You just woke up. +echo "Ti sei appena svegliato. -You are NOT wearing underwear. +Non indossi biancheria intima. -You are wearing pants. +Indossi pantaloni -You are NOT wearing a shirt. +Non indossi la maglia. -You are wearing shoes." > you -git commit -am "Put on pants" +Indossi le scarpe." > you +git commit -am "Metti i pantaloni" -echo "You just woke up. +echo "Ti sei appena svegliato. -You are wearing underwear. +Indossi la biancheria intima. -You are wearing pants. +Indossi pantaloni. -You are NOT wearing a shirt. +Non indossi la maglia. -You are wearing shoes." > you -git commit -am "Put on underwear" +Indossi le scarpe." > you +git commit -am "Metti biancheria intima" -echo "You just woke up. +echo "Ti sei appena svegliato. -You are wearing underwear. +Indossi biancheria intima. -You are wearing pants. +Indossi pantaloni. -You are wearing a shirt. +Indossi la maglia. -You are wearing shoes." > you -git commit -am "Put on shirt" +Indossi le scarpe." > you +git commit -am "Ti metti la maglia" [win] -# Reorder the commits to dress yourself in the correct way -{ git log main --oneline | perl -0777 -ne'exit(1) if not /shoes[\s\S]*pants[\s\S]*underwear/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; } +# Riordina i commits per vestirti nel modo corretto +{ git log main --oneline | perl -0777 -ne'exit(1) if not /scarpe[\s\S]*pantaloni[\s\S]*biancheria/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; } [congrats] -Feel free to reset the level and try the other strategy! Which one do you like better? +Sentiti libero di resettare il livello e provare l'altra strategia!Qual'è quella che preferisci? diff --git a/levels/it_IT/shit-happens/bad-commit b/levels/it_IT/shit-happens/bad-commit index 10669be..b859921 100644 --- a/levels/it_IT/shit-happens/bad-commit +++ b/levels/it_IT/shit-happens/bad-commit @@ -1,30 +1,31 @@ -title = Undo a bad commit +title = Annullare un cattivo commit cards = reset commit-a [description] -Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again? +Oh no, abbiamo fatto un cattivo commit! Come possiamo annualre un commit e tornare al punto per poter riprovare? -The answer is using `git reset [commit]`, which does two things: +La risposta è usare `git reset [commit]` che fa due cose: -- It resets the current branch ref to the commit you specify. -- And it resets the index to that commit. +- Reimposta il riferimento del ramo corrente al commit che hai specificato. +- Reimposta l'indice a quel commit. + +Non cambia la tua directory di lavoro in nessun modo, il che significa che dopo puoi provare a rifare il commit che desideri. -It does not change your working directory in any way, which means that after that, you can try making the commit you want again. [setup] echo "1 2 3 4" > numbers git add . -git commit -m "Initial commit" +git commit -m "commit iniziale" echo "1 2 3 4 5 6 7 8 9 11" > numbers -git commit -am "More numberrrrrs" +git commit -am "Più numerrrrri" [win] -# In the last main commit, the numbers file contains the numbers from 1 to 10. +# Nel primo commit il file numbers contiene i numeri da 1 a 10. test "$(git show main:numbers)" = "1 2 3 4 5 6 7 8 9 10" -# The commit message of that commit is "More numbers". -git log -1 --oneline | grep "More numbers" -# The commit with the typo is not part of the main branch anymore. +# Il messaggio di questo commit è "Più numeri". +git log -1 --oneline | grep "Più numeri" +# Il commit con l'errore si battitura non fa più parte del ramo principale. git log --oneline | grep -v "rrrrr" diff --git a/levels/it_IT/shit-happens/pushed-something-broken b/levels/it_IT/shit-happens/pushed-something-broken index f8dce38..5535bc3 100644 --- a/levels/it_IT/shit-happens/pushed-something-broken +++ b/levels/it_IT/shit-happens/pushed-something-broken @@ -1,13 +1,13 @@ -title = I pushed something broken +title = Ho rotto qualcosaI pushed something broken cards = revert push [description] -We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert` +Stavamo parlato di come annulare un commit e correggerlo. Questo ci aiuto solo quando non lo abbiamo già inviato al remoto. Quando succede questo e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert` [setup] -echo "this is fine +echo "questo va bene ? @@ -16,30 +16,30 @@ echo "this is fine ?" > text git add . git commit -m fine -echo "this is fine +echo "questo va bene -this is also fine +anche questo va bene ? ?" > text -git commit -am "also fine" -echo "this is fine +git commit -am "anche bene" +echo "questo va bene -this is also fine +anche questo va bene -this is very bad +questo è veramente sbagliato ?" > text -git commit -am "very bad" -echo "this is fine +git commit -am "veramente sbagliato" +echo "questo va bene -this is also fine +anche questo va bene -this is very bad +questo è veramente sbagliato -this is fine again" > text -git commit -am "fine again" +questo va nuovamente bene" > text +git commit -am "nuovamente bene" git push team main git branch -u team/main main @@ -48,7 +48,7 @@ git branch -u team/main main [win team] -# The team's main branch no longer contains the bad thing. -! { git show main:text | grep -q "very bad"; } -# And the history has not been modified. -git show main^:text | grep -q "very bad" +# Il ramo principale del Team non contiene più niente di sbagliato. +! { git show main:text | grep -q "veramente sbaglaito"; } +# e la cronologia non è stata modificata. +git show main^:text | grep -q "veramente sbaglaito" diff --git a/levels/it_IT/shit-happens/reflog b/levels/it_IT/shit-happens/reflog index e21c4e7..8e8e51a 100644 --- a/levels/it_IT/shit-happens/reflog +++ b/levels/it_IT/shit-happens/reflog @@ -1,13 +1,13 @@ -title = Go back to where you were before +title = Torna dove eri prima cards = checkout reflog [description] -Say you were looking at something in the past, and then switched back to the main branch. +Diciamo che stavi guardando qualcosa in passato e poi sei tornato al ramo principale. -But then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out? +Ma poi ti sei distratto molto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo? -There's a convenient command that shows you all the places your HEAD did point to in the past: +C'è un comodo comando che ti mostra tutti i posti a cui la tua HEAD ha puntato in passato: git reflog @@ -22,5 +22,5 @@ git checkout main [win] -# Find out where you've been before, and go back there! +# Trova cosa stavi facendo prima e tornaci! test "$(git rev-parse HEAD)" = "$(git rev-parse 3)" diff --git a/levels/it_IT/shit-happens/restore-a-file b/levels/it_IT/shit-happens/restore-a-file index 26450f0..16cf0dc 100644 --- a/levels/it_IT/shit-happens/restore-a-file +++ b/levels/it_IT/shit-happens/restore-a-file @@ -1,22 +1,22 @@ -title = Restore a deleted file +title = Recuperare un file cancellato cards = checkout [description] -Oops - you deleted the "essay" file, which you worked on all night! +Oops - Hai cancellato il file "essay" dove hai lavorato tutta la notte! -Luckily, Git is here to help! You can use `git checkout` to restore the file! +Stai sereno, Git è qui per aiutare! Puoi usare `git checkout` per recuperare il file! [setup] -echo important > essay +echo importante > essay git add . -git commit -m "Initial commit" -echo "important content" > essay -git commit -am "Improve essay" +git commit -m "Commit iniziale" +echo "contenuto importante" > essay +git commit -am "Ottimizzato essay" rm essay [win] -# Restore the essay to contain "important content" -test "$(cat essay)" = "important content" +# Recupera il file "essay" che contiene "contenuto importante" +test "$(cat essay)" = "contenuto importante" diff --git a/levels/it_IT/shit-happens/restore-a-file-from-the-past b/levels/it_IT/shit-happens/restore-a-file-from-the-past index b51c108..c15f2a3 100644 --- a/levels/it_IT/shit-happens/restore-a-file-from-the-past +++ b/levels/it_IT/shit-happens/restore-a-file-from-the-past @@ -1,21 +1,22 @@ -title = Restore a file from the past +title = Recuperare un file dal passato cards = checkout checkout-from commit [description] -Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how: +Questo è un problema simile: preferivi il file "essay" del primissimo commit e vuoi riaverlo indietro! Bene, checkout puo anche recuperare le cose dai vecchi commits. +Così: git checkout [commit] [file] [setup] -echo "good version" > essay +echo "versione buona" > essay git add . -git commit -m "Initial commit" -echo "bad version" > essay -git commit -am "\"Improve\" essay" +git commit -m "commit iniziale" +echo "versione cattiva" > essay +git commit -am "\"Migliorato\" essay" [win] -# Get the first version of your essay, and make a new commit with it. -test "$(git show main:essay)" = "good version" +# Prendi la prima versione di "essay" e crea un nuovo commit con essa. +test "$(git show main:essay)" = "versione buona" From 91ad5092fbdbbfa991e903253e0957ad7756c0e5 Mon Sep 17 00:00:00 2001 From: Moreno Razzoli Date: Fri, 24 Sep 2021 20:54:49 +0200 Subject: [PATCH 23/49] localization: refining italian translation. part 1 --- levels/it_IT/index/change | 10 +++---- levels/it_IT/index/compare | 8 +++--- levels/it_IT/index/new | 10 +++---- levels/it_IT/index/reset | 12 ++++----- levels/it_IT/index/steps | 4 +-- levels/it_IT/merge/conflict | 20 +++++++------- levels/it_IT/merge/merge | 6 ++--- levels/it_IT/merge/merge-abort | 26 +++++++++--------- levels/it_IT/merge/sequence | 1 + levels/it_IT/remotes/friend | 10 +++---- levels/it_IT/remotes/problems | 8 +++--- resources/cards.json | 48 +++++++++++++++++----------------- 12 files changed, 82 insertions(+), 81 deletions(-) diff --git a/levels/it_IT/index/change b/levels/it_IT/index/change index 6b701e3..970ffd6 100644 --- a/levels/it_IT/index/change +++ b/levels/it_IT/index/change @@ -1,21 +1,21 @@ -title = Aggiorna i file nell'indice +title = Aggiornare i file nell'indice cards = add commit [description] -Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice della versione cambiata dei file.. +Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice alla nuova versione del file.. Proviamoci! -Le icona nel browser dei file mostrano quando il file attuale (bianco) e la versione nell'indice (blu) sono differenti o quando sono uguali! +Le icone nel file manager ti mostrano quando il file attuale (bianco) e la versione nell'indice (blu) differiscono o sono uguali! [win] -Bene! L'indice, a volte, può essere chiamato "staging are" - Contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`! +Bene! L'indice è anche chiamato "staging area" (area di staging) - E contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`! [setup] -echo "La candela brucia con una fiamma blue." > candle +echo "La candela brucia con una fiamma blu." > candle git add . git commit -m "L'inizio" diff --git a/levels/it_IT/index/compare b/levels/it_IT/index/compare index 4f4cf8f..557b654 100644 --- a/levels/it_IT/index/compare +++ b/levels/it_IT/index/compare @@ -3,20 +3,20 @@ cards = checkout commit-auto [description] -Benvenuto nella lezione di oggi! Siamo impareremo come creare commits con più precisione! +Benvenuto! nella lezione di oggi impareremo come creare commits con più precisione! -Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato ma una di loro rende più semplice capire cosa è successo. +Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato, ma in una delle due è molto più semplice capire cosa è successo. [win] -# Pronti! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo! +# Esatto! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo! git branch --show-current | grep step-by-step [setup] echo "Una piccola ma pesante palla di vetro." > ball echo "Un sottile libro che sta in piedi." > book -echo "Una candela brucia con una fiamma blue." > candle +echo "Una candela brucia con una fiamma blu." > candle echo "Un sensore di fumo. E' assolutamente silenzioso." > smoke_detector git add . diff --git a/levels/it_IT/index/new b/levels/it_IT/index/new index cae2465..4ce39ec 100644 --- a/levels/it_IT/index/new +++ b/levels/it_IT/index/new @@ -1,23 +1,23 @@ -title = Aggiungi nuovi file all'indice +title = Aggiungere nuovi file all'indice cards = add commit [description] Finora, quando abbiamo eseguito un commit abbiamo sempre registrato lo stato di tutti gli oggetti, vero? -Ma Git ti permette di prendere i cambiamenti che voui mettere in un commit! +Ma Git ti permette di scegliere i cambiamenti che si vogliono mettere in un commit! -Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel browser dei file! +Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel file manager! Inizialmente, l'indice è vuoto. Per fare un commit che contenga un nuovo file, dobbiamo aggiungerlo! [cli] -Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere un nome file e premi il tasto tab per completare il nome. Questo ti permette di risparmiare tempo! +Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere il nome di un file e premi il tasto tab per completarlo. Così risparmi tempo! [setup] -echo "La candela brucia con una fiamma blue." > candle +echo "La candela brucia con una fiamma blu." > candle [win] diff --git a/levels/it_IT/index/reset b/levels/it_IT/index/reset index 56aa6d7..fd118fd 100644 --- a/levels/it_IT/index/reset +++ b/levels/it_IT/index/reset @@ -1,4 +1,4 @@ -title = Resetta i file nell'indice +title = Resettare i file nell'indice cards = add reset-file commit [description] @@ -9,7 +9,7 @@ Per esempio, queste candele sono state spente e quella modifica è stata aggiunt Ma è stato un errore! Vuoi solo spegnere al candela rossa nel prossimo commit! -Se hai già giornato l'indice di un file modificato, ma vuoi ripristinarlo, puoi usare `git reset`! +Se hai già aggiunto un file modificato all'indice ma vuoi ripristinarlo, puoi usare `git reset`! [setup] @@ -19,14 +19,14 @@ echo "Sta bruciando!" > blue_candle git add . git commit -m "L'inizio" -echo "E' stata spenta." > red_candle -echo "E' stata spenta." > green_candle -echo "E' stata spenta." > blue_candle +echo "È stata spenta." > red_candle +echo "È stata spenta." > green_candle +echo "È stata spenta." > blue_candle git add . [win] -# Ripristina i cambiamenti nella candella verde e blu! +# Ripristina i cambiamenti nella candela verde e in quella blu! git show :green_candle | grep burning && git show :blue_candle | grep burning && git show :red_candle | grep -v burning diff --git a/levels/it_IT/index/steps b/levels/it_IT/index/steps index b7700a1..8c13af7 100644 --- a/levels/it_IT/index/steps +++ b/levels/it_IT/index/steps @@ -1,4 +1,4 @@ -title = Aggiungi modifice passo dopo passo +title = Aggiungere le modifice una per volta cards = add reset-file commit [description] @@ -9,7 +9,7 @@ L'indice è veramente utile perché ci permette di essere precisi su quali cambi echo "Un martello, in equilibrio sul suo manico." > hammer echo "Una bottiglia contenente un liquido trasparente." > bottle -echo "Un cubo di zucche bianco." > sugar_cube +echo "Un cubetto di zucchero bianco." > sugar_cube git add . git commit -m "L'inizio" diff --git a/levels/it_IT/merge/conflict b/levels/it_IT/merge/conflict index e7c37fa..645b5ed 100644 --- a/levels/it_IT/merge/conflict +++ b/levels/it_IT/merge/conflict @@ -7,39 +7,39 @@ A volte le linee temporali si contraddicono a vicenda. Per esempio, in questo caso, un nostro cliente vuole che queste linee temporali siano unite ma hanno mangiato cose differenti in entrambe le linee temporali. -Prova ad unirle insieme! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare gli elementi, ti mostrerà le sezione in conflitti. Puoi scegliere una delle due versioni o creare una combinazione di esse! Rimuovi i markers >>>, <<<, e === e crea un nuovo commit per finalizare l'unione! +Prova ad unirle! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare l'elemento problematico, ti verranno mostrate le parti che vanno in conflitto. Puoi mantenere una delle due versioni o creare una combinazione di entrambe! Poi rimuovi i marcatori >>>, <<<, e === e crea un nuovo commit per finalizare l'unione! -Lascia che la tua linea temporale definitiva sia "main". +La tua linea temporale definitiva è "main". [setup] -echo "Appena sveglio. Sei affamato." > sam +echo "Si è appena svegliato. È affamato." > sam git add . git commit -m "L'inizio" git checkout -b pancakes -echo "Avevamo pancakes con mirtilli e sciroppo d'acero per colazione." > sam +echo "Ha fatto colazione con pancakes ai mirtilli e sciroppo d'acero." > sam git add . git commit -m "Pancakes!" echo " -Is at work." >> sam -git commit -am "Vai a lavoro" +È al lavoro." >> sam +git commit -am "Va al lavoro" git checkout -b muesli main -echo "Avevamo muesli con avena e fragole per colazione." > sam +echo "Ha fatto colazione con muesli all'avena e fragole." > sam git add . git commit -m "Muesli!" echo " -Is at work." >> sam -git commit -am "Vai a lavoro" +È al lavoro." >> sam +git commit -am "Va al lavoro" git checkout main [win] -# Crea un compromesso nella colazione del branch "main". +# Crea un compromesso tra le due colazioni nel branch "main". git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)" [congrats] diff --git a/levels/it_IT/merge/merge b/levels/it_IT/merge/merge index b23b023..a115cda 100644 --- a/levels/it_IT/merge/merge +++ b/levels/it_IT/merge/merge @@ -3,7 +3,7 @@ cards = checkout commit-auto merge [description] -Ecco un trucco per domire un pò più a lungo: fai tutte le tue attività, in universi paralleli, e poi uniscile! +Ecco un trucco per domire un pò più a lungo: svolgi tutte le tue attività mattutine in universi paralleli, e poi uniscile! [setup] @@ -43,7 +43,7 @@ git commit -m "Compri un pò di caffe" echo "Non hai una baguette. -Bevi caffe. +Bevi il caffe. Non hai una ciambella." > you git add . @@ -74,7 +74,7 @@ git branch -D main # Crea una situazione dove consumi una baguette, un caffe e una ciambella. { git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*coffe"; } && { git show HEAD:you | grep "Mangi.*donut"; } -# E' un commit di unione. +# Crea (e spostati su) un commit di unione. test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2 [congrats] diff --git a/levels/it_IT/merge/merge-abort b/levels/it_IT/merge/merge-abort index ce7190b..efabb5d 100644 --- a/levels/it_IT/merge/merge-abort +++ b/levels/it_IT/merge/merge-abort @@ -1,35 +1,35 @@ -title = Abort a merge +title = Interrompere un merge cards = checkout commit-auto merge merge-abort [description] -Sometimes you want to merge two commits, but a merge conflict occurs that you currently don't want to resolve. +Può capitare che tu voglia unire il contenuto di due commit ma si verifica un conflitto che al momento non vuoi risolvere. -In these situations you can abort the merge to merge later. Use +In queste situazioni, puoi interrompere il merge per riprendere successivamente. Usa git merge --abort -when you are in a merge process. +mentre sei nel processo di merge. -Try to merge both commits and abort the merge afterwards. +Prova a unire i due commit e interrompi la procedura di merge. [setup] -echo "A new day is starting" > you +echo "Un nuovo giorno sta iniziando" > you git add . git commit -m "Start" -echo "Walking down the Main Lane." >> you +echo "Stai camminando sulla corsia principale." >> you git add . -git commit -m "Main Lane" +git commit -m "Corsia Principale" git checkout HEAD~1 -echo "Walking down the Side Lane." >> you +echo "Stai camminando sulla corsia laterale." >> you git add . -git commit -m "Side Lane" +git commit -m "Corsia laterale" git checkout HEAD~1 @@ -43,12 +43,12 @@ fi [win] -# You tried to merge? +# Hai provato a fare il merge? test -f .git/secretfile -# You aborted to merge? +# Hai interrotto il merge? test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^ [congrats] -Aaah, let's merge later... +Aaah, faremo il merge più tardi... diff --git a/levels/it_IT/merge/sequence b/levels/it_IT/merge/sequence index c3b6caf..2e1aa81 100644 --- a/levels/it_IT/merge/sequence +++ b/levels/it_IT/merge/sequence @@ -1,2 +1,3 @@ merge conflict +merge-abort \ No newline at end of file diff --git a/levels/it_IT/remotes/friend b/levels/it_IT/remotes/friend index 771db17..c6f46c8 100644 --- a/levels/it_IT/remotes/friend +++ b/levels/it_IT/remotes/friend @@ -1,11 +1,11 @@ -title = Amico +title = Amici cards = pull push commit-auto checkout [description] -Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo a loro! +Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo! -A turno fino a che non ti ritrovi ad avere cinque linee! +Fate botta e risposta fino a che non ti ritrovi ad avere cinque linee! [setup yours] @@ -24,10 +24,10 @@ git commit -am "Un'altra linea" [actions friend] if test "$(git log --oneline | wc -l)" -eq 3; then - git reset --hard main # Necessario perché la directory di lavoro non è aggiornata fintanto che non viene inviata all'amico + git reset --hard main # Necessario perché la directory di lavoro non è aggiornata quando viene inviata all'amico echo "Linea 4, blurbblubb" >> essay git commit -am "Linea finale" - hint "Oh bene, Ho aggiunt la quarta linea!" + hint "Oh bene, Ho aggiunto la quarta linea!" fi [win] diff --git a/levels/it_IT/remotes/problems b/levels/it_IT/remotes/problems index 068292a..764a6fc 100644 --- a/levels/it_IT/remotes/problems +++ b/levels/it_IT/remotes/problems @@ -3,7 +3,7 @@ cards = checkout add pull push commit-auto merge [description] -Entrambi, tu ed il tuo amicp, avete lavorato sullo stesso file e volete sincronizare! +Entrambi, tu ed il tuo amico, avete lavorato sullo stesso file e volete sincronizare! [setup yours] @@ -19,15 +19,15 @@ echo "Il capannone delle bici dovrebbe essere verde" > file git checkout main -echo "Il capannone delle bici dovrebbe essere blue" > file +echo "Il capannone delle bici dovrebbe essere blu" > file git commit -a -m "versione dell'amico" [win] -# Invia le tue modifiche locali. +# Fai il commit delle tue modifiche locali. test "$(git status -s)" = "" [win friend] -# Quarda il suggerimento dell'amico, fai un compromesso e rimandalo in dietro. +# Quarda il suggerimento dell'amico, trova un compromesso e rimandalo in dietro. git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)" diff --git a/resources/cards.json b/resources/cards.json index 6eac0d6..a864853 100644 --- a/resources/cards.json +++ b/resources/cards.json @@ -12,7 +12,7 @@ "command": "git clone ../[remote] .", "description": { "en_EN": "Create your own copy of someone else's repo.", - "it_IT": "Crea la copiag del Repo di qualcun'altro." + "it_IT": "Crea la tua copia personale del Repo di qualcun'altro." } }, { @@ -36,7 +36,7 @@ "command": "git checkout [commit, ref]", "description": { "en_EN": "Drag this card to a commit or to a branch to travel to it!", - "it_IT": "Sposta questa carta su un commit o su una branch per viaggiare in quello specifico momento." + "it_IT": "Trascina questa carta su un commit o su un branch per spostarti su di esso." } }, { @@ -52,7 +52,7 @@ "command": "git checkout [commit, ref] [file]", "description": { "en_EN": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.", - "it_IT": "Prendi il contenuto del file da uno specifico commits e resetta sia la directory di lavoro sia l'indice." + "it_IT": "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice." } }, { @@ -60,7 +60,7 @@ "command": "git commit -a", "description": { "en_EN": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.", - "it_IT": "Crea un nuovo commit, dopo aver aggiunto automatico tutti i cambiamenti all'indice.|n Ti verrà chiesto di inserire una piccola descrizione di cosa hai cambiato." + "it_IT": "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato." } }, { @@ -68,7 +68,7 @@ "command": "git add .; git commit", "description": { "en_EN": "Make a new commit containing your current environment! Type in a description of what changed!", - "it_IT": "Crea un nuovo commit contenente il tuo ambiente attuale! Scrivi nella descrizione di cosa hai cambiato" + "it_IT": "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!" } }, { @@ -76,7 +76,7 @@ "command": "git merge [commit, ref]", "description": { "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit.", - "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di unione." + "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge." } }, { @@ -92,15 +92,15 @@ "command": "git rebase [commit]", "description": { "en_EN": "Put the events in your current timeline on top of the specified one.", - "it_IT": "Mette l'evento nella tua, corrente, linea temporale sopra a quello specificato." - } + "it_IT": "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata." + } }, { "id": "pull", "command": "git pull", "description": { "en_EN": "Get someone else's version of the current timeline, and try to merge it into yours.", - "it_IT": "Prende la versione corrente della line temporale di qualcun'altro e prova ad unirla alla tua." + "it_IT": "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua." } }, { @@ -108,7 +108,7 @@ "command": "git fetch [remote]", "description": { "en_EN": "Get a someone else's version of the current timeline.", - "it_IT": "Prende la versione, corrente, della linea temporale di qualcun'altro" + "it_IT": "Prende la versione di qualcun'altro della temporale corrente" } }, { @@ -116,7 +116,7 @@ "command": "git push", "description": { "en_EN": "Give the current timeline to someone else.", - "it_IT": "Invia la corrente line temporale a qualcun'altro" + "it_IT": "Invia la linea temporale corrente a qualcun'altro" } }, { @@ -124,7 +124,7 @@ "command": "git rebase -i [commit]", "description": { "en_EN": "Make changes to the events in your current timeline, back to the commit you drag this to.", - "it_IT": "Apporta modifiche agli eventi nella tua timeline corrente, torna al commit su cui lo trascini " + "it_IT": "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda." } }, { @@ -132,7 +132,7 @@ "command": "git rebase --continue", "description": { "en_EN": "Continue the current rebasing process.", - "it_IT": "Continua il corrente processo di ricostruzione" + "it_IT": "Continua il processo di rebasing" } }, { @@ -140,7 +140,7 @@ "command": "git reset --hard [commit]", "description": { "en_EN": "Move the branch you're on to the specified commit.", - "it_IT": "Muove il tuo branch (ramo) nello specifico commit." + "it_IT": "Sposta il branch su cui ti trovi al commit specificato." } }, { @@ -148,7 +148,7 @@ "command": "git reset [commit]", "description": { "en_EN": "Jump to the commit, and update the index. Keep the current environment.", - "it_IT": "Salta alcommit e aggiorna l'indice. Mette l'ambiente attuale." + "it_IT": "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale." } }, { @@ -164,7 +164,7 @@ "command": "git cherry-pick [commit]", "description": { "en_EN": "Repeat the specified action on top of your current timeline.", - "it_IT": "Ripete l'azione specificata sulla corrente linea temporale" + "it_IT": "Ripete l'azione specificata, in cima alla linea temporale corrente" } }, { @@ -172,7 +172,7 @@ "command": "git revert [commit]", "description": { "en_EN": "Make a new commit that reverts the changes of the speicified commit.", - "it_IT": "Crea un nuovo commit che annula le modifiche dello specifico commit" + "it_IT": "Crea un nuovo commit che annulla le modifiche del commit specificato." } }, { @@ -188,7 +188,7 @@ "command": "git bisect good", "description": { "en_EN": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!", - "it_IT": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buone` e `cattive`!" + "it_IT": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!" } }, { @@ -204,7 +204,7 @@ "command": "git add [file]", "description": { "en_EN": "Update the index version of the file to its current real content.", - "it_IT": "Aggiorna l'indice del file con il, corrente, reale contenuto." + "it_IT": "Aggiorna la versione in indice del file con il contenuto attuale." } }, { @@ -212,7 +212,7 @@ "command": "git rm [file]", "description": { "en_EN": "Delete a file both in the working directory, as well as the index.", - "it_IT": "Cancella il file sia dalla corrente directory che dall'indice." + "it_IT": "Cancella un file sia dalla cartella di lavoro corrente che dall'indice." } }, { @@ -220,7 +220,7 @@ "command": "git commit", "description": { "en_EN": "Make a commit from the current index.", - "it_IT": "Crea un commit dal corrente indice." + "it_IT": "Crea un commit dall'indice corrente." } }, { @@ -236,7 +236,7 @@ "command": "git branch [string]", "description": { "en_EN": "Create a new branch at your current location.", - "it_IT": "Crea un nuovo branch (ramo) nella tua corrente posizione." + "it_IT": "Crea un nuovo branch alla posizione corrente." } }, { @@ -244,7 +244,7 @@ "command": "git branch -D [ref]", "description": { "en_EN": "Delete a branch.", - "it_IT": "Cancella un branch.(ramo)" + "it_IT": "Cancella un branch." } }, { @@ -252,7 +252,7 @@ "command": "git reflog [ref, head]", "description": { "en_EN": "Display a log of where the ref pointed to in the past.", - "it_IT": "Mostra un log di dove il riferimento puntava in passato" + "it_IT": "Mostra un log di dove il riferimento (ref) ha puntato in passato." } }, { From 93b2a726bb4988685c254e0c9da91628f48b523f Mon Sep 17 00:00:00 2001 From: Moreno Razzoli Date: Thu, 7 Oct 2021 11:53:41 +0200 Subject: [PATCH 24/49] refining italian translation part 2 --- levels/it_IT/changing-the-past/rebase | 4 ++-- levels/it_IT/changing-the-past/reorder | 8 ++++---- levels/it_IT/shit-happens/bad-commit | 4 ++-- levels/it_IT/shit-happens/pushed-something-broken | 8 ++++---- levels/it_IT/shit-happens/reflog | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/levels/it_IT/changing-the-past/rebase b/levels/it_IT/changing-the-past/rebase index 5de4a47..1daa1e0 100644 --- a/levels/it_IT/changing-the-past/rebase +++ b/levels/it_IT/changing-the-past/rebase @@ -3,9 +3,9 @@ cards = checkout commit-auto reset-hard rebase [description] -Okay - Viene vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro i regolamenti dell'International Time Travel Association. Dopotutto, dovrai svolgere i tuoi compiti in sequenza. +Okay - Salta vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro il regolamento dell'International Time Travel Association. Dovrai svolgere i tuoi compiti in sequenza dopotutto. -Vedi la carta "rebase"? Quando la sposti su un commit, copierà gli eventi della tua corrente linea temporale dopo quello specificato! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi. +Vedi la carta "rebase"? Quando la trascini su di un commit, copierà dopo di esso tutti gli eventi della linea temporale su cui ti trovi! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi. Nuovamente, vogliamo rendere questa la nostra realtà di base - il ramo "main" dovrebbe puntare a quella linea temporale! diff --git a/levels/it_IT/changing-the-past/reorder b/levels/it_IT/changing-the-past/reorder index 93c340c..6895f15 100644 --- a/levels/it_IT/changing-the-past/reorder +++ b/levels/it_IT/changing-the-past/reorder @@ -5,8 +5,8 @@ cards = checkout commit-auto reset-hard rebase-interactive cherry-pick Oops, guarda c'è qualcosa di incasinato qui. Puoi rimettere gli eventi nel corretto ordine? -Ci sono due modi per farlo: Puoi spostare la carta "interactive rebase" nel commit precedente a quello che vuoi cambiare, poi aprire e riordinare le linee nel file e salvarlo. -Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit nell'ordine desiderato. Hai carte per entrambe i modi! +Ci sono due modi per farlo: Puoi trascinare la carta "interactive rebase" sul commit precedente a quello che vuoi cambiare, poi riordinare le linee nel file che si apre e salvarlo. +Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit (cherry-pick) nell'ordine desiderato. Hai carte per entrambe i modi! [setup] @@ -69,9 +69,9 @@ git commit -am "Ti metti la maglia" [win] -# Riordina i commits per vestirti nel modo corretto +# Riordina i commit per vestirti nel modo corretto { git log main --oneline | perl -0777 -ne'exit(1) if not /scarpe[\s\S]*pantaloni[\s\S]*biancheria/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; } [congrats] -Sentiti libero di resettare il livello e provare l'altra strategia!Qual'è quella che preferisci? +Sentiti libero di resettare il livello e provare l'altra strategia! Qual'è quella che preferisci? diff --git a/levels/it_IT/shit-happens/bad-commit b/levels/it_IT/shit-happens/bad-commit index b859921..0febbc2 100644 --- a/levels/it_IT/shit-happens/bad-commit +++ b/levels/it_IT/shit-happens/bad-commit @@ -3,11 +3,11 @@ cards = reset commit-a [description] -Oh no, abbiamo fatto un cattivo commit! Come possiamo annualre un commit e tornare al punto per poter riprovare? +Oh no, abbiamo fatto un cattivo commit! Come possiamo annullare un commit e tornare ad un punto dove poter riprovare? La risposta è usare `git reset [commit]` che fa due cose: -- Reimposta il riferimento del ramo corrente al commit che hai specificato. +- Reimposta il riferimento (ref) del ramo corrente al commit che hai specificato. - Reimposta l'indice a quel commit. Non cambia la tua directory di lavoro in nessun modo, il che significa che dopo puoi provare a rifare il commit che desideri. diff --git a/levels/it_IT/shit-happens/pushed-something-broken b/levels/it_IT/shit-happens/pushed-something-broken index 5535bc3..7ae7cd4 100644 --- a/levels/it_IT/shit-happens/pushed-something-broken +++ b/levels/it_IT/shit-happens/pushed-something-broken @@ -1,9 +1,9 @@ -title = Ho rotto qualcosaI pushed something broken +title = Ho fatto il push di qualcosa di rotto cards = revert push [description] -Stavamo parlato di come annulare un commit e correggerlo. Questo ci aiuto solo quando non lo abbiamo già inviato al remoto. Quando succede questo e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert` +Stavamo parlato di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert` [setup] @@ -23,7 +23,7 @@ anche questo va bene ? ?" > text -git commit -am "anche bene" +git commit -am "anche questo bene" echo "questo va bene anche questo va bene @@ -48,7 +48,7 @@ git branch -u team/main main [win team] -# Il ramo principale del Team non contiene più niente di sbagliato. +# Il ramo main del Team non contiene più niente di sbagliato. ! { git show main:text | grep -q "veramente sbaglaito"; } # e la cronologia non è stata modificata. git show main^:text | grep -q "veramente sbaglaito" diff --git a/levels/it_IT/shit-happens/reflog b/levels/it_IT/shit-happens/reflog index 8e8e51a..23f7bdc 100644 --- a/levels/it_IT/shit-happens/reflog +++ b/levels/it_IT/shit-happens/reflog @@ -3,9 +3,9 @@ cards = checkout reflog [description] -Diciamo che stavi guardando qualcosa in passato e poi sei tornato al ramo principale. +Diciamo che stavi guardando qualcosa nel passato e poi sei tornato al ramo principale (main). -Ma poi ti sei distratto molto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo? +Ma poi ti sei distratto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo? C'è un comodo comando che ti mostra tutti i posti a cui la tua HEAD ha puntato in passato: From e57dfca6db266c12d5fcb842098391969980e15d Mon Sep 17 00:00:00 2001 From: Moreno Razzoli Date: Thu, 7 Oct 2021 20:48:24 +0200 Subject: [PATCH 25/49] various bugfixes --- levels/it_IT/changing-the-past/rebase | 2 +- levels/it_IT/changing-the-past/reorder | 2 +- levels/it_IT/merge/merge | 2 +- levels/it_IT/shit-happens/pushed-something-broken | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/levels/it_IT/changing-the-past/rebase b/levels/it_IT/changing-the-past/rebase index 1daa1e0..a704c80 100644 --- a/levels/it_IT/changing-the-past/rebase +++ b/levels/it_IT/changing-the-past/rebase @@ -77,7 +77,7 @@ git checkout --detach main [win] # Ordina le tre ramificazioni in una e muovi il riferimento al ramo principale -{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "Bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; } +{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; } [congrats] diff --git a/levels/it_IT/changing-the-past/reorder b/levels/it_IT/changing-the-past/reorder index 6895f15..8bbe21a 100644 --- a/levels/it_IT/changing-the-past/reorder +++ b/levels/it_IT/changing-the-past/reorder @@ -38,7 +38,7 @@ echo "Ti sei appena svegliato. Non indossi biancheria intima. -Indossi pantaloni +Indossi pantaloni. Non indossi la maglia. diff --git a/levels/it_IT/merge/merge b/levels/it_IT/merge/merge index a115cda..9050cb7 100644 --- a/levels/it_IT/merge/merge +++ b/levels/it_IT/merge/merge @@ -72,7 +72,7 @@ git branch -D main [win] # Crea una situazione dove consumi una baguette, un caffe e una ciambella. -{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*coffe"; } && { git show HEAD:you | grep "Mangi.*donut"; } +{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*caffe"; } && { git show HEAD:you | grep "Mangi.*ciambella"; } # Crea (e spostati su) un commit di unione. test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2 diff --git a/levels/it_IT/shit-happens/pushed-something-broken b/levels/it_IT/shit-happens/pushed-something-broken index 7ae7cd4..cb7f2fb 100644 --- a/levels/it_IT/shit-happens/pushed-something-broken +++ b/levels/it_IT/shit-happens/pushed-something-broken @@ -3,7 +3,7 @@ cards = revert push [description] -Stavamo parlato di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert` +Stavamo parlando di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert` [setup] @@ -15,7 +15,7 @@ echo "questo va bene ?" > text git add . -git commit -m fine +git commit -m bene echo "questo va bene anche questo va bene @@ -49,6 +49,6 @@ git branch -u team/main main [win team] # Il ramo main del Team non contiene più niente di sbagliato. -! { git show main:text | grep -q "veramente sbaglaito"; } +! { git show main:text | grep -q "veramente sbagliato"; } # e la cronologia non è stata modificata. -git show main^:text | grep -q "veramente sbaglaito" +git show main^:text | grep -q "veramente sbagliato" From d8e649d3dcf5841a20c197df395546136cb6097b Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 16 Aug 2022 08:31:42 +0200 Subject: [PATCH 26/49] Update scenes/repository.gd Co-authored-by: schokotets --- scenes/repository.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/repository.gd b/scenes/repository.gd index c2f1524..f64056f 100644 --- a/scenes/repository.gd +++ b/scenes/repository.gd @@ -89,7 +89,7 @@ func set_label(new_label): $Rows/RepoVis/SeparatorLine/DropArea.queue_free() $Rows/RepoVis/SeparatorLine.hide() else: - game.notify("INTERACT", self, "remote") + game.notify(tr("INTERACT"), self, "remote") label_node.text = new_label func random_position(): From d218658320adb78c1f4bd5d1b3f337f3c0204708 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 16 Aug 2022 08:31:49 +0200 Subject: [PATCH 27/49] Update scenes/node.gd Co-authored-by: schokotets --- scenes/node.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/node.gd b/scenes/node.gd index f810a81..716ac3d 100644 --- a/scenes/node.gd +++ b/scenes/node.gd @@ -80,7 +80,7 @@ func type_set(new_type): $Sprite.texture = preload("res://nodes/tree.svg") "commit": $Sprite.texture = preload("res://nodes/commit.svg") - game.notify("DRAG_AROUND", self, "drag-nodes") + game.notify(tr("DRAG_AROUND"), self, "drag-nodes") "tag": $Sprite.texture = preload("res://nodes/blob.svg") "ref": From 169a4974baf89965271add9ae8bd60c2f030a581 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 16 Aug 2022 08:31:55 +0200 Subject: [PATCH 28/49] Update scenes/level_select.gd Co-authored-by: schokotets --- scenes/level_select.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/level_select.gd b/scenes/level_select.gd index cdcaaf9..a0118f6 100644 --- a/scenes/level_select.gd +++ b/scenes/level_select.gd @@ -57,7 +57,7 @@ func reload(): level_list.add_child(hb) if badge.active: - game.notify("GOLDEN_BADGE", badge, "cli-badge") + game.notify(tr("GOLDEN_BADGE"), badge, "cli-badge") level_id += 1 chapter_id += 1 From 659d48a0c456df66f3edc206d26a4d575e4f94bc Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 16 Aug 2022 08:32:00 +0200 Subject: [PATCH 29/49] Update scenes/title.gd Co-authored-by: schokotets --- scenes/title.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/title.gd b/scenes/title.gd index cf99a2d..2a6a199 100644 --- a/scenes/title.gd +++ b/scenes/title.gd @@ -8,7 +8,7 @@ func _ready(): game.skipped_title = true get_tree().change_scene("res://scenes/level_select.tscn") - make_popup_item() + make_popup_items() func quit(): get_tree().quit() From 3c26150450b374f4e84bc5283cda182c4261478e Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 16 Aug 2022 08:32:06 +0200 Subject: [PATCH 30/49] Update scenes/title.gd Co-authored-by: schokotets --- scenes/title.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scenes/title.gd b/scenes/title.gd index 2a6a199..6fdbebb 100644 --- a/scenes/title.gd +++ b/scenes/title.gd @@ -40,7 +40,7 @@ func uncheck_all_item(): # Create popup items width allowed locales -func make_popup_item(): +func make_popup_items(): for i in game.langs.keys(): popup.get_popup().add_radio_check_item(game.langs[i], i) From dae7d04be0bb615b18728917dfec0113dc7a9ee4 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 16 Aug 2022 08:32:14 +0200 Subject: [PATCH 31/49] Update resources/localizations.csv Co-authored-by: schokotets --- resources/localizations.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/localizations.csv b/resources/localizations.csv index e64522b..4e082eb 100644 --- a/resources/localizations.csv +++ b/resources/localizations.csv @@ -1,5 +1,5 @@ keys,en,it -LEVELS,Livels,Livelli +LEVELS,Levels,Livelli QUIT,Quit,Esci BACK,Back,Indietro RELOAD,Reload,Ricarica From 71183f09c2f81c2aeb0b90d38360ee5b88a3925b Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 16 Aug 2022 08:32:21 +0200 Subject: [PATCH 32/49] Update README.md Co-authored-by: schokotets --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 88ba387..f1e4b5b 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ Example: Example: keys,en,it,es -LEVELS,Livels,Livelli,niveles +LEVELS,Levels,Livelli,niveles QUIT,Quit,Esci,Salir BACK,Back,Indietro,Espalda From 9042005c8b642142261a75641cb2debd308290f9 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 17 Aug 2022 20:19:42 +0200 Subject: [PATCH 33/49] improved the name of language variables and moved the languages management script in the ButtonMenu --- levels/{en_EN => en}/bisect/bisect | 0 levels/{en_EN => en}/bisect/sequence | 0 levels/{en_EN => en}/branches/branch-create | 0 levels/{en_EN => en}/branches/branch-remove | 0 levels/{en_EN => en}/branches/checkout-commit | 0 levels/{en_EN => en}/branches/fork | 0 levels/{en_EN => en}/branches/grow | 0 levels/{en_EN => en}/branches/reorder | 0 levels/{en_EN => en}/branches/sequence | 0 levels/{en_EN => en}/changing-the-past/rebase | 0 .../{en_EN => en}/changing-the-past/reorder | 0 .../{en_EN => en}/changing-the-past/sequence | 0 levels/{en_EN => en}/files/files-add | 0 levels/{en_EN => en}/files/files-delete | 0 levels/{en_EN => en}/files/sequence | 0 levels/{en_EN => en}/index/add | 0 levels/{en_EN => en}/index/change | 0 levels/{en_EN => en}/index/checkout | 0 levels/{en_EN => en}/index/compare | 0 levels/{en_EN => en}/index/new | 0 levels/{en_EN => en}/index/reset | 0 levels/{en_EN => en}/index/rm | 0 levels/{en_EN => en}/index/sequence | 0 levels/{en_EN => en}/index/steps | 0 levels/{en_EN => en}/intro/cli | 0 levels/{en_EN => en}/intro/commit | 0 levels/{en_EN => en}/intro/copies | 0 levels/{en_EN => en}/intro/init | 0 levels/{en_EN => en}/intro/remote | 0 levels/{en_EN => en}/intro/risky | 0 levels/{en_EN => en}/intro/sequence | 0 levels/{en_EN => en}/intro/who-are-you | 0 levels/{en_EN => en}/low-level/basics | 0 levels/{en_EN => en}/low-level/blob-create | 0 levels/{en_EN => en}/low-level/blob-remove | 0 levels/{en_EN => en}/low-level/commit-create | 0 levels/{en_EN => en}/low-level/commit-parents | 0 levels/{en_EN => en}/low-level/commit-rhombus | 0 levels/{en_EN => en}/low-level/index-add | 0 levels/{en_EN => en}/low-level/index-remove | 0 levels/{en_EN => en}/low-level/index-update | 0 .../{en_EN => en}/low-level/puzzle-apocalypse | 0 .../low-level/puzzle-precious-blob | 0 .../low-level/puzzle-trees-all-the-way-down | 0 levels/{en_EN => en}/low-level/ref-create | 0 levels/{en_EN => en}/low-level/ref-move | 0 levels/{en_EN => en}/low-level/ref-remove | 0 levels/{en_EN => en}/low-level/sequence | 0 levels/{en_EN => en}/low-level/symref-create | 0 .../{en_EN => en}/low-level/symref-no-deref | 0 levels/{en_EN => en}/low-level/tree-create | 0 levels/{en_EN => en}/low-level/tree-nested | 0 levels/{en_EN => en}/low-level/tree-read | 0 levels/{en_EN => en}/low-level/welcome | 0 levels/{en_EN => en}/merge/conflict | 0 levels/{en_EN => en}/merge/merge | 0 levels/{en_EN => en}/merge/merge-abort | 0 levels/{en_EN => en}/merge/sequence | 0 levels/{en_EN => en}/remotes/friend | 0 levels/{en_EN => en}/remotes/problems | 0 levels/{en_EN => en}/remotes/sequence | 0 levels/{en_EN => en}/sandbox/empty | 0 levels/{en_EN => en}/sandbox/remote | 0 levels/{en_EN => en}/sandbox/sequence | 0 levels/{en_EN => en}/sandbox/three-commits | 0 levels/{en_EN => en}/sequence | 0 levels/{en_EN => en}/shit-happens/bad-commit | 0 .../shit-happens/pushed-something-broken | 0 levels/{en_EN => en}/shit-happens/reflog | 0 .../{en_EN => en}/shit-happens/restore-a-file | 0 .../shit-happens/restore-a-file-from-the-past | 0 levels/{en_EN => en}/shit-happens/sequence | 0 levels/{en_EN => en}/stash/sequence | 0 levels/{en_EN => en}/stash/stash | 0 levels/{en_EN => en}/stash/stash-branch | 0 levels/{en_EN => en}/stash/stash-clear | 0 levels/{en_EN => en}/stash/stash-merge | 0 levels/{en_EN => en}/stash/stash-pop | 0 levels/{en_EN => en}/tags/add-tag | 0 levels/{en_EN => en}/tags/add-tag-later | 0 levels/{en_EN => en}/tags/remote-tag | 0 levels/{en_EN => en}/tags/remove-tag | 0 levels/{en_EN => en}/tags/sequence | 0 levels/{en_EN => en}/unused/checkout | 0 levels/{en_EN => en}/unused/clone | 0 levels/{en_EN => en}/unused/commit | 0 levels/{en_EN => en}/unused/commit-a | 0 levels/{en_EN => en}/unused/fetch | 0 levels/{en_EN => en}/unused/files-move | 0 levels/{en_EN => en}/unused/index-mv | 0 levels/{en_EN => en}/unused/init | 0 levels/{en_EN => en}/unused/pull-push | 0 levels/{en_EN => en}/unused/remotes-add | 0 levels/{en_EN => en}/unused/remotes-delete | 0 levels/{en_EN => en}/unused/restore | 0 levels/{en_EN => en}/unused/split | 0 levels/{en_EN => en}/unused/steps | 0 levels/{en_EN => en}/unused/who-are-you | 0 levels/{en_EN => en}/workflows/gitignore | 0 levels/{en_EN => en}/workflows/pr | 0 levels/{en_EN => en}/workflows/sequence | 0 levels/{it_IT => it}/bisect/bisect | 0 levels/{it_IT => it}/bisect/sequence | 0 levels/{it_IT => it}/branches/branch-create | 0 levels/{it_IT => it}/branches/branch-remove | 0 levels/{it_IT => it}/branches/checkout-commit | 0 levels/{it_IT => it}/branches/fork | 0 levels/{it_IT => it}/branches/grow | 0 levels/{it_IT => it}/branches/reorder | 0 levels/{it_IT => it}/branches/sequence | 0 levels/{it_IT => it}/changing-the-past/rebase | 0 .../{it_IT => it}/changing-the-past/reorder | 0 .../{it_IT => it}/changing-the-past/sequence | 0 levels/{it_IT => it}/files/files-add | 0 levels/{it_IT => it}/files/files-delete | 0 levels/{it_IT => it}/files/sequence | 0 levels/{it_IT => it}/index/#sequence# | 0 levels/{it_IT => it}/index/add | 0 levels/{it_IT => it}/index/change | 0 levels/{it_IT => it}/index/checkout | 0 levels/{it_IT => it}/index/compare | 0 levels/{it_IT => it}/index/new | 0 levels/{it_IT => it}/index/reset | 0 levels/{it_IT => it}/index/rm | 0 levels/{it_IT => it}/index/sequence | 0 levels/{it_IT => it}/index/steps | 0 levels/{it_IT => it}/intro/cli | 0 levels/{it_IT => it}/intro/commit | 0 levels/{it_IT => it}/intro/copies | 0 levels/{it_IT => it}/intro/init | 0 levels/{it_IT => it}/intro/remote | 0 levels/{it_IT => it}/intro/risky | 0 levels/{it_IT => it}/intro/sequence | 0 levels/{it_IT => it}/intro/who-are-you | 0 levels/{it_IT => it}/low-level/basics | 0 levels/{it_IT => it}/low-level/blob-create | 0 levels/{it_IT => it}/low-level/blob-remove | 0 levels/{it_IT => it}/low-level/commit-create | 0 levels/{it_IT => it}/low-level/commit-parents | 0 levels/{it_IT => it}/low-level/commit-rhombus | 0 levels/{it_IT => it}/low-level/index-add | 0 levels/{it_IT => it}/low-level/index-remove | 0 levels/{it_IT => it}/low-level/index-update | 0 .../{it_IT => it}/low-level/puzzle-apocalypse | 0 .../low-level/puzzle-precious-blob | 0 .../low-level/puzzle-trees-all-the-way-down | 0 levels/{it_IT => it}/low-level/ref-create | 0 levels/{it_IT => it}/low-level/ref-move | 0 levels/{it_IT => it}/low-level/ref-remove | 0 levels/{it_IT => it}/low-level/sequence | 0 levels/{it_IT => it}/low-level/symref-create | 0 .../{it_IT => it}/low-level/symref-no-deref | 0 levels/{it_IT => it}/low-level/tree-create | 0 levels/{it_IT => it}/low-level/tree-nested | 0 levels/{it_IT => it}/low-level/tree-read | 0 levels/{it_IT => it}/low-level/welcome | 0 levels/{it_IT => it}/merge/conflict | 0 levels/{it_IT => it}/merge/merge | 0 levels/{it_IT => it}/merge/merge-abort | 0 levels/{it_IT => it}/merge/sequence | 0 levels/{it_IT => it}/remotes/friend | 0 levels/{it_IT => it}/remotes/problems | 0 levels/{it_IT => it}/remotes/sequence | 0 levels/{it_IT => it}/sandbox/empty | 0 levels/{it_IT => it}/sandbox/remote | 0 levels/{it_IT => it}/sandbox/sequence | 0 levels/{it_IT => it}/sandbox/three-commits | 0 levels/{it_IT => it}/sequence | 0 levels/{it_IT => it}/shit-happens/bad-commit | 0 .../shit-happens/pushed-something-broken | 0 levels/{it_IT => it}/shit-happens/reflog | 0 .../{it_IT => it}/shit-happens/restore-a-file | 0 .../shit-happens/restore-a-file-from-the-past | 0 levels/{it_IT => it}/shit-happens/sequence | 0 levels/{it_IT => it}/stash/sequence | 0 levels/{it_IT => it}/stash/stash | 0 levels/{it_IT => it}/stash/stash-branch | 0 levels/{it_IT => it}/stash/stash-clear | 0 levels/{it_IT => it}/stash/stash-merge | 0 levels/{it_IT => it}/stash/stash-pop | 0 levels/{it_IT => it}/tags/add-tag | 0 levels/{it_IT => it}/tags/add-tag-later | 0 levels/{it_IT => it}/tags/remote-tag | 0 levels/{it_IT => it}/tags/remove-tag | 0 levels/{it_IT => it}/tags/sequence | 0 levels/{it_IT => it}/unused/checkout | 0 levels/{it_IT => it}/unused/clone | 0 levels/{it_IT => it}/unused/commit | 0 levels/{it_IT => it}/unused/commit-a | 0 levels/{it_IT => it}/unused/fetch | 0 levels/{it_IT => it}/unused/files-move | 0 levels/{it_IT => it}/unused/index-mv | 0 levels/{it_IT => it}/unused/init | 0 levels/{it_IT => it}/unused/pull-push | 0 levels/{it_IT => it}/unused/remotes-add | 0 levels/{it_IT => it}/unused/remotes-delete | 0 levels/{it_IT => it}/unused/restore | 0 levels/{it_IT => it}/unused/split | 0 levels/{it_IT => it}/unused/steps | 0 levels/{it_IT => it}/unused/who-are-you | 0 levels/{it_IT => it}/workflows/gitignore | 0 levels/{it_IT => it}/workflows/pr | 0 levels/{it_IT => it}/workflows/sequence | 0 project.godot | 26 +++++----- scenes/Language.gd | 34 +++++++++++++ scenes/chapter.gd | 6 +-- scenes/game.gd | 12 ++--- scenes/levels.gd | 8 ++-- scenes/title.gd | 48 +++++++++---------- scenes/title.tscn | 8 ++-- styles/theme.tres | 18 +++---- 211 files changed, 98 insertions(+), 62 deletions(-) rename levels/{en_EN => en}/bisect/bisect (100%) rename levels/{en_EN => en}/bisect/sequence (100%) rename levels/{en_EN => en}/branches/branch-create (100%) rename levels/{en_EN => en}/branches/branch-remove (100%) rename levels/{en_EN => en}/branches/checkout-commit (100%) rename levels/{en_EN => en}/branches/fork (100%) rename levels/{en_EN => en}/branches/grow (100%) rename levels/{en_EN => en}/branches/reorder (100%) rename levels/{en_EN => en}/branches/sequence (100%) rename levels/{en_EN => en}/changing-the-past/rebase (100%) rename levels/{en_EN => en}/changing-the-past/reorder (100%) rename levels/{en_EN => en}/changing-the-past/sequence (100%) rename levels/{en_EN => en}/files/files-add (100%) rename levels/{en_EN => en}/files/files-delete (100%) rename levels/{en_EN => en}/files/sequence (100%) rename levels/{en_EN => en}/index/add (100%) rename levels/{en_EN => en}/index/change (100%) rename levels/{en_EN => en}/index/checkout (100%) rename levels/{en_EN => en}/index/compare (100%) rename levels/{en_EN => en}/index/new (100%) rename levels/{en_EN => en}/index/reset (100%) rename levels/{en_EN => en}/index/rm (100%) rename levels/{en_EN => en}/index/sequence (100%) rename levels/{en_EN => en}/index/steps (100%) rename levels/{en_EN => en}/intro/cli (100%) rename levels/{en_EN => en}/intro/commit (100%) rename levels/{en_EN => en}/intro/copies (100%) rename levels/{en_EN => en}/intro/init (100%) rename levels/{en_EN => en}/intro/remote (100%) rename levels/{en_EN => en}/intro/risky (100%) rename levels/{en_EN => en}/intro/sequence (100%) rename levels/{en_EN => en}/intro/who-are-you (100%) rename levels/{en_EN => en}/low-level/basics (100%) rename levels/{en_EN => en}/low-level/blob-create (100%) rename levels/{en_EN => en}/low-level/blob-remove (100%) rename levels/{en_EN => en}/low-level/commit-create (100%) rename levels/{en_EN => en}/low-level/commit-parents (100%) rename levels/{en_EN => en}/low-level/commit-rhombus (100%) rename levels/{en_EN => en}/low-level/index-add (100%) rename levels/{en_EN => en}/low-level/index-remove (100%) rename levels/{en_EN => en}/low-level/index-update (100%) rename levels/{en_EN => en}/low-level/puzzle-apocalypse (100%) rename levels/{en_EN => en}/low-level/puzzle-precious-blob (100%) rename levels/{en_EN => en}/low-level/puzzle-trees-all-the-way-down (100%) rename levels/{en_EN => en}/low-level/ref-create (100%) rename levels/{en_EN => en}/low-level/ref-move (100%) rename levels/{en_EN => en}/low-level/ref-remove (100%) rename levels/{en_EN => en}/low-level/sequence (100%) rename levels/{en_EN => en}/low-level/symref-create (100%) rename levels/{en_EN => en}/low-level/symref-no-deref (100%) rename levels/{en_EN => en}/low-level/tree-create (100%) rename levels/{en_EN => en}/low-level/tree-nested (100%) rename levels/{en_EN => en}/low-level/tree-read (100%) rename levels/{en_EN => en}/low-level/welcome (100%) rename levels/{en_EN => en}/merge/conflict (100%) rename levels/{en_EN => en}/merge/merge (100%) rename levels/{en_EN => en}/merge/merge-abort (100%) rename levels/{en_EN => en}/merge/sequence (100%) rename levels/{en_EN => en}/remotes/friend (100%) rename levels/{en_EN => en}/remotes/problems (100%) rename levels/{en_EN => en}/remotes/sequence (100%) rename levels/{en_EN => en}/sandbox/empty (100%) rename levels/{en_EN => en}/sandbox/remote (100%) rename levels/{en_EN => en}/sandbox/sequence (100%) rename levels/{en_EN => en}/sandbox/three-commits (100%) rename levels/{en_EN => en}/sequence (100%) rename levels/{en_EN => en}/shit-happens/bad-commit (100%) rename levels/{en_EN => en}/shit-happens/pushed-something-broken (100%) rename levels/{en_EN => en}/shit-happens/reflog (100%) rename levels/{en_EN => en}/shit-happens/restore-a-file (100%) rename levels/{en_EN => en}/shit-happens/restore-a-file-from-the-past (100%) rename levels/{en_EN => en}/shit-happens/sequence (100%) rename levels/{en_EN => en}/stash/sequence (100%) rename levels/{en_EN => en}/stash/stash (100%) rename levels/{en_EN => en}/stash/stash-branch (100%) rename levels/{en_EN => en}/stash/stash-clear (100%) rename levels/{en_EN => en}/stash/stash-merge (100%) rename levels/{en_EN => en}/stash/stash-pop (100%) rename levels/{en_EN => en}/tags/add-tag (100%) rename levels/{en_EN => en}/tags/add-tag-later (100%) rename levels/{en_EN => en}/tags/remote-tag (100%) rename levels/{en_EN => en}/tags/remove-tag (100%) rename levels/{en_EN => en}/tags/sequence (100%) rename levels/{en_EN => en}/unused/checkout (100%) rename levels/{en_EN => en}/unused/clone (100%) rename levels/{en_EN => en}/unused/commit (100%) rename levels/{en_EN => en}/unused/commit-a (100%) rename levels/{en_EN => en}/unused/fetch (100%) rename levels/{en_EN => en}/unused/files-move (100%) rename levels/{en_EN => en}/unused/index-mv (100%) rename levels/{en_EN => en}/unused/init (100%) rename levels/{en_EN => en}/unused/pull-push (100%) rename levels/{en_EN => en}/unused/remotes-add (100%) rename levels/{en_EN => en}/unused/remotes-delete (100%) rename levels/{en_EN => en}/unused/restore (100%) rename levels/{en_EN => en}/unused/split (100%) rename levels/{en_EN => en}/unused/steps (100%) rename levels/{en_EN => en}/unused/who-are-you (100%) rename levels/{en_EN => en}/workflows/gitignore (100%) rename levels/{en_EN => en}/workflows/pr (100%) rename levels/{en_EN => en}/workflows/sequence (100%) rename levels/{it_IT => it}/bisect/bisect (100%) rename levels/{it_IT => it}/bisect/sequence (100%) rename levels/{it_IT => it}/branches/branch-create (100%) rename levels/{it_IT => it}/branches/branch-remove (100%) rename levels/{it_IT => it}/branches/checkout-commit (100%) rename levels/{it_IT => it}/branches/fork (100%) rename levels/{it_IT => it}/branches/grow (100%) rename levels/{it_IT => it}/branches/reorder (100%) rename levels/{it_IT => it}/branches/sequence (100%) rename levels/{it_IT => it}/changing-the-past/rebase (100%) rename levels/{it_IT => it}/changing-the-past/reorder (100%) rename levels/{it_IT => it}/changing-the-past/sequence (100%) rename levels/{it_IT => it}/files/files-add (100%) rename levels/{it_IT => it}/files/files-delete (100%) rename levels/{it_IT => it}/files/sequence (100%) rename levels/{it_IT => it}/index/#sequence# (100%) rename levels/{it_IT => it}/index/add (100%) rename levels/{it_IT => it}/index/change (100%) rename levels/{it_IT => it}/index/checkout (100%) rename levels/{it_IT => it}/index/compare (100%) rename levels/{it_IT => it}/index/new (100%) rename levels/{it_IT => it}/index/reset (100%) rename levels/{it_IT => it}/index/rm (100%) rename levels/{it_IT => it}/index/sequence (100%) rename levels/{it_IT => it}/index/steps (100%) rename levels/{it_IT => it}/intro/cli (100%) rename levels/{it_IT => it}/intro/commit (100%) rename levels/{it_IT => it}/intro/copies (100%) rename levels/{it_IT => it}/intro/init (100%) rename levels/{it_IT => it}/intro/remote (100%) rename levels/{it_IT => it}/intro/risky (100%) rename levels/{it_IT => it}/intro/sequence (100%) rename levels/{it_IT => it}/intro/who-are-you (100%) rename levels/{it_IT => it}/low-level/basics (100%) rename levels/{it_IT => it}/low-level/blob-create (100%) rename levels/{it_IT => it}/low-level/blob-remove (100%) rename levels/{it_IT => it}/low-level/commit-create (100%) rename levels/{it_IT => it}/low-level/commit-parents (100%) rename levels/{it_IT => it}/low-level/commit-rhombus (100%) rename levels/{it_IT => it}/low-level/index-add (100%) rename levels/{it_IT => it}/low-level/index-remove (100%) rename levels/{it_IT => it}/low-level/index-update (100%) rename levels/{it_IT => it}/low-level/puzzle-apocalypse (100%) rename levels/{it_IT => it}/low-level/puzzle-precious-blob (100%) rename levels/{it_IT => it}/low-level/puzzle-trees-all-the-way-down (100%) rename levels/{it_IT => it}/low-level/ref-create (100%) rename levels/{it_IT => it}/low-level/ref-move (100%) rename levels/{it_IT => it}/low-level/ref-remove (100%) rename levels/{it_IT => it}/low-level/sequence (100%) rename levels/{it_IT => it}/low-level/symref-create (100%) rename levels/{it_IT => it}/low-level/symref-no-deref (100%) rename levels/{it_IT => it}/low-level/tree-create (100%) rename levels/{it_IT => it}/low-level/tree-nested (100%) rename levels/{it_IT => it}/low-level/tree-read (100%) rename levels/{it_IT => it}/low-level/welcome (100%) rename levels/{it_IT => it}/merge/conflict (100%) rename levels/{it_IT => it}/merge/merge (100%) rename levels/{it_IT => it}/merge/merge-abort (100%) rename levels/{it_IT => it}/merge/sequence (100%) rename levels/{it_IT => it}/remotes/friend (100%) rename levels/{it_IT => it}/remotes/problems (100%) rename levels/{it_IT => it}/remotes/sequence (100%) rename levels/{it_IT => it}/sandbox/empty (100%) rename levels/{it_IT => it}/sandbox/remote (100%) rename levels/{it_IT => it}/sandbox/sequence (100%) rename levels/{it_IT => it}/sandbox/three-commits (100%) rename levels/{it_IT => it}/sequence (100%) rename levels/{it_IT => it}/shit-happens/bad-commit (100%) rename levels/{it_IT => it}/shit-happens/pushed-something-broken (100%) rename levels/{it_IT => it}/shit-happens/reflog (100%) rename levels/{it_IT => it}/shit-happens/restore-a-file (100%) rename levels/{it_IT => it}/shit-happens/restore-a-file-from-the-past (100%) rename levels/{it_IT => it}/shit-happens/sequence (100%) rename levels/{it_IT => it}/stash/sequence (100%) rename levels/{it_IT => it}/stash/stash (100%) rename levels/{it_IT => it}/stash/stash-branch (100%) rename levels/{it_IT => it}/stash/stash-clear (100%) rename levels/{it_IT => it}/stash/stash-merge (100%) rename levels/{it_IT => it}/stash/stash-pop (100%) rename levels/{it_IT => it}/tags/add-tag (100%) rename levels/{it_IT => it}/tags/add-tag-later (100%) rename levels/{it_IT => it}/tags/remote-tag (100%) rename levels/{it_IT => it}/tags/remove-tag (100%) rename levels/{it_IT => it}/tags/sequence (100%) rename levels/{it_IT => it}/unused/checkout (100%) rename levels/{it_IT => it}/unused/clone (100%) rename levels/{it_IT => it}/unused/commit (100%) rename levels/{it_IT => it}/unused/commit-a (100%) rename levels/{it_IT => it}/unused/fetch (100%) rename levels/{it_IT => it}/unused/files-move (100%) rename levels/{it_IT => it}/unused/index-mv (100%) rename levels/{it_IT => it}/unused/init (100%) rename levels/{it_IT => it}/unused/pull-push (100%) rename levels/{it_IT => it}/unused/remotes-add (100%) rename levels/{it_IT => it}/unused/remotes-delete (100%) rename levels/{it_IT => it}/unused/restore (100%) rename levels/{it_IT => it}/unused/split (100%) rename levels/{it_IT => it}/unused/steps (100%) rename levels/{it_IT => it}/unused/who-are-you (100%) rename levels/{it_IT => it}/workflows/gitignore (100%) rename levels/{it_IT => it}/workflows/pr (100%) rename levels/{it_IT => it}/workflows/sequence (100%) create mode 100644 scenes/Language.gd diff --git a/levels/en_EN/bisect/bisect b/levels/en/bisect/bisect similarity index 100% rename from levels/en_EN/bisect/bisect rename to levels/en/bisect/bisect diff --git a/levels/en_EN/bisect/sequence b/levels/en/bisect/sequence similarity index 100% rename from levels/en_EN/bisect/sequence rename to levels/en/bisect/sequence diff --git a/levels/en_EN/branches/branch-create b/levels/en/branches/branch-create similarity index 100% rename from levels/en_EN/branches/branch-create rename to levels/en/branches/branch-create diff --git a/levels/en_EN/branches/branch-remove b/levels/en/branches/branch-remove similarity index 100% rename from levels/en_EN/branches/branch-remove rename to levels/en/branches/branch-remove diff --git a/levels/en_EN/branches/checkout-commit b/levels/en/branches/checkout-commit similarity index 100% rename from levels/en_EN/branches/checkout-commit rename to levels/en/branches/checkout-commit diff --git a/levels/en_EN/branches/fork b/levels/en/branches/fork similarity index 100% rename from levels/en_EN/branches/fork rename to levels/en/branches/fork diff --git a/levels/en_EN/branches/grow b/levels/en/branches/grow similarity index 100% rename from levels/en_EN/branches/grow rename to levels/en/branches/grow diff --git a/levels/en_EN/branches/reorder b/levels/en/branches/reorder similarity index 100% rename from levels/en_EN/branches/reorder rename to levels/en/branches/reorder diff --git a/levels/en_EN/branches/sequence b/levels/en/branches/sequence similarity index 100% rename from levels/en_EN/branches/sequence rename to levels/en/branches/sequence diff --git a/levels/en_EN/changing-the-past/rebase b/levels/en/changing-the-past/rebase similarity index 100% rename from levels/en_EN/changing-the-past/rebase rename to levels/en/changing-the-past/rebase diff --git a/levels/en_EN/changing-the-past/reorder b/levels/en/changing-the-past/reorder similarity index 100% rename from levels/en_EN/changing-the-past/reorder rename to levels/en/changing-the-past/reorder diff --git a/levels/en_EN/changing-the-past/sequence b/levels/en/changing-the-past/sequence similarity index 100% rename from levels/en_EN/changing-the-past/sequence rename to levels/en/changing-the-past/sequence diff --git a/levels/en_EN/files/files-add b/levels/en/files/files-add similarity index 100% rename from levels/en_EN/files/files-add rename to levels/en/files/files-add diff --git a/levels/en_EN/files/files-delete b/levels/en/files/files-delete similarity index 100% rename from levels/en_EN/files/files-delete rename to levels/en/files/files-delete diff --git a/levels/en_EN/files/sequence b/levels/en/files/sequence similarity index 100% rename from levels/en_EN/files/sequence rename to levels/en/files/sequence diff --git a/levels/en_EN/index/add b/levels/en/index/add similarity index 100% rename from levels/en_EN/index/add rename to levels/en/index/add diff --git a/levels/en_EN/index/change b/levels/en/index/change similarity index 100% rename from levels/en_EN/index/change rename to levels/en/index/change diff --git a/levels/en_EN/index/checkout b/levels/en/index/checkout similarity index 100% rename from levels/en_EN/index/checkout rename to levels/en/index/checkout diff --git a/levels/en_EN/index/compare b/levels/en/index/compare similarity index 100% rename from levels/en_EN/index/compare rename to levels/en/index/compare diff --git a/levels/en_EN/index/new b/levels/en/index/new similarity index 100% rename from levels/en_EN/index/new rename to levels/en/index/new diff --git a/levels/en_EN/index/reset b/levels/en/index/reset similarity index 100% rename from levels/en_EN/index/reset rename to levels/en/index/reset diff --git a/levels/en_EN/index/rm b/levels/en/index/rm similarity index 100% rename from levels/en_EN/index/rm rename to levels/en/index/rm diff --git a/levels/en_EN/index/sequence b/levels/en/index/sequence similarity index 100% rename from levels/en_EN/index/sequence rename to levels/en/index/sequence diff --git a/levels/en_EN/index/steps b/levels/en/index/steps similarity index 100% rename from levels/en_EN/index/steps rename to levels/en/index/steps diff --git a/levels/en_EN/intro/cli b/levels/en/intro/cli similarity index 100% rename from levels/en_EN/intro/cli rename to levels/en/intro/cli diff --git a/levels/en_EN/intro/commit b/levels/en/intro/commit similarity index 100% rename from levels/en_EN/intro/commit rename to levels/en/intro/commit diff --git a/levels/en_EN/intro/copies b/levels/en/intro/copies similarity index 100% rename from levels/en_EN/intro/copies rename to levels/en/intro/copies diff --git a/levels/en_EN/intro/init b/levels/en/intro/init similarity index 100% rename from levels/en_EN/intro/init rename to levels/en/intro/init diff --git a/levels/en_EN/intro/remote b/levels/en/intro/remote similarity index 100% rename from levels/en_EN/intro/remote rename to levels/en/intro/remote diff --git a/levels/en_EN/intro/risky b/levels/en/intro/risky similarity index 100% rename from levels/en_EN/intro/risky rename to levels/en/intro/risky diff --git a/levels/en_EN/intro/sequence b/levels/en/intro/sequence similarity index 100% rename from levels/en_EN/intro/sequence rename to levels/en/intro/sequence diff --git a/levels/en_EN/intro/who-are-you b/levels/en/intro/who-are-you similarity index 100% rename from levels/en_EN/intro/who-are-you rename to levels/en/intro/who-are-you diff --git a/levels/en_EN/low-level/basics b/levels/en/low-level/basics similarity index 100% rename from levels/en_EN/low-level/basics rename to levels/en/low-level/basics diff --git a/levels/en_EN/low-level/blob-create b/levels/en/low-level/blob-create similarity index 100% rename from levels/en_EN/low-level/blob-create rename to levels/en/low-level/blob-create diff --git a/levels/en_EN/low-level/blob-remove b/levels/en/low-level/blob-remove similarity index 100% rename from levels/en_EN/low-level/blob-remove rename to levels/en/low-level/blob-remove diff --git a/levels/en_EN/low-level/commit-create b/levels/en/low-level/commit-create similarity index 100% rename from levels/en_EN/low-level/commit-create rename to levels/en/low-level/commit-create diff --git a/levels/en_EN/low-level/commit-parents b/levels/en/low-level/commit-parents similarity index 100% rename from levels/en_EN/low-level/commit-parents rename to levels/en/low-level/commit-parents diff --git a/levels/en_EN/low-level/commit-rhombus b/levels/en/low-level/commit-rhombus similarity index 100% rename from levels/en_EN/low-level/commit-rhombus rename to levels/en/low-level/commit-rhombus diff --git a/levels/en_EN/low-level/index-add b/levels/en/low-level/index-add similarity index 100% rename from levels/en_EN/low-level/index-add rename to levels/en/low-level/index-add diff --git a/levels/en_EN/low-level/index-remove b/levels/en/low-level/index-remove similarity index 100% rename from levels/en_EN/low-level/index-remove rename to levels/en/low-level/index-remove diff --git a/levels/en_EN/low-level/index-update b/levels/en/low-level/index-update similarity index 100% rename from levels/en_EN/low-level/index-update rename to levels/en/low-level/index-update diff --git a/levels/en_EN/low-level/puzzle-apocalypse b/levels/en/low-level/puzzle-apocalypse similarity index 100% rename from levels/en_EN/low-level/puzzle-apocalypse rename to levels/en/low-level/puzzle-apocalypse diff --git a/levels/en_EN/low-level/puzzle-precious-blob b/levels/en/low-level/puzzle-precious-blob similarity index 100% rename from levels/en_EN/low-level/puzzle-precious-blob rename to levels/en/low-level/puzzle-precious-blob diff --git a/levels/en_EN/low-level/puzzle-trees-all-the-way-down b/levels/en/low-level/puzzle-trees-all-the-way-down similarity index 100% rename from levels/en_EN/low-level/puzzle-trees-all-the-way-down rename to levels/en/low-level/puzzle-trees-all-the-way-down diff --git a/levels/en_EN/low-level/ref-create b/levels/en/low-level/ref-create similarity index 100% rename from levels/en_EN/low-level/ref-create rename to levels/en/low-level/ref-create diff --git a/levels/en_EN/low-level/ref-move b/levels/en/low-level/ref-move similarity index 100% rename from levels/en_EN/low-level/ref-move rename to levels/en/low-level/ref-move diff --git a/levels/en_EN/low-level/ref-remove b/levels/en/low-level/ref-remove similarity index 100% rename from levels/en_EN/low-level/ref-remove rename to levels/en/low-level/ref-remove diff --git a/levels/en_EN/low-level/sequence b/levels/en/low-level/sequence similarity index 100% rename from levels/en_EN/low-level/sequence rename to levels/en/low-level/sequence diff --git a/levels/en_EN/low-level/symref-create b/levels/en/low-level/symref-create similarity index 100% rename from levels/en_EN/low-level/symref-create rename to levels/en/low-level/symref-create diff --git a/levels/en_EN/low-level/symref-no-deref b/levels/en/low-level/symref-no-deref similarity index 100% rename from levels/en_EN/low-level/symref-no-deref rename to levels/en/low-level/symref-no-deref diff --git a/levels/en_EN/low-level/tree-create b/levels/en/low-level/tree-create similarity index 100% rename from levels/en_EN/low-level/tree-create rename to levels/en/low-level/tree-create diff --git a/levels/en_EN/low-level/tree-nested b/levels/en/low-level/tree-nested similarity index 100% rename from levels/en_EN/low-level/tree-nested rename to levels/en/low-level/tree-nested diff --git a/levels/en_EN/low-level/tree-read b/levels/en/low-level/tree-read similarity index 100% rename from levels/en_EN/low-level/tree-read rename to levels/en/low-level/tree-read diff --git a/levels/en_EN/low-level/welcome b/levels/en/low-level/welcome similarity index 100% rename from levels/en_EN/low-level/welcome rename to levels/en/low-level/welcome diff --git a/levels/en_EN/merge/conflict b/levels/en/merge/conflict similarity index 100% rename from levels/en_EN/merge/conflict rename to levels/en/merge/conflict diff --git a/levels/en_EN/merge/merge b/levels/en/merge/merge similarity index 100% rename from levels/en_EN/merge/merge rename to levels/en/merge/merge diff --git a/levels/en_EN/merge/merge-abort b/levels/en/merge/merge-abort similarity index 100% rename from levels/en_EN/merge/merge-abort rename to levels/en/merge/merge-abort diff --git a/levels/en_EN/merge/sequence b/levels/en/merge/sequence similarity index 100% rename from levels/en_EN/merge/sequence rename to levels/en/merge/sequence diff --git a/levels/en_EN/remotes/friend b/levels/en/remotes/friend similarity index 100% rename from levels/en_EN/remotes/friend rename to levels/en/remotes/friend diff --git a/levels/en_EN/remotes/problems b/levels/en/remotes/problems similarity index 100% rename from levels/en_EN/remotes/problems rename to levels/en/remotes/problems diff --git a/levels/en_EN/remotes/sequence b/levels/en/remotes/sequence similarity index 100% rename from levels/en_EN/remotes/sequence rename to levels/en/remotes/sequence diff --git a/levels/en_EN/sandbox/empty b/levels/en/sandbox/empty similarity index 100% rename from levels/en_EN/sandbox/empty rename to levels/en/sandbox/empty diff --git a/levels/en_EN/sandbox/remote b/levels/en/sandbox/remote similarity index 100% rename from levels/en_EN/sandbox/remote rename to levels/en/sandbox/remote diff --git a/levels/en_EN/sandbox/sequence b/levels/en/sandbox/sequence similarity index 100% rename from levels/en_EN/sandbox/sequence rename to levels/en/sandbox/sequence diff --git a/levels/en_EN/sandbox/three-commits b/levels/en/sandbox/three-commits similarity index 100% rename from levels/en_EN/sandbox/three-commits rename to levels/en/sandbox/three-commits diff --git a/levels/en_EN/sequence b/levels/en/sequence similarity index 100% rename from levels/en_EN/sequence rename to levels/en/sequence diff --git a/levels/en_EN/shit-happens/bad-commit b/levels/en/shit-happens/bad-commit similarity index 100% rename from levels/en_EN/shit-happens/bad-commit rename to levels/en/shit-happens/bad-commit diff --git a/levels/en_EN/shit-happens/pushed-something-broken b/levels/en/shit-happens/pushed-something-broken similarity index 100% rename from levels/en_EN/shit-happens/pushed-something-broken rename to levels/en/shit-happens/pushed-something-broken diff --git a/levels/en_EN/shit-happens/reflog b/levels/en/shit-happens/reflog similarity index 100% rename from levels/en_EN/shit-happens/reflog rename to levels/en/shit-happens/reflog diff --git a/levels/en_EN/shit-happens/restore-a-file b/levels/en/shit-happens/restore-a-file similarity index 100% rename from levels/en_EN/shit-happens/restore-a-file rename to levels/en/shit-happens/restore-a-file diff --git a/levels/en_EN/shit-happens/restore-a-file-from-the-past b/levels/en/shit-happens/restore-a-file-from-the-past similarity index 100% rename from levels/en_EN/shit-happens/restore-a-file-from-the-past rename to levels/en/shit-happens/restore-a-file-from-the-past diff --git a/levels/en_EN/shit-happens/sequence b/levels/en/shit-happens/sequence similarity index 100% rename from levels/en_EN/shit-happens/sequence rename to levels/en/shit-happens/sequence diff --git a/levels/en_EN/stash/sequence b/levels/en/stash/sequence similarity index 100% rename from levels/en_EN/stash/sequence rename to levels/en/stash/sequence diff --git a/levels/en_EN/stash/stash b/levels/en/stash/stash similarity index 100% rename from levels/en_EN/stash/stash rename to levels/en/stash/stash diff --git a/levels/en_EN/stash/stash-branch b/levels/en/stash/stash-branch similarity index 100% rename from levels/en_EN/stash/stash-branch rename to levels/en/stash/stash-branch diff --git a/levels/en_EN/stash/stash-clear b/levels/en/stash/stash-clear similarity index 100% rename from levels/en_EN/stash/stash-clear rename to levels/en/stash/stash-clear diff --git a/levels/en_EN/stash/stash-merge b/levels/en/stash/stash-merge similarity index 100% rename from levels/en_EN/stash/stash-merge rename to levels/en/stash/stash-merge diff --git a/levels/en_EN/stash/stash-pop b/levels/en/stash/stash-pop similarity index 100% rename from levels/en_EN/stash/stash-pop rename to levels/en/stash/stash-pop diff --git a/levels/en_EN/tags/add-tag b/levels/en/tags/add-tag similarity index 100% rename from levels/en_EN/tags/add-tag rename to levels/en/tags/add-tag diff --git a/levels/en_EN/tags/add-tag-later b/levels/en/tags/add-tag-later similarity index 100% rename from levels/en_EN/tags/add-tag-later rename to levels/en/tags/add-tag-later diff --git a/levels/en_EN/tags/remote-tag b/levels/en/tags/remote-tag similarity index 100% rename from levels/en_EN/tags/remote-tag rename to levels/en/tags/remote-tag diff --git a/levels/en_EN/tags/remove-tag b/levels/en/tags/remove-tag similarity index 100% rename from levels/en_EN/tags/remove-tag rename to levels/en/tags/remove-tag diff --git a/levels/en_EN/tags/sequence b/levels/en/tags/sequence similarity index 100% rename from levels/en_EN/tags/sequence rename to levels/en/tags/sequence diff --git a/levels/en_EN/unused/checkout b/levels/en/unused/checkout similarity index 100% rename from levels/en_EN/unused/checkout rename to levels/en/unused/checkout diff --git a/levels/en_EN/unused/clone b/levels/en/unused/clone similarity index 100% rename from levels/en_EN/unused/clone rename to levels/en/unused/clone diff --git a/levels/en_EN/unused/commit b/levels/en/unused/commit similarity index 100% rename from levels/en_EN/unused/commit rename to levels/en/unused/commit diff --git a/levels/en_EN/unused/commit-a b/levels/en/unused/commit-a similarity index 100% rename from levels/en_EN/unused/commit-a rename to levels/en/unused/commit-a diff --git a/levels/en_EN/unused/fetch b/levels/en/unused/fetch similarity index 100% rename from levels/en_EN/unused/fetch rename to levels/en/unused/fetch diff --git a/levels/en_EN/unused/files-move b/levels/en/unused/files-move similarity index 100% rename from levels/en_EN/unused/files-move rename to levels/en/unused/files-move diff --git a/levels/en_EN/unused/index-mv b/levels/en/unused/index-mv similarity index 100% rename from levels/en_EN/unused/index-mv rename to levels/en/unused/index-mv diff --git a/levels/en_EN/unused/init b/levels/en/unused/init similarity index 100% rename from levels/en_EN/unused/init rename to levels/en/unused/init diff --git a/levels/en_EN/unused/pull-push b/levels/en/unused/pull-push similarity index 100% rename from levels/en_EN/unused/pull-push rename to levels/en/unused/pull-push diff --git a/levels/en_EN/unused/remotes-add b/levels/en/unused/remotes-add similarity index 100% rename from levels/en_EN/unused/remotes-add rename to levels/en/unused/remotes-add diff --git a/levels/en_EN/unused/remotes-delete b/levels/en/unused/remotes-delete similarity index 100% rename from levels/en_EN/unused/remotes-delete rename to levels/en/unused/remotes-delete diff --git a/levels/en_EN/unused/restore b/levels/en/unused/restore similarity index 100% rename from levels/en_EN/unused/restore rename to levels/en/unused/restore diff --git a/levels/en_EN/unused/split b/levels/en/unused/split similarity index 100% rename from levels/en_EN/unused/split rename to levels/en/unused/split diff --git a/levels/en_EN/unused/steps b/levels/en/unused/steps similarity index 100% rename from levels/en_EN/unused/steps rename to levels/en/unused/steps diff --git a/levels/en_EN/unused/who-are-you b/levels/en/unused/who-are-you similarity index 100% rename from levels/en_EN/unused/who-are-you rename to levels/en/unused/who-are-you diff --git a/levels/en_EN/workflows/gitignore b/levels/en/workflows/gitignore similarity index 100% rename from levels/en_EN/workflows/gitignore rename to levels/en/workflows/gitignore diff --git a/levels/en_EN/workflows/pr b/levels/en/workflows/pr similarity index 100% rename from levels/en_EN/workflows/pr rename to levels/en/workflows/pr diff --git a/levels/en_EN/workflows/sequence b/levels/en/workflows/sequence similarity index 100% rename from levels/en_EN/workflows/sequence rename to levels/en/workflows/sequence diff --git a/levels/it_IT/bisect/bisect b/levels/it/bisect/bisect similarity index 100% rename from levels/it_IT/bisect/bisect rename to levels/it/bisect/bisect diff --git a/levels/it_IT/bisect/sequence b/levels/it/bisect/sequence similarity index 100% rename from levels/it_IT/bisect/sequence rename to levels/it/bisect/sequence diff --git a/levels/it_IT/branches/branch-create b/levels/it/branches/branch-create similarity index 100% rename from levels/it_IT/branches/branch-create rename to levels/it/branches/branch-create diff --git a/levels/it_IT/branches/branch-remove b/levels/it/branches/branch-remove similarity index 100% rename from levels/it_IT/branches/branch-remove rename to levels/it/branches/branch-remove diff --git a/levels/it_IT/branches/checkout-commit b/levels/it/branches/checkout-commit similarity index 100% rename from levels/it_IT/branches/checkout-commit rename to levels/it/branches/checkout-commit diff --git a/levels/it_IT/branches/fork b/levels/it/branches/fork similarity index 100% rename from levels/it_IT/branches/fork rename to levels/it/branches/fork diff --git a/levels/it_IT/branches/grow b/levels/it/branches/grow similarity index 100% rename from levels/it_IT/branches/grow rename to levels/it/branches/grow diff --git a/levels/it_IT/branches/reorder b/levels/it/branches/reorder similarity index 100% rename from levels/it_IT/branches/reorder rename to levels/it/branches/reorder diff --git a/levels/it_IT/branches/sequence b/levels/it/branches/sequence similarity index 100% rename from levels/it_IT/branches/sequence rename to levels/it/branches/sequence diff --git a/levels/it_IT/changing-the-past/rebase b/levels/it/changing-the-past/rebase similarity index 100% rename from levels/it_IT/changing-the-past/rebase rename to levels/it/changing-the-past/rebase diff --git a/levels/it_IT/changing-the-past/reorder b/levels/it/changing-the-past/reorder similarity index 100% rename from levels/it_IT/changing-the-past/reorder rename to levels/it/changing-the-past/reorder diff --git a/levels/it_IT/changing-the-past/sequence b/levels/it/changing-the-past/sequence similarity index 100% rename from levels/it_IT/changing-the-past/sequence rename to levels/it/changing-the-past/sequence diff --git a/levels/it_IT/files/files-add b/levels/it/files/files-add similarity index 100% rename from levels/it_IT/files/files-add rename to levels/it/files/files-add diff --git a/levels/it_IT/files/files-delete b/levels/it/files/files-delete similarity index 100% rename from levels/it_IT/files/files-delete rename to levels/it/files/files-delete diff --git a/levels/it_IT/files/sequence b/levels/it/files/sequence similarity index 100% rename from levels/it_IT/files/sequence rename to levels/it/files/sequence diff --git a/levels/it_IT/index/#sequence# b/levels/it/index/#sequence# similarity index 100% rename from levels/it_IT/index/#sequence# rename to levels/it/index/#sequence# diff --git a/levels/it_IT/index/add b/levels/it/index/add similarity index 100% rename from levels/it_IT/index/add rename to levels/it/index/add diff --git a/levels/it_IT/index/change b/levels/it/index/change similarity index 100% rename from levels/it_IT/index/change rename to levels/it/index/change diff --git a/levels/it_IT/index/checkout b/levels/it/index/checkout similarity index 100% rename from levels/it_IT/index/checkout rename to levels/it/index/checkout diff --git a/levels/it_IT/index/compare b/levels/it/index/compare similarity index 100% rename from levels/it_IT/index/compare rename to levels/it/index/compare diff --git a/levels/it_IT/index/new b/levels/it/index/new similarity index 100% rename from levels/it_IT/index/new rename to levels/it/index/new diff --git a/levels/it_IT/index/reset b/levels/it/index/reset similarity index 100% rename from levels/it_IT/index/reset rename to levels/it/index/reset diff --git a/levels/it_IT/index/rm b/levels/it/index/rm similarity index 100% rename from levels/it_IT/index/rm rename to levels/it/index/rm diff --git a/levels/it_IT/index/sequence b/levels/it/index/sequence similarity index 100% rename from levels/it_IT/index/sequence rename to levels/it/index/sequence diff --git a/levels/it_IT/index/steps b/levels/it/index/steps similarity index 100% rename from levels/it_IT/index/steps rename to levels/it/index/steps diff --git a/levels/it_IT/intro/cli b/levels/it/intro/cli similarity index 100% rename from levels/it_IT/intro/cli rename to levels/it/intro/cli diff --git a/levels/it_IT/intro/commit b/levels/it/intro/commit similarity index 100% rename from levels/it_IT/intro/commit rename to levels/it/intro/commit diff --git a/levels/it_IT/intro/copies b/levels/it/intro/copies similarity index 100% rename from levels/it_IT/intro/copies rename to levels/it/intro/copies diff --git a/levels/it_IT/intro/init b/levels/it/intro/init similarity index 100% rename from levels/it_IT/intro/init rename to levels/it/intro/init diff --git a/levels/it_IT/intro/remote b/levels/it/intro/remote similarity index 100% rename from levels/it_IT/intro/remote rename to levels/it/intro/remote diff --git a/levels/it_IT/intro/risky b/levels/it/intro/risky similarity index 100% rename from levels/it_IT/intro/risky rename to levels/it/intro/risky diff --git a/levels/it_IT/intro/sequence b/levels/it/intro/sequence similarity index 100% rename from levels/it_IT/intro/sequence rename to levels/it/intro/sequence diff --git a/levels/it_IT/intro/who-are-you b/levels/it/intro/who-are-you similarity index 100% rename from levels/it_IT/intro/who-are-you rename to levels/it/intro/who-are-you diff --git a/levels/it_IT/low-level/basics b/levels/it/low-level/basics similarity index 100% rename from levels/it_IT/low-level/basics rename to levels/it/low-level/basics diff --git a/levels/it_IT/low-level/blob-create b/levels/it/low-level/blob-create similarity index 100% rename from levels/it_IT/low-level/blob-create rename to levels/it/low-level/blob-create diff --git a/levels/it_IT/low-level/blob-remove b/levels/it/low-level/blob-remove similarity index 100% rename from levels/it_IT/low-level/blob-remove rename to levels/it/low-level/blob-remove diff --git a/levels/it_IT/low-level/commit-create b/levels/it/low-level/commit-create similarity index 100% rename from levels/it_IT/low-level/commit-create rename to levels/it/low-level/commit-create diff --git a/levels/it_IT/low-level/commit-parents b/levels/it/low-level/commit-parents similarity index 100% rename from levels/it_IT/low-level/commit-parents rename to levels/it/low-level/commit-parents diff --git a/levels/it_IT/low-level/commit-rhombus b/levels/it/low-level/commit-rhombus similarity index 100% rename from levels/it_IT/low-level/commit-rhombus rename to levels/it/low-level/commit-rhombus diff --git a/levels/it_IT/low-level/index-add b/levels/it/low-level/index-add similarity index 100% rename from levels/it_IT/low-level/index-add rename to levels/it/low-level/index-add diff --git a/levels/it_IT/low-level/index-remove b/levels/it/low-level/index-remove similarity index 100% rename from levels/it_IT/low-level/index-remove rename to levels/it/low-level/index-remove diff --git a/levels/it_IT/low-level/index-update b/levels/it/low-level/index-update similarity index 100% rename from levels/it_IT/low-level/index-update rename to levels/it/low-level/index-update diff --git a/levels/it_IT/low-level/puzzle-apocalypse b/levels/it/low-level/puzzle-apocalypse similarity index 100% rename from levels/it_IT/low-level/puzzle-apocalypse rename to levels/it/low-level/puzzle-apocalypse diff --git a/levels/it_IT/low-level/puzzle-precious-blob b/levels/it/low-level/puzzle-precious-blob similarity index 100% rename from levels/it_IT/low-level/puzzle-precious-blob rename to levels/it/low-level/puzzle-precious-blob diff --git a/levels/it_IT/low-level/puzzle-trees-all-the-way-down b/levels/it/low-level/puzzle-trees-all-the-way-down similarity index 100% rename from levels/it_IT/low-level/puzzle-trees-all-the-way-down rename to levels/it/low-level/puzzle-trees-all-the-way-down diff --git a/levels/it_IT/low-level/ref-create b/levels/it/low-level/ref-create similarity index 100% rename from levels/it_IT/low-level/ref-create rename to levels/it/low-level/ref-create diff --git a/levels/it_IT/low-level/ref-move b/levels/it/low-level/ref-move similarity index 100% rename from levels/it_IT/low-level/ref-move rename to levels/it/low-level/ref-move diff --git a/levels/it_IT/low-level/ref-remove b/levels/it/low-level/ref-remove similarity index 100% rename from levels/it_IT/low-level/ref-remove rename to levels/it/low-level/ref-remove diff --git a/levels/it_IT/low-level/sequence b/levels/it/low-level/sequence similarity index 100% rename from levels/it_IT/low-level/sequence rename to levels/it/low-level/sequence diff --git a/levels/it_IT/low-level/symref-create b/levels/it/low-level/symref-create similarity index 100% rename from levels/it_IT/low-level/symref-create rename to levels/it/low-level/symref-create diff --git a/levels/it_IT/low-level/symref-no-deref b/levels/it/low-level/symref-no-deref similarity index 100% rename from levels/it_IT/low-level/symref-no-deref rename to levels/it/low-level/symref-no-deref diff --git a/levels/it_IT/low-level/tree-create b/levels/it/low-level/tree-create similarity index 100% rename from levels/it_IT/low-level/tree-create rename to levels/it/low-level/tree-create diff --git a/levels/it_IT/low-level/tree-nested b/levels/it/low-level/tree-nested similarity index 100% rename from levels/it_IT/low-level/tree-nested rename to levels/it/low-level/tree-nested diff --git a/levels/it_IT/low-level/tree-read b/levels/it/low-level/tree-read similarity index 100% rename from levels/it_IT/low-level/tree-read rename to levels/it/low-level/tree-read diff --git a/levels/it_IT/low-level/welcome b/levels/it/low-level/welcome similarity index 100% rename from levels/it_IT/low-level/welcome rename to levels/it/low-level/welcome diff --git a/levels/it_IT/merge/conflict b/levels/it/merge/conflict similarity index 100% rename from levels/it_IT/merge/conflict rename to levels/it/merge/conflict diff --git a/levels/it_IT/merge/merge b/levels/it/merge/merge similarity index 100% rename from levels/it_IT/merge/merge rename to levels/it/merge/merge diff --git a/levels/it_IT/merge/merge-abort b/levels/it/merge/merge-abort similarity index 100% rename from levels/it_IT/merge/merge-abort rename to levels/it/merge/merge-abort diff --git a/levels/it_IT/merge/sequence b/levels/it/merge/sequence similarity index 100% rename from levels/it_IT/merge/sequence rename to levels/it/merge/sequence diff --git a/levels/it_IT/remotes/friend b/levels/it/remotes/friend similarity index 100% rename from levels/it_IT/remotes/friend rename to levels/it/remotes/friend diff --git a/levels/it_IT/remotes/problems b/levels/it/remotes/problems similarity index 100% rename from levels/it_IT/remotes/problems rename to levels/it/remotes/problems diff --git a/levels/it_IT/remotes/sequence b/levels/it/remotes/sequence similarity index 100% rename from levels/it_IT/remotes/sequence rename to levels/it/remotes/sequence diff --git a/levels/it_IT/sandbox/empty b/levels/it/sandbox/empty similarity index 100% rename from levels/it_IT/sandbox/empty rename to levels/it/sandbox/empty diff --git a/levels/it_IT/sandbox/remote b/levels/it/sandbox/remote similarity index 100% rename from levels/it_IT/sandbox/remote rename to levels/it/sandbox/remote diff --git a/levels/it_IT/sandbox/sequence b/levels/it/sandbox/sequence similarity index 100% rename from levels/it_IT/sandbox/sequence rename to levels/it/sandbox/sequence diff --git a/levels/it_IT/sandbox/three-commits b/levels/it/sandbox/three-commits similarity index 100% rename from levels/it_IT/sandbox/three-commits rename to levels/it/sandbox/three-commits diff --git a/levels/it_IT/sequence b/levels/it/sequence similarity index 100% rename from levels/it_IT/sequence rename to levels/it/sequence diff --git a/levels/it_IT/shit-happens/bad-commit b/levels/it/shit-happens/bad-commit similarity index 100% rename from levels/it_IT/shit-happens/bad-commit rename to levels/it/shit-happens/bad-commit diff --git a/levels/it_IT/shit-happens/pushed-something-broken b/levels/it/shit-happens/pushed-something-broken similarity index 100% rename from levels/it_IT/shit-happens/pushed-something-broken rename to levels/it/shit-happens/pushed-something-broken diff --git a/levels/it_IT/shit-happens/reflog b/levels/it/shit-happens/reflog similarity index 100% rename from levels/it_IT/shit-happens/reflog rename to levels/it/shit-happens/reflog diff --git a/levels/it_IT/shit-happens/restore-a-file b/levels/it/shit-happens/restore-a-file similarity index 100% rename from levels/it_IT/shit-happens/restore-a-file rename to levels/it/shit-happens/restore-a-file diff --git a/levels/it_IT/shit-happens/restore-a-file-from-the-past b/levels/it/shit-happens/restore-a-file-from-the-past similarity index 100% rename from levels/it_IT/shit-happens/restore-a-file-from-the-past rename to levels/it/shit-happens/restore-a-file-from-the-past diff --git a/levels/it_IT/shit-happens/sequence b/levels/it/shit-happens/sequence similarity index 100% rename from levels/it_IT/shit-happens/sequence rename to levels/it/shit-happens/sequence diff --git a/levels/it_IT/stash/sequence b/levels/it/stash/sequence similarity index 100% rename from levels/it_IT/stash/sequence rename to levels/it/stash/sequence diff --git a/levels/it_IT/stash/stash b/levels/it/stash/stash similarity index 100% rename from levels/it_IT/stash/stash rename to levels/it/stash/stash diff --git a/levels/it_IT/stash/stash-branch b/levels/it/stash/stash-branch similarity index 100% rename from levels/it_IT/stash/stash-branch rename to levels/it/stash/stash-branch diff --git a/levels/it_IT/stash/stash-clear b/levels/it/stash/stash-clear similarity index 100% rename from levels/it_IT/stash/stash-clear rename to levels/it/stash/stash-clear diff --git a/levels/it_IT/stash/stash-merge b/levels/it/stash/stash-merge similarity index 100% rename from levels/it_IT/stash/stash-merge rename to levels/it/stash/stash-merge diff --git a/levels/it_IT/stash/stash-pop b/levels/it/stash/stash-pop similarity index 100% rename from levels/it_IT/stash/stash-pop rename to levels/it/stash/stash-pop diff --git a/levels/it_IT/tags/add-tag b/levels/it/tags/add-tag similarity index 100% rename from levels/it_IT/tags/add-tag rename to levels/it/tags/add-tag diff --git a/levels/it_IT/tags/add-tag-later b/levels/it/tags/add-tag-later similarity index 100% rename from levels/it_IT/tags/add-tag-later rename to levels/it/tags/add-tag-later diff --git a/levels/it_IT/tags/remote-tag b/levels/it/tags/remote-tag similarity index 100% rename from levels/it_IT/tags/remote-tag rename to levels/it/tags/remote-tag diff --git a/levels/it_IT/tags/remove-tag b/levels/it/tags/remove-tag similarity index 100% rename from levels/it_IT/tags/remove-tag rename to levels/it/tags/remove-tag diff --git a/levels/it_IT/tags/sequence b/levels/it/tags/sequence similarity index 100% rename from levels/it_IT/tags/sequence rename to levels/it/tags/sequence diff --git a/levels/it_IT/unused/checkout b/levels/it/unused/checkout similarity index 100% rename from levels/it_IT/unused/checkout rename to levels/it/unused/checkout diff --git a/levels/it_IT/unused/clone b/levels/it/unused/clone similarity index 100% rename from levels/it_IT/unused/clone rename to levels/it/unused/clone diff --git a/levels/it_IT/unused/commit b/levels/it/unused/commit similarity index 100% rename from levels/it_IT/unused/commit rename to levels/it/unused/commit diff --git a/levels/it_IT/unused/commit-a b/levels/it/unused/commit-a similarity index 100% rename from levels/it_IT/unused/commit-a rename to levels/it/unused/commit-a diff --git a/levels/it_IT/unused/fetch b/levels/it/unused/fetch similarity index 100% rename from levels/it_IT/unused/fetch rename to levels/it/unused/fetch diff --git a/levels/it_IT/unused/files-move b/levels/it/unused/files-move similarity index 100% rename from levels/it_IT/unused/files-move rename to levels/it/unused/files-move diff --git a/levels/it_IT/unused/index-mv b/levels/it/unused/index-mv similarity index 100% rename from levels/it_IT/unused/index-mv rename to levels/it/unused/index-mv diff --git a/levels/it_IT/unused/init b/levels/it/unused/init similarity index 100% rename from levels/it_IT/unused/init rename to levels/it/unused/init diff --git a/levels/it_IT/unused/pull-push b/levels/it/unused/pull-push similarity index 100% rename from levels/it_IT/unused/pull-push rename to levels/it/unused/pull-push diff --git a/levels/it_IT/unused/remotes-add b/levels/it/unused/remotes-add similarity index 100% rename from levels/it_IT/unused/remotes-add rename to levels/it/unused/remotes-add diff --git a/levels/it_IT/unused/remotes-delete b/levels/it/unused/remotes-delete similarity index 100% rename from levels/it_IT/unused/remotes-delete rename to levels/it/unused/remotes-delete diff --git a/levels/it_IT/unused/restore b/levels/it/unused/restore similarity index 100% rename from levels/it_IT/unused/restore rename to levels/it/unused/restore diff --git a/levels/it_IT/unused/split b/levels/it/unused/split similarity index 100% rename from levels/it_IT/unused/split rename to levels/it/unused/split diff --git a/levels/it_IT/unused/steps b/levels/it/unused/steps similarity index 100% rename from levels/it_IT/unused/steps rename to levels/it/unused/steps diff --git a/levels/it_IT/unused/who-are-you b/levels/it/unused/who-are-you similarity index 100% rename from levels/it_IT/unused/who-are-you rename to levels/it/unused/who-are-you diff --git a/levels/it_IT/workflows/gitignore b/levels/it/workflows/gitignore similarity index 100% rename from levels/it_IT/workflows/gitignore rename to levels/it/workflows/gitignore diff --git a/levels/it_IT/workflows/pr b/levels/it/workflows/pr similarity index 100% rename from levels/it_IT/workflows/pr rename to levels/it/workflows/pr diff --git a/levels/it_IT/workflows/sequence b/levels/it/workflows/sequence similarity index 100% rename from levels/it_IT/workflows/sequence rename to levels/it/workflows/sequence diff --git a/project.godot b/project.godot index 808e7e6..84b9e7c 100644 --- a/project.godot +++ b/project.godot @@ -81,26 +81,26 @@ window/stretch/aspect="keep" left={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } right={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } up={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } down={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } click={ @@ -125,27 +125,27 @@ right_click={ } tab_complete={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } save={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } delete_word={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } clear={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":76,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":true,"meta":false,"command":true,"pressed":false,"scancode":76,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } mute={ "deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"unicode":0,"echo":false,"script":null) +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":77,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } diff --git a/scenes/Language.gd b/scenes/Language.gd new file mode 100644 index 0000000..35d96b3 --- /dev/null +++ b/scenes/Language.gd @@ -0,0 +1,34 @@ +extends MenuButton + + +func _ready(): + make_popup_menu() # generate items for popup menu + get_popup().connect("id_pressed", self, "_on_item_pressed") + check_current_items() + + +func make_popup_menu(): + for lang in game.languages.values(): + get_popup().add_check_item(lang) + + +func check_current_items(): + var items_count = get_popup().get_item_count() + for i in range(items_count): + var idx = get_popup().get_item_index(i) + if get_popup().get_item_text(idx) == game.languages[game.os_lang]: + get_popup().set_item_checked(idx, true) + else: + get_popup().set_item_checked(idx, false) + + +func _on_item_pressed(id): + #get_popup().set_item_checked(id, true) + var lang = get_popup().get_item_text(id) + for key in game.languages.keys(): + var value = tr(game.languages[key]) + if value == lang: + game.os_lang = key + + check_current_items() + TranslationServer.set_locale(game.os_lang) diff --git a/scenes/chapter.gd b/scenes/chapter.gd index 1980e63..17f75b5 100644 --- a/scenes/chapter.gd +++ b/scenes/chapter.gd @@ -13,7 +13,7 @@ func load(path): var level_names = [] var dir = Directory.new() - dir.open("res://levels/" + game.lang + "/%s" % slug) + dir.open("res://levels/" + game.os_lang + "/%s" % slug) dir.list_dir_begin() while true: @@ -28,7 +28,7 @@ func load(path): var final_level_sequence = [] - var level_sequence = Array(helpers.read_file("res://levels/" + game.lang + "/%s/sequence" % slug, "").split("\n")) + var level_sequence = Array(helpers.read_file("res://levels/" + game.os_lang + "/%s/sequence" % slug, "").split("\n")) for level in level_sequence: if level == "": @@ -42,7 +42,7 @@ func load(path): for l in final_level_sequence: var level = Level.new() - level.load("res://levels/" + game.lang + "/%s/%s" % [slug, l]) + level.load("res://levels/" + game.os_lang + "/%s/%s" % [slug, l]) levels.push_back(level) func _to_string(): diff --git a/scenes/game.gd b/scenes/game.gd index 66695b3..f9b73c3 100644 --- a/scenes/game.gd +++ b/scenes/game.gd @@ -1,7 +1,7 @@ extends Node -var langs = {0: "en_EN", 1: "it_IT"} # Localizations allowed -var lang = OS.get_locale() # Variable for game localization +var languages = {"en": tr("ENGLISH"), "it": tr("ITALIAN")} # Localizations allowed +var os_lang = OS.get_locale_language() # Variable for game localization var tmp_prefix = OS.get_user_data_dir() + "/tmp/" var global_shell @@ -21,10 +21,10 @@ var state = {} var mutex func _ready(): - # Check if present localization language - if not langs.values().has(lang): - lang = langs[0] - + # Check if language traslation exist otherwise use the default language + if not languages.keys().has(os_lang): + os_lang = "en" + mutex = Mutex.new() load_state() diff --git a/scenes/levels.gd b/scenes/levels.gd index 5a3d9f9..3065f76 100644 --- a/scenes/levels.gd +++ b/scenes/levels.gd @@ -3,14 +3,14 @@ extends Node var chapters func _ready(): - var lang = game.lang + var lang = game.os_lang reload() func reload(): chapters = [] var dir = Directory.new() - dir.open("res://levels/" + game.lang) + dir.open("res://levels/" + game.os_lang) dir.list_dir_begin() var chapter_names = [] @@ -27,7 +27,7 @@ func reload(): var final_chapter_sequence = [] - var chapter_sequence = Array(helpers.read_file("res://levels/" + game.lang + "/sequence", "").split("\n")) + var chapter_sequence = Array(helpers.read_file("res://levels/" + game.os_lang + "/sequence", "").split("\n")) for chapter in chapter_sequence: if chapter == "": @@ -41,5 +41,5 @@ func reload(): for c in final_chapter_sequence: var chapter = Chapter.new() - chapter.load("res://levels/" + game.lang + "/%s" % c) + chapter.load("res://levels/" + game.os_lang + "/%s" % c) chapters.push_back(chapter) diff --git a/scenes/title.gd b/scenes/title.gd index 6fdbebb..285d24e 100644 --- a/scenes/title.gd +++ b/scenes/title.gd @@ -1,14 +1,14 @@ extends Control -onready var popup = $VBoxContainer/Language +#onready var popup = $VBoxContainer/Language func _ready(): - check_correct_lang_item() + #check_correct_lang_item() if !OS.has_feature("standalone") and !game.skipped_title: game.skipped_title = true get_tree().change_scene("res://scenes/level_select.tscn") - make_popup_items() + #make_popup_items() func quit(): get_tree().quit() @@ -28,36 +28,36 @@ func sandbox(): # Check the apropriate locale -func check_correct_lang_item(): - for i in game.langs.keys(): - if game.lang == game.langs[i]: - popup.get_popup().set_item_checked(i, true) +#func check_correct_lang_item(): +# for i in game.langs.keys(): +# if game.lang == game.langs[i]: +# popup.get_popup().set_item_checked(i, true) # Set all items to unchecked -func uncheck_all_item(): - for i in game.langs.keys(): - popup.get_popup().set_item_checked(i, false) +#func uncheck_all_item(): +# for i in game.langs.keys(): +# popup.get_popup().set_item_checked(i, false) # Create popup items width allowed locales -func make_popup_items(): - for i in game.langs.keys(): - popup.get_popup().add_radio_check_item(game.langs[i], i) - - uncheck_all_item() - - check_correct_lang_item() - - popup.get_popup().connect("id_pressed", self, "_on_item_pressed") +#func make_popup_items(): +# for i in game.langs.keys(): +# popup.get_popup().add_radio_check_item(game.langs[i], i) +# +# uncheck_all_item() +# +# check_correct_lang_item() +# +# popup.get_popup().connect("id_pressed", self, "_on_item_pressed") # Change the translations and localizations of the cards and strings -func _on_item_pressed(id): - uncheck_all_item() +#func _on_item_pressed(id): +# uncheck_all_item() - popup.get_popup().set_item_checked(id, true) - game.lang = popup.get_popup().get_item_text(id) +# popup.get_popup().set_item_checked(id, true) +# game.lang = popup.get_popup().get_item_text(id) - TranslationServer.set_locale(game.lang) +# TranslationServer.set_locale(game.os_lang) diff --git a/scenes/title.tscn b/scenes/title.tscn index d233369..e2333d3 100644 --- a/scenes/title.tscn +++ b/scenes/title.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://styles/theme.tres" type="Theme" id=1] [ext_resource path="res://images/oh-my-git.png" type="Texture" id=2] [ext_resource path="res://scenes/title.gd" type="Script" id=3] +[ext_resource path="res://scenes/Language.gd" type="Script" id=4] [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=5] [node name="Title" type="Control"] @@ -19,8 +20,8 @@ margin_left = 790.778 margin_top = 594.135 margin_right = 1131.78 margin_bottom = 650.135 -custom_fonts/font = ExtResource( 5 ) custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 ) +custom_fonts/font = ExtResource( 5 ) text = "by bleeptrack & blinry" align = 1 __meta__ = { @@ -32,8 +33,8 @@ margin_left = 709.713 margin_top = 621.416 margin_right = 1209.71 margin_bottom = 677.416 -custom_fonts/font = ExtResource( 5 ) custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 ) +custom_fonts/font = ExtResource( 5 ) text = "Original score by winniehell" align = 1 __meta__ = { @@ -72,6 +73,7 @@ margin_right = 351.0 margin_bottom = 171.0 text = "LANGUAGE" flat = false +script = ExtResource( 4 ) [node name="Sprite" type="Sprite" parent="."] diff --git a/styles/theme.tres b/styles/theme.tres index 35315aa..a56c333 100644 --- a/styles/theme.tres +++ b/styles/theme.tres @@ -193,7 +193,7 @@ Button/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) Button/colors/font_color_hover = Color( 0.94, 0.94, 0.94, 1 ) Button/colors/font_color_pressed = Color( 1, 1, 1, 1 ) Button/constants/hseparation = 2 -Button/fonts/font = null +Button/fonts/font = ExtResource( 1 ) Button/styles/disabled = SubResource( 1 ) Button/styles/focus = SubResource( 2 ) Button/styles/hover = SubResource( 3 ) @@ -206,7 +206,7 @@ CheckBox/colors/font_color_hover_pressed = Color( 1, 1, 1, 1 ) CheckBox/colors/font_color_pressed = Color( 1, 1, 1, 1 ) CheckBox/constants/check_vadjust = 0 CheckBox/constants/hseparation = 4 -CheckBox/fonts/font = null +CheckBox/fonts/font = ExtResource( 1 ) CheckBox/icons/checked = null CheckBox/icons/radio_checked = null CheckBox/icons/radio_unchecked = null @@ -238,7 +238,7 @@ PopupMenu/colors/font_color_disabled = Color( 0.4, 0.4, 0.4, 0.8 ) PopupMenu/colors/font_color_hover = Color( 0.88, 0.88, 0.88, 1 ) PopupMenu/constants/hseparation = 4 PopupMenu/constants/vseparation = 4 -PopupMenu/fonts/font = null +PopupMenu/fonts/font = ExtResource( 1 ) PopupMenu/icons/checked = null PopupMenu/icons/radio_checked = null PopupMenu/icons/radio_unchecked = null @@ -261,11 +261,11 @@ RichTextLabel/constants/shadow_offset_x = 1 RichTextLabel/constants/shadow_offset_y = 1 RichTextLabel/constants/table_hseparation = 3 RichTextLabel/constants/table_vseparation = 3 -RichTextLabel/fonts/bold_font = null -RichTextLabel/fonts/bold_italics_font = null -RichTextLabel/fonts/italics_font = null +RichTextLabel/fonts/bold_font = ExtResource( 1 ) +RichTextLabel/fonts/bold_italics_font = ExtResource( 1 ) +RichTextLabel/fonts/italics_font = ExtResource( 1 ) RichTextLabel/fonts/mono_font = ExtResource( 2 ) -RichTextLabel/fonts/normal_font = null +RichTextLabel/fonts/normal_font = ExtResource( 1 ) RichTextLabel/styles/focus = null RichTextLabel/styles/normal = null TextEdit/colors/background_color = Color( 0, 0, 0, 0 ) @@ -322,8 +322,8 @@ Tree/constants/item_margin = 0 Tree/constants/scroll_border = 4 Tree/constants/scroll_speed = 12 Tree/constants/vseparation = 4 -Tree/fonts/font = null -Tree/fonts/title_button_font = null +Tree/fonts/font = ExtResource( 1 ) +Tree/fonts/title_button_font = ExtResource( 1 ) Tree/icons/arrow = null Tree/icons/arrow_collapsed = null Tree/icons/checked = null From 07d33339cc0a0b0abe512b965a5e7e3caf5fbf46 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Thu, 18 Aug 2022 12:19:13 +0200 Subject: [PATCH 34/49] Created the .pot and babelrc files and make it.po file with italian traductions and some modification to reset all english text --- cards/add.svg.import | 1 + cards/bisect-bad.svg.import | 1 + cards/bisect-good.svg.import | 1 + cards/bisect-start.svg.import | 1 + cards/branch-delete.svg.import | 1 + cards/branch.svg.import | 1 + cards/checkout-file.svg.import | 1 + cards/checkout-from.svg.import | 1 + cards/checkout.svg.import | 1 + cards/cherry-pick.svg.import | 1 + cards/clone.svg.import | 1 + cards/commit-a.svg.import | 1 + cards/commit-auto.svg.import | 1 + cards/commit.svg.import | 1 + cards/fetch.svg.import | 1 + cards/file-copy.svg.import | 1 + cards/file-delete.svg.import | 1 + cards/file-new.svg.import | 1 + cards/file-rename.svg.import | 1 + cards/init.svg.import | 1 + cards/merge-abort.svg.import | 1 + cards/merge.svg.import | 1 + cards/pull.svg.import | 1 + cards/push.svg.import | 1 + cards/rebase-continue.svg.import | 1 + cards/rebase-interactive.svg.import | 1 + cards/rebase.svg.import | 1 + cards/reflog.svg.import | 1 + cards/reset-file.svg.import | 1 + cards/reset-hard.svg.import | 1 + cards/reset.svg.import | 1 + cards/revert.svg.import | 1 + cards/rm.svg.import | 1 + cards/show.svg.import | 1 + images/cli-badge.svg.import | 1 + images/commit.svg.import | 1 + images/conflict.svg.import | 1 + images/file.svg.import | 1 + images/head.svg.import | 1 + images/modified.svg.import | 1 + images/new.svg.import | 1 + images/oh-my-git.png.import | 1 + images/ref.svg.import | 1 + images/remote.svg.import | 1 + images/removed.svg.import | 1 + images/settings_32x32.png.import | 1 + images/string.svg.import | 1 + images/untracked.svg.import | 1 + locale/babelrc | 5 + locale/it.po | 264 ++++++++++++++++++++++++ locale/messages.pot | 271 +++++++++++++++++++++++++ nodes/blob.svg.import | 1 + nodes/commit.svg.import | 1 + nodes/document.svg.import | 1 + nodes/head.svg.import | 1 + nodes/head1.svg.import | 1 + nodes/head2.svg.import | 1 + nodes/head3.svg.import | 1 + nodes/ref.svg.import | 1 + nodes/tree.svg.import | 1 + project.godot | 3 +- resources/localizations.csv | 38 ---- resources/localizations.csv.import | 16 -- resources/localizations.en.translation | Bin 1869 -> 0 bytes resources/localizations.it.translation | Bin 1972 -> 0 bytes scenes/arrow.tscn | 7 +- scenes/cards.gd | 5 +- scenes/cards.tscn | 3 - scenes/cli_badge.tscn | 3 - scenes/drop_area.tscn | 6 +- scenes/file_browser.tscn | 15 +- scenes/file_browser_item.tscn | 3 - scenes/game.gd | 2 +- scenes/level.gd | 2 +- scenes/level_select.gd | 2 +- scenes/level_select.tscn | 18 +- scenes/main.tscn | 36 ++-- scenes/music_button.tscn | 5 +- scenes/no_git.tscn | 8 +- scenes/node.gd | 2 +- scenes/node.tscn | 6 +- scenes/notification.gd | 20 +- scenes/notification.tscn | 6 - scenes/repository.gd | 2 +- scenes/repository.tscn | 9 - scenes/sandbox.tscn | 1 + scenes/survey.tscn | 9 +- scenes/terminal.gd | 2 +- scenes/terminal.tscn | 8 +- scenes/text_editor.tscn | 5 +- scenes/title.gd | 39 +--- scenes/title.tscn | 12 +- 92 files changed, 668 insertions(+), 222 deletions(-) create mode 100644 locale/babelrc create mode 100644 locale/it.po create mode 100644 locale/messages.pot delete mode 100644 resources/localizations.csv delete mode 100644 resources/localizations.csv.import delete mode 100644 resources/localizations.en.translation delete mode 100644 resources/localizations.it.translation diff --git a/cards/add.svg.import b/cards/add.svg.import index cca9696..4ec9107 100644 --- a/cards/add.svg.import +++ b/cards/add.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/bisect-bad.svg.import b/cards/bisect-bad.svg.import index c2afba5..a23974f 100644 --- a/cards/bisect-bad.svg.import +++ b/cards/bisect-bad.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/bisect-good.svg.import b/cards/bisect-good.svg.import index 50f3eef..eccfb46 100644 --- a/cards/bisect-good.svg.import +++ b/cards/bisect-good.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/bisect-start.svg.import b/cards/bisect-start.svg.import index cd672e1..f58b103 100644 --- a/cards/bisect-start.svg.import +++ b/cards/bisect-start.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/branch-delete.svg.import b/cards/branch-delete.svg.import index 6277fe4..385e0b9 100644 --- a/cards/branch-delete.svg.import +++ b/cards/branch-delete.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/branch.svg.import b/cards/branch.svg.import index ff2d5b8..f0a165e 100644 --- a/cards/branch.svg.import +++ b/cards/branch.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/checkout-file.svg.import b/cards/checkout-file.svg.import index a960142..10b175c 100644 --- a/cards/checkout-file.svg.import +++ b/cards/checkout-file.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/checkout-from.svg.import b/cards/checkout-from.svg.import index 2892f47..7e6160e 100644 --- a/cards/checkout-from.svg.import +++ b/cards/checkout-from.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/checkout.svg.import b/cards/checkout.svg.import index 895efd6..ba8c88a 100644 --- a/cards/checkout.svg.import +++ b/cards/checkout.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/cherry-pick.svg.import b/cards/cherry-pick.svg.import index 3549183..1c88964 100644 --- a/cards/cherry-pick.svg.import +++ b/cards/cherry-pick.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/clone.svg.import b/cards/clone.svg.import index 1f894b7..6fa25e0 100644 --- a/cards/clone.svg.import +++ b/cards/clone.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/commit-a.svg.import b/cards/commit-a.svg.import index d514e29..be711b0 100644 --- a/cards/commit-a.svg.import +++ b/cards/commit-a.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/commit-auto.svg.import b/cards/commit-auto.svg.import index 51e7cfd..4f561ca 100644 --- a/cards/commit-auto.svg.import +++ b/cards/commit-auto.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/commit.svg.import b/cards/commit.svg.import index 613bc09..1e1535b 100644 --- a/cards/commit.svg.import +++ b/cards/commit.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/fetch.svg.import b/cards/fetch.svg.import index 3c65896..80da734 100644 --- a/cards/fetch.svg.import +++ b/cards/fetch.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/file-copy.svg.import b/cards/file-copy.svg.import index ebd39cb..f5c9405 100644 --- a/cards/file-copy.svg.import +++ b/cards/file-copy.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/file-delete.svg.import b/cards/file-delete.svg.import index 9c9d9da..942334e 100644 --- a/cards/file-delete.svg.import +++ b/cards/file-delete.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/file-new.svg.import b/cards/file-new.svg.import index 968c800..334d7a1 100644 --- a/cards/file-new.svg.import +++ b/cards/file-new.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/file-rename.svg.import b/cards/file-rename.svg.import index 79f1261..ca2d82c 100644 --- a/cards/file-rename.svg.import +++ b/cards/file-rename.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/init.svg.import b/cards/init.svg.import index aacb273..dedbfe6 100644 --- a/cards/init.svg.import +++ b/cards/init.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/merge-abort.svg.import b/cards/merge-abort.svg.import index cbdf0a8..4a919d2 100644 --- a/cards/merge-abort.svg.import +++ b/cards/merge-abort.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/merge.svg.import b/cards/merge.svg.import index b96f40d..a83da3d 100644 --- a/cards/merge.svg.import +++ b/cards/merge.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/pull.svg.import b/cards/pull.svg.import index 15ab40d..e792f8f 100644 --- a/cards/pull.svg.import +++ b/cards/pull.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/push.svg.import b/cards/push.svg.import index aa6a9ff..e191ead 100644 --- a/cards/push.svg.import +++ b/cards/push.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/rebase-continue.svg.import b/cards/rebase-continue.svg.import index 4276f0a..41f5eda 100644 --- a/cards/rebase-continue.svg.import +++ b/cards/rebase-continue.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/rebase-interactive.svg.import b/cards/rebase-interactive.svg.import index a65c315..ebe0624 100644 --- a/cards/rebase-interactive.svg.import +++ b/cards/rebase-interactive.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/rebase.svg.import b/cards/rebase.svg.import index 97241e1..460096a 100644 --- a/cards/rebase.svg.import +++ b/cards/rebase.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/reflog.svg.import b/cards/reflog.svg.import index 17b81f7..00dcf26 100644 --- a/cards/reflog.svg.import +++ b/cards/reflog.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/reset-file.svg.import b/cards/reset-file.svg.import index 883becf..03dc0bd 100644 --- a/cards/reset-file.svg.import +++ b/cards/reset-file.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/reset-hard.svg.import b/cards/reset-hard.svg.import index 199bee3..103b70b 100644 --- a/cards/reset-hard.svg.import +++ b/cards/reset-hard.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/reset.svg.import b/cards/reset.svg.import index 3409230..0e43dc4 100644 --- a/cards/reset.svg.import +++ b/cards/reset.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/revert.svg.import b/cards/revert.svg.import index 6f0bbfc..6491f9c 100644 --- a/cards/revert.svg.import +++ b/cards/revert.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/rm.svg.import b/cards/rm.svg.import index 2830052..ab96873 100644 --- a/cards/rm.svg.import +++ b/cards/rm.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/cards/show.svg.import b/cards/show.svg.import index 39cebac..40f1504 100644 --- a/cards/show.svg.import +++ b/cards/show.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/cli-badge.svg.import b/images/cli-badge.svg.import index 53031f8..930d998 100644 --- a/images/cli-badge.svg.import +++ b/images/cli-badge.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/commit.svg.import b/images/commit.svg.import index 54316cf..fbf6f82 100644 --- a/images/commit.svg.import +++ b/images/commit.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/conflict.svg.import b/images/conflict.svg.import index 5053a2b..63c961d 100644 --- a/images/conflict.svg.import +++ b/images/conflict.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/file.svg.import b/images/file.svg.import index 12aa5dd..49fd863 100644 --- a/images/file.svg.import +++ b/images/file.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/head.svg.import b/images/head.svg.import index 2a5c3cf..b92f7aa 100644 --- a/images/head.svg.import +++ b/images/head.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/modified.svg.import b/images/modified.svg.import index a7356bb..c8ba6f4 100644 --- a/images/modified.svg.import +++ b/images/modified.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/new.svg.import b/images/new.svg.import index 4b01767..1218f0e 100644 --- a/images/new.svg.import +++ b/images/new.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/oh-my-git.png.import b/images/oh-my-git.png.import index 708ee15..a173ad8 100644 --- a/images/oh-my-git.png.import +++ b/images/oh-my-git.png.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/ref.svg.import b/images/ref.svg.import index 480c664..1b179ae 100644 --- a/images/ref.svg.import +++ b/images/ref.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/remote.svg.import b/images/remote.svg.import index 762dceb..7c90ac0 100644 --- a/images/remote.svg.import +++ b/images/remote.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/removed.svg.import b/images/removed.svg.import index 1e0dd8a..104b392 100644 --- a/images/removed.svg.import +++ b/images/removed.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/settings_32x32.png.import b/images/settings_32x32.png.import index 85d04d8..c4a7e0c 100644 --- a/images/settings_32x32.png.import +++ b/images/settings_32x32.png.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/string.svg.import b/images/string.svg.import index 97a8d20..53ec0cd 100644 --- a/images/string.svg.import +++ b/images/string.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/images/untracked.svg.import b/images/untracked.svg.import index 95cb700..ab65e26 100644 --- a/images/untracked.svg.import +++ b/images/untracked.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/locale/babelrc b/locale/babelrc new file mode 100644 index 0000000..b2125de --- /dev/null +++ b/locale/babelrc @@ -0,0 +1,5 @@ +[python: **.gd] +encoding = utf-8 + +[godot_scene: **.tscn] +encoding = utf-8 diff --git a/locale/it.po b/locale/it.po new file mode 100644 index 0000000..adbae71 --- /dev/null +++ b/locale/it.po @@ -0,0 +1,264 @@ +# Translations template for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# Automatically generated, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: 2022-08-18 10:39+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48 +#msgid "label" +#msgstr "" + +#: oh-my-git/scenes/card.tscn:125 +#msgid "Description" +#msgstr "" + +#: oh-my-git/scenes/card.tscn:144 +#msgid "0" +#msgstr "" + +#: oh-my-git/scenes/cards.gd:58 +msgid "These are your cards! Drag them to highlighted areas to play them!" +msgstr "Queste sono le tue carte! Spostale nell'area evidenziata per usarle!" + +#: oh-my-git/scenes/cards.tscn:34 +msgid "Draw new cards" +msgstr "Pesca nuove carte" + +#: oh-my-git/scenes/cards.tscn:48 +#msgid "3" +#msgstr "" + +#: oh-my-git/scenes/file_browser.tscn:51 +msgid "title" +msgstr "titolo" + +#: oh-my-git/scenes/file_browser.tscn:64 +#msgid "root" +#msgstr "" + +#: oh-my-git/scenes/file_browser.tscn:70 +#msgid "dir" +#msgstr "" + +#: oh-my-git/scenes/file_browser.tscn:111 oh-my-git/scenes/text_editor.tscn:32 +msgid "Save" +msgstr "Salva" + +#: oh-my-git/scenes/file_browser.tscn:126 oh-my-git/scenes/text_editor.tscn:47 +#msgid "x" +#msgstr "" + +#: oh-my-git/scenes/file_browser_item.tscn:118 +msgid "filename" +msgstr "nome file" + +#: oh-my-git/scenes/game.gd:3 +msgid "English" +msgstr "Inglese" + +#: oh-my-git/scenes/game.gd:3 +msgid "Italian" +msgstr "Italiano" + +#: oh-my-git/scenes/level.gd:81 +msgid "Complete the goal of this level" +msgstr "Completa l'obbiettivo di questo ivello!" + +#: oh-my-git/scenes/level_select.gd:60 +msgid "You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?" +msgstr "Ti aggiudicherai un badge d'oro per ogni livello che risolverai senza usare le cards! Puoi risolverli usando solo la linea di comando?" + +#: oh-my-git/scenes/level_select.tscn:51 +msgid "Help us improving Oh My Git! by\nanswering some questions:" +msgstr "Aiutaci a migliorare Oh My Git!\nRispondendo ad alcune domande:" + +#: oh-my-git/scenes/level_select.tscn:65 oh-my-git/scenes/survey.tscn:105 +msgid "To the survey /o/" +msgstr "Al sondaggio /o/" + +#: oh-my-git/scenes/level_select.tscn:82 oh-my-git/scenes/main.tscn:214 +msgid "Back" +msgstr "Indietro" + +#: oh-my-git/scenes/level_select.tscn:93 oh-my-git/scenes/main.tscn:225 +msgid "Reload" +msgstr "Ricarica" + +#: oh-my-git/scenes/main.tscn:105 +#msgid "Level name here!" +#msgstr "" + +#: oh-my-git/scenes/main.tscn:124 oh-my-git/scenes/main.tscn:136 +#msgid "Level description here!" +#msgstr "" + +#: oh-my-git/scenes/main.tscn:237 +msgid "Cards!" +msgstr "Carte!" + +#: oh-my-git/scenes/main.tscn:249 +msgid "Tip!" +msgstr "Mancia!" + +#: oh-my-git/scenes/main.tscn:275 +msgid "Next level" +msgstr "Prossimo livello" + +#: oh-my-git/scenes/music_button.tscn:12 +msgid "Toggle music" +msgstr "Musica" + +#: oh-my-git/scenes/no_git.tscn:33 oh-my-git/scenes/survey.tscn:46 +#: oh-my-git/scenes/title.tscn:25 +#msgid "by bleeptrack & blinry" +#msgstr "" + +#: oh-my-git/scenes/no_git.tscn:46 oh-my-git/scenes/title.tscn:38 +#msgid "Original score by winniehell" +#msgstr "" + +#: oh-my-git/scenes/no_git.tscn:65 oh-my-git/scenes/title.tscn:56 +msgid "Levels" +msgstr "Livelli" + +#: oh-my-git/scenes/no_git.tscn:71 oh-my-git/scenes/title.tscn:62 +msgid "Sandbox" +msgstr "Sandbox" + +#: oh-my-git/scenes/no_git.tscn:76 +msgid "Install" +msgstr "Installa" + +#: oh-my-git/scenes/no_git.tscn:97 +#msgid "GIT_MESSAGE" +#msgstr "" + +#: oh-my-git/scenes/node.gd:83 +msgid "You can drag these around with your mouse!" +msgstr "Puoi trascinarli in giro con il mouse!" + +#: oh-my-git/scenes/node.tscn:55 +#msgid "object_id" +#msgstr "" + +#: oh-my-git/scenes/notification.gd:5 oh-my-git/scenes/notification.tscn:59 +msgid "Got it!" +msgstr "Fatto!" + +#: oh-my-git/scenes/notification.gd:6 +msgid "Interesting!" +msgstr "Interessante" + +#: oh-my-git/scenes/notification.gd:7 +msgid "Very useful!" +msgstr "Veramente utile!" + +#: oh-my-git/scenes/notification.gd:8 +msgid "Cool!" +msgstr "Bello!" + +#: oh-my-git/scenes/notification.gd:9 +msgid "Nice!" +msgstr "Bene!" + +#: oh-my-git/scenes/notification.gd:10 +msgid "Thanks!" +msgstr "Grazie!" + +#: oh-my-git/scenes/notification.gd:11 +msgid "Whatever..." +msgstr "Ad ogni costo..." + +#: oh-my-git/scenes/notification.gd:12 +msgid "Okay!" +msgstr "Ok!" + +#: oh-my-git/scenes/notification.gd:13 +msgid "Yay!" +msgstr "Yay!" + +#: oh-my-git/scenes/notification.gd:14 +msgid "Awesome!" +msgstr "Eccezionale!" + +#: oh-my-git/scenes/notification.tscn:37 +msgid "This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint!" +msgstr "Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento!" + +#: oh-my-git/scenes/notification.tscn:59 +#msgid "Got it!" +#msgstr "Fatto!" + +#: oh-my-git/scenes/repository.gd:92 +msgid "This is the time machine of another person! To interact with it, you need special commands!" +msgstr "Questa è la macchina del tempo di u'altra persona! Per interagirci hai bisogno di comandi speciali!" + +#: oh-my-git/scenes/repository.tscn:56 +#msgid "Repo name" +#msgstr "" + +#: oh-my-git/scenes/repository.tscn:67 +#msgid "Index:" +#msgstr "" + +#: oh-my-git/scenes/repository.tscn:78 +msgid "Update" +msgstr "Aggiorna" + +#: oh-my-git/scenes/repository.tscn:93 +msgid "Hide trees and blobs" +msgstr "Nascondi alberi e macchie" + +#: oh-my-git/scenes/survey.tscn:34 +#msgid "Oh My Git!" +#msgstr "" + +#: oh-my-git/scenes/survey.tscn:71 oh-my-git/scenes/title.tscn:68 +msgid "Quit" +msgstr "Esci" + +#: oh-my-git/scenes/survey.tscn:90 +msgid "Thank you very much for playing!\nPlease help us improve Oh My Git! \nby filling out this survey:" +msgstr "Grazie mille per aver giocato!\nAiutaci a migliorare Oh My Git!\ncompilando questo sondaggio:" + +#: oh-my-git/scenes/terminal.gd:107 +msgid "This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!" +msgstr "Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comandi qui!" + +#: oh-my-git/scenes/terminal.tscn:86 +#msgid "git commit --allow-empty -m \"$RANDOM\"" +#msgstr "" + +#: oh-my-git/scenes/terminal.tscn:93 +#msgid "git checkout HEAD^" +#msgstr "" + +#: oh-my-git/scenes/terminal.tscn:100 +#msgid "git checkout -b \"$RANDOM\"" +#msgstr "" + +#: oh-my-git/scenes/text_editor.tscn:12 +msgid "Text here" +msgstr "Il testo qui" + +#: oh-my-git/scenes/title.tscn:68 +#msgid "Quit" +#msgstr "Esci" + +#: oh-my-git/scenes/title.tscn:74 +msgid "Language" +msgstr "Linguaggio" diff --git a/locale/messages.pot b/locale/messages.pot new file mode 100644 index 0000000..82b3c14 --- /dev/null +++ b/locale/messages.pot @@ -0,0 +1,271 @@ +# Translations template for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2022. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48 +msgid "label" +msgstr "" + +#: oh-my-git/scenes/card.tscn:125 +msgid "Description" +msgstr "" + +#: oh-my-git/scenes/card.tscn:144 +msgid "0" +msgstr "" + +#: oh-my-git/scenes/cards.gd:58 +msgid "YOUR_CARDS" +msgstr "" + +#: oh-my-git/scenes/cards.tscn:34 +msgid "Draw new cards" +msgstr "" + +#: oh-my-git/scenes/cards.tscn:48 +msgid "3" +msgstr "" + +#: oh-my-git/scenes/file_browser.tscn:51 +msgid "title" +msgstr "" + +#: oh-my-git/scenes/file_browser.tscn:64 +msgid "root" +msgstr "" + +#: oh-my-git/scenes/file_browser.tscn:70 +msgid "dir" +msgstr "" + +#: oh-my-git/scenes/file_browser.tscn:111 oh-my-git/scenes/text_editor.tscn:32 +msgid "Save" +msgstr "" + +#: oh-my-git/scenes/file_browser.tscn:126 oh-my-git/scenes/text_editor.tscn:47 +msgid "x" +msgstr "" + +#: oh-my-git/scenes/file_browser_item.tscn:118 +msgid "filename" +msgstr "" + +#: oh-my-git/scenes/game.gd:3 +msgid "ENGLISH" +msgstr "" + +#: oh-my-git/scenes/game.gd:3 +msgid "ITALIAN" +msgstr "" + +#: oh-my-git/scenes/level.gd:81 +msgid "COMPLETE_GOAL" +msgstr "" + +#: oh-my-git/scenes/level_select.gd:60 +msgid "GOLDEN_BADGE" +msgstr "" + +#: oh-my-git/scenes/level_select.tscn:51 +msgid "" +"Help us improving Oh My Git! by\n" +"answering some questions:" +msgstr "" + +#: oh-my-git/scenes/level_select.tscn:65 oh-my-git/scenes/survey.tscn:105 +msgid "To the survey /o/" +msgstr "" + +#: oh-my-git/scenes/level_select.tscn:82 oh-my-git/scenes/main.tscn:214 +msgid "BACK" +msgstr "" + +#: oh-my-git/scenes/level_select.tscn:93 oh-my-git/scenes/main.tscn:225 +msgid "RELOAD" +msgstr "" + +#: oh-my-git/scenes/main.tscn:105 +msgid "Level name here!" +msgstr "" + +#: oh-my-git/scenes/main.tscn:124 oh-my-git/scenes/main.tscn:136 +msgid "Level description here!" +msgstr "" + +#: oh-my-git/scenes/main.tscn:237 +msgid "Cards!" +msgstr "" + +#: oh-my-git/scenes/main.tscn:249 +msgid "Tip!" +msgstr "" + +#: oh-my-git/scenes/main.tscn:275 +msgid "NEXT_LEVEL" +msgstr "" + +#: oh-my-git/scenes/music_button.tscn:12 +msgid "MUSIC" +msgstr "" + +#: oh-my-git/scenes/no_git.tscn:33 oh-my-git/scenes/survey.tscn:46 +#: oh-my-git/scenes/title.tscn:25 +msgid "by bleeptrack & blinry" +msgstr "" + +#: oh-my-git/scenes/no_git.tscn:46 oh-my-git/scenes/title.tscn:38 +msgid "Original score by winniehell" +msgstr "" + +#: oh-my-git/scenes/no_git.tscn:65 oh-my-git/scenes/title.tscn:56 +msgid "LEVELS" +msgstr "" + +#: oh-my-git/scenes/no_git.tscn:71 oh-my-git/scenes/title.tscn:62 +msgid "Sandbox" +msgstr "" + +#: oh-my-git/scenes/no_git.tscn:76 +msgid "INSTALL" +msgstr "" + +#: oh-my-git/scenes/no_git.tscn:97 +msgid "GIT_MESSAGE" +msgstr "" + +#: oh-my-git/scenes/node.gd:83 +msgid "DRAG_AROUND" +msgstr "" + +#: oh-my-git/scenes/node.tscn:55 +msgid "object_id" +msgstr "" + +#: oh-my-git/scenes/notification.gd:5 +msgid "GOT_IT" +msgstr "" + +#: oh-my-git/scenes/notification.gd:6 +msgid "INTERESTING" +msgstr "" + +#: oh-my-git/scenes/notification.gd:7 +msgid "VERY_USEFULL" +msgstr "" + +#: oh-my-git/scenes/notification.gd:8 +msgid "COOL" +msgstr "" + +#: oh-my-git/scenes/notification.gd:9 +msgid "NICE" +msgstr "" + +#: oh-my-git/scenes/notification.gd:10 +msgid "THANKS" +msgstr "" + +#: oh-my-git/scenes/notification.gd:11 +msgid "WHATEVER" +msgstr "" + +#: oh-my-git/scenes/notification.gd:12 +msgid "OKAY" +msgstr "" + +#: oh-my-git/scenes/notification.gd:13 +msgid "YAY" +msgstr "" + +#: oh-my-git/scenes/notification.gd:14 +msgid "AWESOME" +msgstr "" + +#: oh-my-git/scenes/notification.tscn:37 +msgid "" +"This is a hint! This is a hint! This is a hint! This is a hint! This is a" +" hint! This is a hint! This is a hint! This is a hint! This is a hint!" +msgstr "" + +#: oh-my-git/scenes/notification.tscn:59 +msgid "Got it!" +msgstr "" + +#: oh-my-git/scenes/repository.gd:92 +msgid "INTERACT" +msgstr "" + +#: oh-my-git/scenes/repository.tscn:56 +msgid "Repo name" +msgstr "" + +#: oh-my-git/scenes/repository.tscn:67 +msgid "Index:" +msgstr "" + +#: oh-my-git/scenes/repository.tscn:78 +msgid "Update" +msgstr "" + +#: oh-my-git/scenes/repository.tscn:93 +msgid "Hide trees and blobs" +msgstr "" + +#: oh-my-git/scenes/survey.tscn:34 +msgid "Oh My Git!" +msgstr "" + +#: oh-my-git/scenes/survey.tscn:71 +msgid "Quit" +msgstr "" + +#: oh-my-git/scenes/survey.tscn:90 +msgid "" +"Thank you very much for playing!\n" +"Please help us improve Oh My Git! \n" +"by filling out this survey:" +msgstr "" + +#: oh-my-git/scenes/terminal.gd:107 +msgid "YOUR_TERMINAL" +msgstr "" + +#: oh-my-git/scenes/terminal.tscn:86 +msgid "git commit --allow-empty -m \"$RANDOM\"" +msgstr "" + +#: oh-my-git/scenes/terminal.tscn:93 +msgid "git checkout HEAD^" +msgstr "" + +#: oh-my-git/scenes/terminal.tscn:100 +msgid "git checkout -b \"$RANDOM\"" +msgstr "" + +#: oh-my-git/scenes/text_editor.tscn:12 +msgid "Text here" +msgstr "" + +#: oh-my-git/scenes/title.tscn:68 +msgid "QUIT" +msgstr "" + +#: oh-my-git/scenes/title.tscn:74 +msgid "LANGUAGE" +msgstr "" + diff --git a/nodes/blob.svg.import b/nodes/blob.svg.import index 725b562..bcb068a 100644 --- a/nodes/blob.svg.import +++ b/nodes/blob.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/nodes/commit.svg.import b/nodes/commit.svg.import index d47ebc6..86b4574 100644 --- a/nodes/commit.svg.import +++ b/nodes/commit.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/nodes/document.svg.import b/nodes/document.svg.import index 4c5b739..d038a7f 100644 --- a/nodes/document.svg.import +++ b/nodes/document.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/nodes/head.svg.import b/nodes/head.svg.import index f011619..db9e9e9 100644 --- a/nodes/head.svg.import +++ b/nodes/head.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/nodes/head1.svg.import b/nodes/head1.svg.import index 0888d00..6ad89b1 100644 --- a/nodes/head1.svg.import +++ b/nodes/head1.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/nodes/head2.svg.import b/nodes/head2.svg.import index 92a04d2..f1fd364 100644 --- a/nodes/head2.svg.import +++ b/nodes/head2.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/nodes/head3.svg.import b/nodes/head3.svg.import index 7ba33f4..1641097 100644 --- a/nodes/head3.svg.import +++ b/nodes/head3.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/nodes/ref.svg.import b/nodes/ref.svg.import index 1ad858d..a7b3421 100644 --- a/nodes/ref.svg.import +++ b/nodes/ref.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/nodes/tree.svg.import b/nodes/tree.svg.import index 8192b20..f613eaf 100644 --- a/nodes/tree.svg.import +++ b/nodes/tree.svg.import @@ -28,6 +28,7 @@ process/fix_alpha_border=true process/premult_alpha=false process/HDR_as_SRGB=false process/invert_color=false +process/normal_map_invert_y=false stream=false size_limit=0 detect_3d=true diff --git a/project.godot b/project.godot index 84b9e7c..59db029 100644 --- a/project.godot +++ b/project.godot @@ -151,7 +151,8 @@ mute={ [locale] -translations=PoolStringArray( "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ) +translations=PoolStringArray( "res://locale/it.po" ) +locale_filter=[ 0, [ ] ] [network] diff --git a/resources/localizations.csv b/resources/localizations.csv deleted file mode 100644 index 4e082eb..0000000 --- a/resources/localizations.csv +++ /dev/null @@ -1,38 +0,0 @@ -keys,en,it -LEVELS,Levels,Livelli -QUIT,Quit,Esci -BACK,Back,Indietro -RELOAD,Reload,Ricarica -MUSIC,Toggle Music,Musica -NEXT_LEVEL,Next Level,Prossimo Livello -GIT_MESSAGE,"Hi! It seems that you don't have Git installed yet! - -On Linux, please install it from your package manager, usually the package is called "git"! - -On macOS 10.8 and below, you can download Git from git-scm.com.","Ciao! Sembra che tu non abbia ancora installato Git! - -Su Linux, installalo dal tuo gestore di pacchetti, di solito il pacchetto si chiama "git"! - -Su macOS 10.8 e versioni precedenti, puoi scaricare Git da git-scm.com." -INSTALL,"Sure, I'll install it!","Sicuro, lo installerò" -LANGUAGE,Language,Linguaggio -ITALIAN,Italian,Italiano -ENGLISH,English,Inglese -GOT_IT,"Got it!","fatto" -INTERESTING,"Interesting!","interessante" -VERY_USEFULL,"Very useful!","Veramente utile!" -COOL,"Cool!","Bello!" -NICE,"Nice!","Bene!" -THANKS,"Thanks!","Grazie!" -WHATEVER,"Whatever...","Ad ogni costo..." -OKAY,"Okay!","Ok!" -YAY,"Yay!","Yay!" -AWESOME,"Awesome!","Eccezionale!" -YOUR_TERMINAL,"This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!","Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comandi qui!" -INTERACT,"This is the time machine of another person! To interact with it, you need special commands!","Questa è la macchina del tempo di u'altra persona! Per interagirci hai bisogno di comandi speciali!" -GOLDEN_BADGE,"You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?","Ti aggiudicherai un badge d'oro per ogni livello che risolverai senza usare le cards! Puoi risolverli usando solo la linea di comando?" -GOOD_JOB,"Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.","Ottimo lavoro hai risolto il livello!\n\nSentiti libero di provare altro o clicca su 'Prossimo livello'" -COMPLETE_GOAL,"Complete the goal of this level","Completa l'obbiettivo di questo ivello!" -DRAG_AROUND,"You can drag these around with your mouse!","Puoi trascinarli in giro con il mouse!" -EDIT_FILE,"Click on these files to edit them!","Clicca su questi files per modificarli!" -YOUR_CARDS,"These are your cards! Drag them to highlighted areas to play them!","Queste sono le tue carte! Spostale nell'area evidenziata per usarle!" \ No newline at end of file diff --git a/resources/localizations.csv.import b/resources/localizations.csv.import deleted file mode 100644 index e2044a4..0000000 --- a/resources/localizations.csv.import +++ /dev/null @@ -1,16 +0,0 @@ -[remap] - -importer="csv_translation" -type="Translation" - -[deps] - -files=[ "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ] - -source_file="res://resources/localizations.csv" -dest_files=[ "res://resources/localizations.en.translation", "res://resources/localizations.it.translation" ] - -[params] - -compress=true -delimiter=0 diff --git a/resources/localizations.en.translation b/resources/localizations.en.translation deleted file mode 100644 index 8809d36cf439d6a33670b3ba7c3c4cf7ae3f4feb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1869 zcmbVNZ%kWN6u&K4N}=E=fdREEDH&l>Dl!!*8+09%j=$0lC|%Y)%3E7n-h;l@jp8O6 zV?<{p*&i@t$u>s(pd`j&f-%`7qMLIc*arhKG0rba#E6NE0LE9(>3U5={Nzo3IrseT zIp^Ns%qGC%_UVs6An~pAE$cyh#WJ zeVpg9o8S)m20}m*A^|7>u}D=0Lpe!D3f6z-j0H&sXaNQQt|%-S$aFv!0CPf)F3k?T zD6W@*+z+VQagKhqaqdXMSsUy-0KI@d045Lt(0fphB_^))4{Q*x3V1HeT<@=j)qxP;l}Pl%F~- zpZWxX;oHy$=LOH!C%JuIkXS3kdhZ9*ApX@iQp^i;V2DG9wWsmUE{-SzpfmwD0-*0a zaBWcg0C-xjijVUh=inUY=@@|etFFHF+)~{C)db#dmrHQ&=zD0~druC%`ywdVV<+I* zyOLEG`0uQ1i@)WL9_;A-^uDpzO82Af&i;ILrQvc7@Oglz0o1;@V(nA>eb9NpczXb! zLF_|}+fVFXhVu)Bq{;U(8xV+SZM)iBAC&;XaGo%H2#9DtU)@=!Of$;5w8~H?pCgi& z!oCm@9ZqZh^y^n7t~}wPri0j)hn+6;Y-a;J(@RXJ;Jee$77_TJ@-{-rBlbfk~P3As;-1I^|6eIR5MW zOwIT^QArIEZI>QJCD!5z$Z`V`{jo|zDRXVh83p>xE(~Rwz>0k|DBWIK zsEs^Ifxy=MgR4rZywRCdy)YE(V_we94BH~qODslZy-ug;bhPM-MEGF2)y4ey&gX}{R0#>PVpi(91IIy5YX zaCY9~39#Dcu;6o(23OvoZJDNi7)DCpepGJE8aHOuX-=JURF7IDv1t*lcgOQZ7+=y3 Hf298a@cZPX diff --git a/resources/localizations.it.translation b/resources/localizations.it.translation deleted file mode 100644 index 0a5f06a5a98591d327c16e5f2dc0035ee80f83b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1972 zcmbVNZERCz6n@*)%S$&_WlM#vVOuh8bz#&woC|l%k6Fhyw$81xcIbM$QlR^2p|{Iq zIHa4=p;4BIlm$#2Wnw}|3}9R^{vexSDotiW)JRCsA42?MKZxN&?|jasH))8!e3Pf= zJ?A~=yyraUZEjn8TOCWUEJz&>Vc)vZuk3I~{b8lg9}7joy5Ikn9FZ%4Xi$j^L<2!z zUnJn~^Ti@QB@he;S#IW8*xw&yOJV5`DvE!5P+?1;Xc0k{jqMIp=ZpEf`+{s4)b4>m zZ!nfN&`nA#8VYZ}7p4TFp`9@p88ZN8K+Ck=;izCaWWxH-o=rF)QXWXlP>hkO7;pfz z7O@1#9AG&>Es{-NtM1cF)B0M-b-?=j&MEHcw5>7YtQGssz*e9Kpniq`{T`D0GW54H z_PWnFY=?lO0JT&M90P~~LbvIA-|LW6^CM{+*`FI)d-00#UeC@9dwBVULK+egPSEoV z9sH%E40;KWndi^^v-t{a#1&0V_cvcTDUBgN&6t3#cJ^(3r=R$w+~nVN_4@hVv`+Wx z@jsgC+}~xy>-KM6%=<}!-2z{luWsLSemw66^aSt&px?JWdVn8;PTbH;k4*oXmz~a= z+28x0-@Nq(lF^gR%$w}u$sD{F@}>Id>Cl}wkA}-$gQUEKn_EvzL1;eY_t%oT**kEg zTn__!oqOl^EjtFq1KXQ`Ugw6%UB%0x&|4%_ep28)0l5(f0(yMjhhtAz;rB9ZG*{j3 zc5_1$biE!u@7E9Re&+y`dYo+o9-lM(b`U}L_u10ha$y91#1TQyJ04%Nj(VUOX7csr z2OE#j`z-|QfbMUvyzyxd!L9Ci%i-wtxQ^`}d2}`o)th2lZ6^N?cGn1UZQe;w*sP$FLv`OMQHvSdw zS}jPQP4UT78+h%!jeEFOLmf8>bNsqf_TQs=ZQESCx zVYT`syLPFF50{MfwDQs#a8qk@jSezgGnJGa7tOZvf5K?5Rr%;=nW(o4&^8yE{&uq2 z1&t!r%~whi7vmF!CeE&QUB5l0+RNnmCP7-tQ;3i!vZH6L*G#;&@^bR{VCt@Gg;^s5 zw|%i%uwF~B<4fc-R(XHQ@`^?X#`P2^7(FDET4gj?xM-X?&C~{Whfig$UeE)&y~K9) z*(_0>F1L7$l+iugSgr9{Bv%xWi^(|`}@n}Zmo9j0(FRq(MbFbp5iYl zQ+!zIA6#jjk!4%@;Vc^L8iR?*Vf1Ea%>zm(;Mdx4))vVfx#C@yQyY7Y(Co>6`><*s dOd9+DsJzVW$@!+^t`4oRhPgxm_;17a`d{hC3UUAd diff --git a/scenes/arrow.tscn b/scenes/arrow.tscn index 53c1d62..27ca701 100644 --- a/scenes/arrow.tscn +++ b/scenes/arrow.tscn @@ -30,8 +30,8 @@ margin_left = -19.374 margin_top = -5.93085 margin_right = 20.626 margin_bottom = 8.06915 -custom_fonts/font = ExtResource( 1 ) custom_colors/font_color = Color( 1, 1, 1, 1 ) +custom_fonts/font = ExtResource( 1 ) text = "label" align = 1 __meta__ = { @@ -43,10 +43,7 @@ margin_left = -230.84 margin_top = 42.1225 margin_right = 231.16 margin_bottom = 68.1225 -custom_fonts/font = ExtResource( 1 ) custom_colors/font_color = Color( 0.356863, 0.356863, 0.356863, 1 ) +custom_fonts/font = ExtResource( 1 ) text = "label" align = 1 -__meta__ = { -"_edit_use_anchors_": false -} diff --git a/scenes/cards.gd b/scenes/cards.gd index 095ee96..f1696ec 100644 --- a/scenes/cards.gd +++ b/scenes/cards.gd @@ -39,7 +39,8 @@ func draw_card(card): new_card.id = card["id"] new_card.command = card["command"] - new_card.description = card["description"][game.lang] + # TODO: Make better game.os_lang + "_" + game.os_lang.to_upper() + new_card.description = card["description"][game.os_lang + "_" + game.os_lang.to_upper()] new_card.energy = 0 #card.energy new_card.position = Vector2(rect_size.x, rect_size.y*2) add_child(new_card) @@ -55,7 +56,7 @@ func draw(ids): arrange_cards() if ids.size() > 0: - game.notify(tr("YOUR_CARDS"), self, "cards") + game.notify(tr("These are your cards! Drag them to highlighted areas to play them!"), self, "cards") func arrange_cards(): var t = Timer.new() diff --git a/scenes/cards.tscn b/scenes/cards.tscn index bc678d1..dbade8d 100644 --- a/scenes/cards.tscn +++ b/scenes/cards.tscn @@ -9,9 +9,6 @@ anchor_right = 1.0 anchor_bottom = 1.0 mouse_filter = 2 script = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="ColorRect" type="ColorRect" parent="."] anchor_right = 1.0 diff --git a/scenes/cli_badge.tscn b/scenes/cli_badge.tscn index 740e2a3..37bbb26 100644 --- a/scenes/cli_badge.tscn +++ b/scenes/cli_badge.tscn @@ -32,9 +32,6 @@ texture = ExtResource( 1 ) expand = true stretch_mode = 6 script = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="Particles2D" type="Particles2D" parent="."] show_behind_parent = true diff --git a/scenes/drop_area.tscn b/scenes/drop_area.tscn index 8a85979..9326dc4 100644 --- a/scenes/drop_area.tscn +++ b/scenes/drop_area.tscn @@ -23,16 +23,14 @@ resource_local_to_scene = true shader = SubResource( 2 ) shader_param/hovered = 0.0 -[node name="DropArea" type="Node2D" groups=[ -"drop_areas", -]] +[node name="DropArea" type="Node2D" groups=["drop_areas"]] position = Vector2( -0.197731, 0.0673599 ) script = ExtResource( 1 ) [node name="Area2D" type="Area2D" parent="."] -input_pickable = false collision_layer = 0 collision_mask = 524288 +input_pickable = false [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource( 1 ) diff --git a/scenes/file_browser.tscn b/scenes/file_browser.tscn index 7bfbe1d..e10ad1a 100644 --- a/scenes/file_browser.tscn +++ b/scenes/file_browser.tscn @@ -4,17 +4,12 @@ [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=2] [ext_resource path="res://styles/theme.tres" type="Theme" id=3] -[node name="FileBrowser" type="Control" groups=[ -"editors", -]] +[node name="FileBrowser" type="Control" groups=["editors"]] anchor_right = 1.0 anchor_bottom = 1.0 rect_min_size = Vector2( 0, 142 ) theme = ExtResource( 3 ) script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="Panel" type="Panel" parent="."] anchor_right = 1.0 @@ -53,19 +48,19 @@ align = 1 [node name="Breadcrumbs" type="HBoxContainer" parent="Panel/Margin/Rows"] visible = false -margin_right = 1856.0 +margin_right = 1904.0 margin_bottom = 50.0 rect_min_size = Vector2( 0, 50 ) custom_constants/separation = 8 [node name="Button" type="Button" parent="Panel/Margin/Rows/Breadcrumbs"] -margin_right = 55.0 +margin_right = 61.0 margin_bottom = 50.0 text = "root" [node name="Button2" type="Button" parent="Panel/Margin/Rows/Breadcrumbs"] -margin_left = 63.0 -margin_right = 104.0 +margin_left = 69.0 +margin_right = 114.0 margin_bottom = 50.0 text = "dir" diff --git a/scenes/file_browser_item.tscn b/scenes/file_browser_item.tscn index 4ceb076..6a8149d 100644 --- a/scenes/file_browser_item.tscn +++ b/scenes/file_browser_item.tscn @@ -13,9 +13,6 @@ margin_bottom = -0.0800018 rect_min_size = Vector2( 140, 140 ) mouse_filter = 1 script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="Control" type="Control" parent="."] anchor_left = 0.5 diff --git a/scenes/game.gd b/scenes/game.gd index f9b73c3..a336900 100644 --- a/scenes/game.gd +++ b/scenes/game.gd @@ -1,6 +1,6 @@ extends Node -var languages = {"en": tr("ENGLISH"), "it": tr("ITALIAN")} # Localizations allowed +var languages = {"en": tr("English"), "it": tr("Italian")} # Localizations allowed var os_lang = OS.get_locale_language() # Variable for game localization var tmp_prefix = OS.get_user_data_dir() + "/tmp/" diff --git a/scenes/level.gd b/scenes/level.gd index 06b8740..d978784 100644 --- a/scenes/level.gd +++ b/scenes/level.gd @@ -78,7 +78,7 @@ func load(path): else: repo = "yours" - var desc = tr("COMPLETE_GOAL") + var desc = tr("Complete the goal of this level") for line in Array(config[k].split("\n")): if line.length() > 0 and line[0] == "#": desc = line.substr(1).strip_edges(true, true) diff --git a/scenes/level_select.gd b/scenes/level_select.gd index a0118f6..e311f12 100644 --- a/scenes/level_select.gd +++ b/scenes/level_select.gd @@ -57,7 +57,7 @@ func reload(): level_list.add_child(hb) if badge.active: - game.notify(tr("GOLDEN_BADGE"), badge, "cli-badge") + game.notify(tr("You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?"), badge, "cli-badge") level_id += 1 chapter_id += 1 diff --git a/scenes/level_select.tscn b/scenes/level_select.tscn index d60e69e..eb8f3b5 100644 --- a/scenes/level_select.tscn +++ b/scenes/level_select.tscn @@ -17,9 +17,6 @@ anchor_right = 1.0 anchor_bottom = 1.0 theme = ExtResource( 1 ) script = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="ScrollContainer" type="ScrollContainer" parent="."] anchor_right = 1.0 @@ -77,29 +74,30 @@ __meta__ = { } [node name="Back" type="Button" parent="HBoxContainer"] -margin_right = 75.0 +margin_right = 65.0 margin_bottom = 39.0 -text = "BACK" +text = "Back" __meta__ = { "_edit_use_anchors_": false } [node name="Reload" type="Button" parent="HBoxContainer"] -margin_left = 80.0 -margin_right = 188.0 +margin_left = 70.0 +margin_right = 158.0 margin_bottom = 39.0 focus_mode = 0 enabled_focus_mode = 0 -text = "RELOAD" +text = "Reload" __meta__ = { "_edit_use_anchors_": false } [node name="Toggle_Music" parent="HBoxContainer" instance=ExtResource( 4 )] -margin_left = 193.0 +margin_left = 163.0 margin_top = 0.0 -margin_right = 282.0 +margin_right = 309.0 margin_bottom = 39.0 +text = "Toggle music" [connection signal="pressed" from="HelpLabel/Button3" to="." method="onSurveyPressed"] [connection signal="pressed" from="HBoxContainer/Back" to="." method="back"] diff --git a/scenes/main.tscn b/scenes/main.tscn index 303f9a7..a97e9e4 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -36,9 +36,6 @@ margin_bottom = -8.0 mouse_filter = 2 theme = ExtResource( 6 ) script = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="CanvasLayer" type="CanvasLayer" parent="."] layer = -1 @@ -122,9 +119,6 @@ size_flags_vertical = 3 bbcode_enabled = true bbcode_text = "Level description here!" text = "Level description here!" -__meta__ = { -"_edit_use_anchors_": false -} [node name="LevelCongrats" type="RichTextLabel" parent="Rows/Columns/RightSide/LevelInfo/LevelPanel/Text"] visible = false @@ -189,9 +183,9 @@ position = Vector2( 68.6342, 59.1206 ) script = ExtResource( 9 ) [node name="Area2D" type="Area2D" parent="Cursor"] -input_pickable = false collision_layer = 524288 collision_mask = 0 +input_pickable = false [node name="CollisionShape2D" type="CollisionShape2D" parent="Cursor/Area2D"] shape = SubResource( 1 ) @@ -202,27 +196,24 @@ margin_top = 5.13129 margin_right = 636.864 margin_bottom = 44.1313 custom_constants/separation = 8 -__meta__ = { -"_edit_use_anchors_": false -} [node name="Back" type="Button" parent="Menu"] -margin_right = 75.0 +margin_right = 65.0 margin_bottom = 39.0 focus_mode = 0 enabled_focus_mode = 0 -text = "BACK" +text = "Back" __meta__ = { "_edit_use_anchors_": false } [node name="Reload" type="Button" parent="Menu"] -margin_left = 83.0 -margin_right = 191.0 +margin_left = 73.0 +margin_right = 161.0 margin_bottom = 39.0 focus_mode = 0 enabled_focus_mode = 0 -text = "RELOAD" +text = "Reload" __meta__ = { "_edit_use_anchors_": false } @@ -252,27 +243,28 @@ __meta__ = { } [node name="Toogle_Music" parent="Menu" instance=ExtResource( 11 )] -margin_left = 199.0 +margin_left = 169.0 margin_top = 0.0 -margin_right = 288.0 +margin_right = 315.0 margin_bottom = 39.0 +text = "Toggle music" [node name="CLIBadge" parent="Menu" instance=ExtResource( 10 )] anchor_right = 0.0 anchor_bottom = 0.0 -margin_left = 296.0 -margin_right = 341.0 +margin_left = 323.0 +margin_right = 368.0 margin_bottom = 39.0 [node name="NextLevelButton" type="Button" parent="Menu"] -margin_left = 349.0 -margin_right = 501.0 +margin_left = 376.0 +margin_right = 493.0 margin_bottom = 39.0 focus_mode = 0 custom_styles/hover = SubResource( 2 ) custom_styles/normal = ExtResource( 4 ) enabled_focus_mode = 0 -text = "NEXT_LEVEL" +text = "Next level" __meta__ = { "_edit_use_anchors_": false } diff --git a/scenes/music_button.tscn b/scenes/music_button.tscn index a48cc46..fae6457 100644 --- a/scenes/music_button.tscn +++ b/scenes/music_button.tscn @@ -9,10 +9,7 @@ margin_right = 387.005 margin_bottom = 97.856 focus_mode = 0 enabled_focus_mode = 0 -text = "MUSIC" +text = "Toggle music" script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} [connection signal="pressed" from="." to="." method="toggle_music"] diff --git a/scenes/no_git.tscn b/scenes/no_git.tscn index 60bc98c..61f5db1 100644 --- a/scenes/no_git.tscn +++ b/scenes/no_git.tscn @@ -28,8 +28,8 @@ margin_left = 797.196 margin_top = 545.117 margin_right = 1138.2 margin_bottom = 601.117 -custom_fonts/font = ExtResource( 5 ) custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 ) +custom_fonts/font = ExtResource( 5 ) text = "by bleeptrack & blinry" align = 1 __meta__ = { @@ -41,8 +41,8 @@ margin_left = 716.131 margin_top = 572.398 margin_right = 1216.13 margin_bottom = 628.398 -custom_fonts/font = ExtResource( 5 ) custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 ) +custom_fonts/font = ExtResource( 5 ) text = "Original score by winniehell" align = 1 __meta__ = { @@ -62,7 +62,7 @@ __meta__ = { visible = false margin_right = 351.0 margin_bottom = 39.0 -text = "LEVELS" +text = "Levels" [node name="Button3" type="Button" parent="VBoxContainer"] visible = false @@ -73,7 +73,7 @@ text = "Sandbox" [node name="Install" type="Button" parent="VBoxContainer"] margin_right = 351.0 margin_bottom = 39.0 -text = "INSTALL" +text = "Install" [node name="Sprite" type="Sprite" parent="."] diff --git a/scenes/node.gd b/scenes/node.gd index 716ac3d..c695e91 100644 --- a/scenes/node.gd +++ b/scenes/node.gd @@ -80,7 +80,7 @@ func type_set(new_type): $Sprite.texture = preload("res://nodes/tree.svg") "commit": $Sprite.texture = preload("res://nodes/commit.svg") - game.notify(tr("DRAG_AROUND"), self, "drag-nodes") + game.notify(tr("You can drag these around with your mouse!"), self, "drag-nodes") "tag": $Sprite.texture = preload("res://nodes/blob.svg") "ref": diff --git a/scenes/node.tscn b/scenes/node.tscn index f951214..0905cc2 100644 --- a/scenes/node.tscn +++ b/scenes/node.tscn @@ -50,8 +50,8 @@ margin_left = -19.9265 margin_top = -12.0097 margin_right = 129.073 margin_bottom = 40.9903 -custom_fonts/font = ExtResource( 1 ) custom_colors/font_color = Color( 1, 1, 1, 1 ) +custom_fonts/font = ExtResource( 1 ) text = "object_id" __meta__ = { "_edit_use_anchors_": false @@ -75,9 +75,9 @@ margin_left = -22.057 margin_top = 31.1738 margin_right = -12.057 margin_bottom = 66.1738 -custom_styles/normal = SubResource( 2 ) -custom_fonts/font = ExtResource( 1 ) custom_colors/font_color = Color( 1, 1, 1, 1 ) +custom_fonts/font = ExtResource( 1 ) +custom_styles/normal = SubResource( 2 ) __meta__ = { "_edit_use_anchors_": false } diff --git a/scenes/notification.gd b/scenes/notification.gd index 70ed8af..e668c49 100644 --- a/scenes/notification.gd +++ b/scenes/notification.gd @@ -2,16 +2,16 @@ extends Node2D var text setget _set_text var button_texts = [ - tr("GOT_IT"), - tr("INTERESTING"), - tr("VERY_USEFULL"), - tr("COOL"), - tr("NICE"), - tr("THANKS"), - tr("WHATEVER"), - tr("OKAY"), - tr("YAY"), - tr("AWESOME") ] + tr("Got it!"), + tr("Interesting!"), + tr("Very useful!"), + tr("Cool!"), + tr("Nice!"), + tr("Thanks!"), + tr("Whatever..."), + tr("Okay!"), + tr("Yay!"), + tr("Awesome!") ] func _ready(): button_texts.shuffle() diff --git a/scenes/notification.tscn b/scenes/notification.tscn index 3b552c5..0068983 100644 --- a/scenes/notification.tscn +++ b/scenes/notification.tscn @@ -22,9 +22,6 @@ margin_right = 492.0 margin_bottom = 170.0 theme = ExtResource( 2 ) custom_styles/panel = SubResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="Label" type="Label" parent="Panel"] anchor_right = 1.0 @@ -36,9 +33,6 @@ margin_bottom = -15.0 custom_fonts/font = ExtResource( 1 ) text = "This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint!" autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} [node name="CenterContainer" type="CenterContainer" parent="Panel"] anchor_top = 1.0 diff --git a/scenes/repository.gd b/scenes/repository.gd index f64056f..00a9aeb 100644 --- a/scenes/repository.gd +++ b/scenes/repository.gd @@ -89,7 +89,7 @@ func set_label(new_label): $Rows/RepoVis/SeparatorLine/DropArea.queue_free() $Rows/RepoVis/SeparatorLine.hide() else: - game.notify(tr("INTERACT"), self, "remote") + game.notify(tr("This is the time machine of another person! To interact with it, you need special commands!"), self, "remote") label_node.text = new_label func random_position(): diff --git a/scenes/repository.tscn b/scenes/repository.tscn index 35264e9..476ffb0 100644 --- a/scenes/repository.tscn +++ b/scenes/repository.tscn @@ -12,9 +12,6 @@ rect_clip_content = true mouse_filter = 2 theme = ExtResource( 2 ) script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="Rows" type="HSplitContainer" parent="."] anchor_right = 1.0 @@ -38,9 +35,6 @@ anchor_bottom = 1.0 margin_top = -4.0 mouse_filter = 2 color = Color( 0.196078, 0.184314, 0.435294, 1 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="DropArea" parent="Rows/RepoVis/SeparatorLine" instance=ExtResource( 4 )] position = Vector2( 71.6342, -29.3427 ) @@ -54,9 +48,6 @@ margin_right = 229.063 margin_bottom = -8.50476 custom_fonts/font = ExtResource( 3 ) text = "Repo name" -__meta__ = { -"_edit_use_anchors_": false -} [node name="IndexLabel" type="Label" parent="Rows/RepoVis"] visible = false diff --git a/scenes/sandbox.tscn b/scenes/sandbox.tscn index ee28577..fc1e113 100644 --- a/scenes/sandbox.tscn +++ b/scenes/sandbox.tscn @@ -48,4 +48,5 @@ margin_left = 961.0 margin_right = 1910.0 margin_bottom = 1070.0 size_flags_horizontal = 3 + [connection signal="command_done" from="Columns/Terminal" to="." method="update_repo"] diff --git a/scenes/survey.tscn b/scenes/survey.tscn index 85aa1a1..2d3bfc1 100644 --- a/scenes/survey.tscn +++ b/scenes/survey.tscn @@ -13,9 +13,6 @@ anchor_right = 1.0 anchor_bottom = 1.0 theme = ExtResource( 1 ) script = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="ColorRect" type="ColorRect" parent="."] anchor_right = 1.0 @@ -41,8 +38,8 @@ margin_left = 774.698 margin_top = 297.059 margin_right = 1115.7 margin_bottom = 353.059 -custom_fonts/font = ExtResource( 5 ) custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 ) +custom_fonts/font = ExtResource( 5 ) text = "by bleeptrack & blinry" align = 1 __meta__ = { @@ -61,9 +58,6 @@ anchor_bottom = 1.0 margin_left = -175.997 margin_top = -183.0 margin_right = 175.997 -__meta__ = { -"_edit_use_anchors_": false -} [node name="Button2" type="Button" parent="VBoxContainer"] margin_right = 351.0 @@ -106,5 +100,6 @@ text = "To the survey /o/" __meta__ = { "_edit_use_anchors_": false } + [connection signal="pressed" from="VBoxContainer/Button2" to="." method="quit"] [connection signal="pressed" from="VBoxContainer2/Button" to="." method="on_survey_pressed"] diff --git a/scenes/terminal.gd b/scenes/terminal.gd index a52600f..757df1e 100644 --- a/scenes/terminal.gd +++ b/scenes/terminal.gd @@ -104,7 +104,7 @@ func command_done(cmd): if cmd.output.length() <= 1000: output.text = output.text + "$ " + cmd.command + "\n" + cmd.output - game.notify(tr("YOUR_TERMINAL"), self, "terminal") + game.notify(tr("This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!"), self, "terminal") else: $Pager/Text.text = cmd.output $Pager.popup() diff --git a/scenes/terminal.tscn b/scenes/terminal.tscn index e9706ea..8e36199 100644 --- a/scenes/terminal.tscn +++ b/scenes/terminal.tscn @@ -34,9 +34,6 @@ anchor_right = 1.0 anchor_bottom = 1.0 mouse_filter = 1 script = ExtResource( 4 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="Rows" type="VBoxContainer" parent="."] anchor_right = 1.0 @@ -56,12 +53,9 @@ anchor_bottom = 1.0 margin_top = -1.92206 margin_bottom = -1.92212 size_flags_vertical = 3 -custom_styles/normal = SubResource( 1 ) custom_fonts/normal_font = ExtResource( 3 ) +custom_styles/normal = SubResource( 1 ) scroll_following = true -__meta__ = { -"_edit_use_anchors_": false -} [node name="Completions" type="Tree" parent="Rows/TopHalf"] anchor_top = 1.0 diff --git a/scenes/text_editor.tscn b/scenes/text_editor.tscn index 732784f..1738b65 100644 --- a/scenes/text_editor.tscn +++ b/scenes/text_editor.tscn @@ -3,9 +3,7 @@ [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=1] [ext_resource path="res://scenes/text_editor.gd" type="Script" id=2] -[node name="TextEditor" type="TextEdit" groups=[ -"editors", -]] +[node name="TextEditor" type="TextEdit" groups=["editors"]] anchor_right = 1.0 anchor_bottom = 1.0 custom_colors/background_color = Color( 0, 0, 0, 1 ) @@ -48,5 +46,6 @@ text = "x" __meta__ = { "_edit_use_anchors_": false } + [connection signal="pressed" from="SaveButton" to="." method="save"] [connection signal="pressed" from="CloseButton" to="." method="close"] diff --git a/scenes/title.gd b/scenes/title.gd index 285d24e..a9674bf 100644 --- a/scenes/title.gd +++ b/scenes/title.gd @@ -1,6 +1,5 @@ extends Control -#onready var popup = $VBoxContainer/Language func _ready(): #check_correct_lang_item() @@ -10,9 +9,11 @@ func _ready(): #make_popup_items() + func quit(): get_tree().quit() + func levels(): get_tree().change_scene("res://scenes/level_select.tscn") @@ -25,39 +26,3 @@ func sandbox(): game.current_chapter = levels.chapters.size() - 1 game.current_level = levels.chapters[game.current_chapter].levels.size() -1 get_tree().change_scene("res://scenes/main.tscn") - - -# Check the apropriate locale -#func check_correct_lang_item(): -# for i in game.langs.keys(): -# if game.lang == game.langs[i]: -# popup.get_popup().set_item_checked(i, true) - -# Set all items to unchecked -#func uncheck_all_item(): -# for i in game.langs.keys(): -# popup.get_popup().set_item_checked(i, false) - - -# Create popup items width allowed locales -#func make_popup_items(): -# for i in game.langs.keys(): -# popup.get_popup().add_radio_check_item(game.langs[i], i) -# -# uncheck_all_item() -# -# check_correct_lang_item() -# -# popup.get_popup().connect("id_pressed", self, "_on_item_pressed") - - -# Change the translations and localizations of the cards and strings -#func _on_item_pressed(id): -# uncheck_all_item() - -# popup.get_popup().set_item_checked(id, true) -# game.lang = popup.get_popup().get_item_text(id) - - -# TranslationServer.set_locale(game.os_lang) - diff --git a/scenes/title.tscn b/scenes/title.tscn index e2333d3..6ea4267 100644 --- a/scenes/title.tscn +++ b/scenes/title.tscn @@ -11,9 +11,6 @@ anchor_right = 1.0 anchor_bottom = 1.0 theme = ExtResource( 1 ) script = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="Label2" type="Label" parent="."] margin_left = 790.778 @@ -24,9 +21,6 @@ custom_colors/font_color = Color( 0.533333, 0.392157, 0.392157, 1 ) custom_fonts/font = ExtResource( 5 ) text = "by bleeptrack & blinry" align = 1 -__meta__ = { -"_edit_use_anchors_": false -} [node name="Label3" type="Label" parent="."] margin_left = 709.713 @@ -53,7 +47,7 @@ __meta__ = { [node name="Button" type="Button" parent="VBoxContainer"] margin_right = 351.0 margin_bottom = 39.0 -text = "LEVELS" +text = "Levels" [node name="Button3" type="Button" parent="VBoxContainer"] margin_top = 44.0 @@ -65,13 +59,13 @@ text = "Sandbox" margin_top = 88.0 margin_right = 351.0 margin_bottom = 127.0 -text = "QUIT" +text = "Quit" [node name="Language" type="MenuButton" parent="VBoxContainer"] margin_top = 132.0 margin_right = 351.0 margin_bottom = 171.0 -text = "LANGUAGE" +text = "Language" flat = false script = ExtResource( 4 ) From e80596219ae81c3bded5b1c91aa5e3c0a70fe1d5 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Thu, 18 Aug 2022 14:40:30 +0200 Subject: [PATCH 35/49] reset levels directory without it translations --- levels/{en => }/bisect/bisect | 0 levels/{en => }/bisect/sequence | 0 levels/{en => }/branches/branch-create | 0 levels/{en => }/branches/branch-remove | 0 levels/{en => }/branches/checkout-commit | 0 levels/{en => }/branches/fork | 0 levels/{en => }/branches/grow | 0 levels/{en => }/branches/reorder | 0 levels/{en => }/branches/sequence | 0 levels/{en => }/changing-the-past/rebase | 0 levels/{en => }/changing-the-past/reorder | 0 levels/{en => }/changing-the-past/sequence | 0 levels/{en => }/files/files-add | 0 levels/{en => }/files/files-delete | 0 levels/{en => }/files/sequence | 0 levels/{en => }/index/add | 0 levels/{en => }/index/change | 0 levels/{en => }/index/checkout | 0 levels/{en => }/index/compare | 0 levels/{en => }/index/new | 0 levels/{en => }/index/reset | 0 levels/{en => }/index/rm | 0 levels/{en => }/index/sequence | 0 levels/{en => }/index/steps | 0 levels/{en => }/intro/cli | 0 levels/{en => }/intro/commit | 0 levels/{en => }/intro/copies | 0 levels/{en => }/intro/init | 0 levels/{en => }/intro/remote | 0 levels/{en => }/intro/risky | 0 levels/{en => }/intro/sequence | 0 levels/{en => }/intro/who-are-you | 0 levels/it/bisect/bisect | 43 ----- levels/it/bisect/sequence | 1 - levels/it/branches/branch-create | 44 ----- levels/it/branches/branch-remove | 47 ----- levels/it/branches/checkout-commit | 43 ----- levels/it/branches/fork | 65 ------- levels/it/branches/grow | 48 ----- levels/it/branches/reorder | 89 --------- levels/it/branches/sequence | 6 - levels/it/changing-the-past/rebase | 86 --------- levels/it/changing-the-past/reorder | 77 -------- levels/it/changing-the-past/sequence | 2 - levels/it/files/files-add | 31 --- levels/it/files/files-delete | 36 ---- levels/it/files/sequence | 3 - levels/it/index/#sequence# | 5 - levels/it/index/add | 38 ---- levels/it/index/change | 31 --- levels/it/index/checkout | 25 --- levels/it/index/compare | 51 ----- levels/it/index/new | 28 --- levels/it/index/reset | 37 ---- levels/it/index/rm | 24 --- levels/it/index/sequence | 5 - levels/it/index/steps | 53 ------ levels/it/intro/cli | 27 --- levels/it/intro/commit | 32 ---- levels/it/intro/copies | 42 ---- levels/it/intro/init | 24 --- levels/it/intro/remote | 52 ----- levels/it/intro/risky | 42 ---- levels/it/intro/sequence | 6 - levels/it/intro/who-are-you | 38 ---- levels/it/low-level/basics | 26 --- levels/it/low-level/blob-create | 38 ---- levels/it/low-level/blob-remove | 27 --- levels/it/low-level/commit-create | 37 ---- levels/it/low-level/commit-parents | 31 --- levels/it/low-level/commit-rhombus | 30 --- levels/it/low-level/index-add | 37 ---- levels/it/low-level/index-remove | 29 --- levels/it/low-level/index-update | 33 ---- levels/it/low-level/puzzle-apocalypse | 41 ---- levels/it/low-level/puzzle-precious-blob | 28 --- .../low-level/puzzle-trees-all-the-way-down | 34 ---- levels/it/low-level/ref-create | 42 ---- levels/it/low-level/ref-move | 41 ---- levels/it/low-level/ref-remove | 41 ---- levels/it/low-level/sequence | 18 -- levels/it/low-level/symref-create | 21 -- levels/it/low-level/symref-no-deref | 46 ----- levels/it/low-level/tree-create | 35 ---- levels/it/low-level/tree-nested | 38 ---- levels/it/low-level/tree-read | 51 ----- levels/it/low-level/welcome | 33 ---- levels/it/merge/conflict | 47 ----- levels/it/merge/merge | 82 -------- levels/it/merge/merge-abort | 54 ------ levels/it/merge/sequence | 3 - levels/it/remotes/friend | 47 ----- levels/it/remotes/problems | 33 ---- levels/it/remotes/sequence | 2 - levels/it/sandbox/empty | 7 - levels/it/sandbox/remote | 22 --- levels/it/sandbox/sequence | 3 - levels/it/sandbox/three-commits | 26 --- levels/it/sequence | 13 -- levels/it/shit-happens/bad-commit | 31 --- .../it/shit-happens/pushed-something-broken | 54 ------ levels/it/shit-happens/reflog | 26 --- levels/it/shit-happens/restore-a-file | 22 --- .../shit-happens/restore-a-file-from-the-past | 22 --- levels/it/shit-happens/sequence | 5 - levels/it/stash/sequence | 5 - levels/it/stash/stash | 45 ----- levels/it/stash/stash-branch | 47 ----- levels/it/stash/stash-clear | 57 ------ levels/it/stash/stash-merge | 53 ------ levels/it/stash/stash-pop | 46 ----- levels/it/tags/add-tag | 53 ------ levels/it/tags/add-tag-later | 50 ----- levels/it/tags/remote-tag | 58 ------ levels/it/tags/remove-tag | 53 ------ levels/it/tags/sequence | 4 - levels/it/unused/checkout | 31 --- levels/it/unused/clone | 20 -- levels/it/unused/commit | 27 --- levels/it/unused/commit-a | 26 --- levels/it/unused/fetch | 35 ---- levels/it/unused/files-move | 27 --- levels/it/unused/index-mv | 26 --- levels/it/unused/init | 14 -- levels/it/unused/pull-push | 51 ----- levels/it/unused/remotes-add | 33 ---- levels/it/unused/remotes-delete | 23 --- levels/it/unused/restore | 28 --- levels/it/unused/split | 26 --- levels/it/unused/steps | 23 --- levels/it/unused/who-are-you | 23 --- levels/it/workflows/gitignore | 18 -- levels/it/workflows/pr | 25 --- levels/it/workflows/sequence | 1 - levels/{en => }/low-level/basics | 0 levels/{en => }/low-level/blob-create | 0 levels/{en => }/low-level/blob-remove | 0 levels/{en => }/low-level/commit-create | 0 levels/{en => }/low-level/commit-parents | 0 levels/{en => }/low-level/commit-rhombus | 0 levels/{en => }/low-level/index-add | 0 levels/{en => }/low-level/index-remove | 0 levels/{en => }/low-level/index-update | 0 levels/{en => }/low-level/puzzle-apocalypse | 0 .../{en => }/low-level/puzzle-precious-blob | 0 .../low-level/puzzle-trees-all-the-way-down | 0 levels/{en => }/low-level/ref-create | 0 levels/{en => }/low-level/ref-move | 0 levels/{en => }/low-level/ref-remove | 0 levels/{en => }/low-level/sequence | 0 levels/{en => }/low-level/symref-create | 0 levels/{en => }/low-level/symref-no-deref | 0 levels/{en => }/low-level/tree-create | 0 levels/{en => }/low-level/tree-nested | 0 levels/{en => }/low-level/tree-read | 0 levels/{en => }/low-level/welcome | 0 levels/{en => }/merge/conflict | 0 levels/{en => }/merge/merge | 0 levels/{en => }/merge/merge-abort | 0 levels/{en => }/merge/sequence | 0 levels/{en => }/remotes/friend | 0 levels/{en => }/remotes/problems | 0 levels/{en => }/remotes/sequence | 0 levels/{en => }/sandbox/empty | 0 levels/{en => }/sandbox/remote | 0 levels/{en => }/sandbox/sequence | 0 levels/{en => }/sandbox/three-commits | 0 levels/{en => }/sequence | 0 levels/{en => }/shit-happens/bad-commit | 0 .../shit-happens/pushed-something-broken | 0 levels/{en => }/shit-happens/reflog | 0 levels/{en => }/shit-happens/restore-a-file | 0 .../shit-happens/restore-a-file-from-the-past | 0 levels/{en => }/shit-happens/sequence | 0 levels/{en => }/stash/sequence | 0 levels/{en => }/stash/stash | 0 levels/{en => }/stash/stash-branch | 0 levels/{en => }/stash/stash-clear | 0 levels/{en => }/stash/stash-merge | 0 levels/{en => }/stash/stash-pop | 0 levels/{en => }/tags/add-tag | 0 levels/{en => }/tags/add-tag-later | 0 levels/{en => }/tags/remote-tag | 0 levels/{en => }/tags/remove-tag | 0 levels/{en => }/tags/sequence | 0 levels/{en => }/unused/checkout | 0 levels/{en => }/unused/clone | 0 levels/{en => }/unused/commit | 0 levels/{en => }/unused/commit-a | 0 levels/{en => }/unused/fetch | 0 levels/{en => }/unused/files-move | 0 levels/{en => }/unused/index-mv | 0 levels/{en => }/unused/init | 0 levels/{en => }/unused/pull-push | 0 levels/{en => }/unused/remotes-add | 0 levels/{en => }/unused/remotes-delete | 0 levels/{en => }/unused/restore | 0 levels/{en => }/unused/split | 0 levels/{en => }/unused/steps | 0 levels/{en => }/unused/who-are-you | 0 levels/{en => }/workflows/gitignore | 0 levels/{en => }/workflows/pr | 0 levels/{en => }/workflows/sequence | 0 locale/it.po | 154 +++++++++++++++ locale/messages.mo | Bin 0 -> 8795 bytes resources/cards.json | 180 ++++-------------- scenes/cards.gd | 2 +- scenes/level.gd | 3 +- 208 files changed, 193 insertions(+), 3511 deletions(-) rename levels/{en => }/bisect/bisect (100%) rename levels/{en => }/bisect/sequence (100%) rename levels/{en => }/branches/branch-create (100%) rename levels/{en => }/branches/branch-remove (100%) rename levels/{en => }/branches/checkout-commit (100%) rename levels/{en => }/branches/fork (100%) rename levels/{en => }/branches/grow (100%) rename levels/{en => }/branches/reorder (100%) rename levels/{en => }/branches/sequence (100%) rename levels/{en => }/changing-the-past/rebase (100%) rename levels/{en => }/changing-the-past/reorder (100%) rename levels/{en => }/changing-the-past/sequence (100%) rename levels/{en => }/files/files-add (100%) rename levels/{en => }/files/files-delete (100%) rename levels/{en => }/files/sequence (100%) rename levels/{en => }/index/add (100%) rename levels/{en => }/index/change (100%) rename levels/{en => }/index/checkout (100%) rename levels/{en => }/index/compare (100%) rename levels/{en => }/index/new (100%) rename levels/{en => }/index/reset (100%) rename levels/{en => }/index/rm (100%) rename levels/{en => }/index/sequence (100%) rename levels/{en => }/index/steps (100%) rename levels/{en => }/intro/cli (100%) rename levels/{en => }/intro/commit (100%) rename levels/{en => }/intro/copies (100%) rename levels/{en => }/intro/init (100%) rename levels/{en => }/intro/remote (100%) rename levels/{en => }/intro/risky (100%) rename levels/{en => }/intro/sequence (100%) rename levels/{en => }/intro/who-are-you (100%) delete mode 100644 levels/it/bisect/bisect delete mode 100644 levels/it/bisect/sequence delete mode 100644 levels/it/branches/branch-create delete mode 100644 levels/it/branches/branch-remove delete mode 100644 levels/it/branches/checkout-commit delete mode 100644 levels/it/branches/fork delete mode 100644 levels/it/branches/grow delete mode 100644 levels/it/branches/reorder delete mode 100644 levels/it/branches/sequence delete mode 100644 levels/it/changing-the-past/rebase delete mode 100644 levels/it/changing-the-past/reorder delete mode 100644 levels/it/changing-the-past/sequence delete mode 100644 levels/it/files/files-add delete mode 100644 levels/it/files/files-delete delete mode 100644 levels/it/files/sequence delete mode 100644 levels/it/index/#sequence# delete mode 100644 levels/it/index/add delete mode 100644 levels/it/index/change delete mode 100644 levels/it/index/checkout delete mode 100644 levels/it/index/compare delete mode 100644 levels/it/index/new delete mode 100644 levels/it/index/reset delete mode 100644 levels/it/index/rm delete mode 100644 levels/it/index/sequence delete mode 100644 levels/it/index/steps delete mode 100644 levels/it/intro/cli delete mode 100644 levels/it/intro/commit delete mode 100644 levels/it/intro/copies delete mode 100644 levels/it/intro/init delete mode 100644 levels/it/intro/remote delete mode 100644 levels/it/intro/risky delete mode 100644 levels/it/intro/sequence delete mode 100644 levels/it/intro/who-are-you delete mode 100644 levels/it/low-level/basics delete mode 100644 levels/it/low-level/blob-create delete mode 100644 levels/it/low-level/blob-remove delete mode 100644 levels/it/low-level/commit-create delete mode 100644 levels/it/low-level/commit-parents delete mode 100644 levels/it/low-level/commit-rhombus delete mode 100644 levels/it/low-level/index-add delete mode 100644 levels/it/low-level/index-remove delete mode 100644 levels/it/low-level/index-update delete mode 100644 levels/it/low-level/puzzle-apocalypse delete mode 100644 levels/it/low-level/puzzle-precious-blob delete mode 100644 levels/it/low-level/puzzle-trees-all-the-way-down delete mode 100644 levels/it/low-level/ref-create delete mode 100644 levels/it/low-level/ref-move delete mode 100644 levels/it/low-level/ref-remove delete mode 100644 levels/it/low-level/sequence delete mode 100644 levels/it/low-level/symref-create delete mode 100644 levels/it/low-level/symref-no-deref delete mode 100644 levels/it/low-level/tree-create delete mode 100644 levels/it/low-level/tree-nested delete mode 100644 levels/it/low-level/tree-read delete mode 100644 levels/it/low-level/welcome delete mode 100644 levels/it/merge/conflict delete mode 100644 levels/it/merge/merge delete mode 100644 levels/it/merge/merge-abort delete mode 100644 levels/it/merge/sequence delete mode 100644 levels/it/remotes/friend delete mode 100644 levels/it/remotes/problems delete mode 100644 levels/it/remotes/sequence delete mode 100644 levels/it/sandbox/empty delete mode 100644 levels/it/sandbox/remote delete mode 100644 levels/it/sandbox/sequence delete mode 100644 levels/it/sandbox/three-commits delete mode 100644 levels/it/sequence delete mode 100644 levels/it/shit-happens/bad-commit delete mode 100644 levels/it/shit-happens/pushed-something-broken delete mode 100644 levels/it/shit-happens/reflog delete mode 100644 levels/it/shit-happens/restore-a-file delete mode 100644 levels/it/shit-happens/restore-a-file-from-the-past delete mode 100644 levels/it/shit-happens/sequence delete mode 100644 levels/it/stash/sequence delete mode 100644 levels/it/stash/stash delete mode 100644 levels/it/stash/stash-branch delete mode 100644 levels/it/stash/stash-clear delete mode 100644 levels/it/stash/stash-merge delete mode 100644 levels/it/stash/stash-pop delete mode 100644 levels/it/tags/add-tag delete mode 100644 levels/it/tags/add-tag-later delete mode 100644 levels/it/tags/remote-tag delete mode 100644 levels/it/tags/remove-tag delete mode 100644 levels/it/tags/sequence delete mode 100644 levels/it/unused/checkout delete mode 100644 levels/it/unused/clone delete mode 100644 levels/it/unused/commit delete mode 100644 levels/it/unused/commit-a delete mode 100644 levels/it/unused/fetch delete mode 100644 levels/it/unused/files-move delete mode 100644 levels/it/unused/index-mv delete mode 100644 levels/it/unused/init delete mode 100644 levels/it/unused/pull-push delete mode 100644 levels/it/unused/remotes-add delete mode 100644 levels/it/unused/remotes-delete delete mode 100644 levels/it/unused/restore delete mode 100644 levels/it/unused/split delete mode 100644 levels/it/unused/steps delete mode 100644 levels/it/unused/who-are-you delete mode 100644 levels/it/workflows/gitignore delete mode 100644 levels/it/workflows/pr delete mode 100644 levels/it/workflows/sequence rename levels/{en => }/low-level/basics (100%) rename levels/{en => }/low-level/blob-create (100%) rename levels/{en => }/low-level/blob-remove (100%) rename levels/{en => }/low-level/commit-create (100%) rename levels/{en => }/low-level/commit-parents (100%) rename levels/{en => }/low-level/commit-rhombus (100%) rename levels/{en => }/low-level/index-add (100%) rename levels/{en => }/low-level/index-remove (100%) rename levels/{en => }/low-level/index-update (100%) rename levels/{en => }/low-level/puzzle-apocalypse (100%) rename levels/{en => }/low-level/puzzle-precious-blob (100%) rename levels/{en => }/low-level/puzzle-trees-all-the-way-down (100%) rename levels/{en => }/low-level/ref-create (100%) rename levels/{en => }/low-level/ref-move (100%) rename levels/{en => }/low-level/ref-remove (100%) rename levels/{en => }/low-level/sequence (100%) rename levels/{en => }/low-level/symref-create (100%) rename levels/{en => }/low-level/symref-no-deref (100%) rename levels/{en => }/low-level/tree-create (100%) rename levels/{en => }/low-level/tree-nested (100%) rename levels/{en => }/low-level/tree-read (100%) rename levels/{en => }/low-level/welcome (100%) rename levels/{en => }/merge/conflict (100%) rename levels/{en => }/merge/merge (100%) rename levels/{en => }/merge/merge-abort (100%) rename levels/{en => }/merge/sequence (100%) rename levels/{en => }/remotes/friend (100%) rename levels/{en => }/remotes/problems (100%) rename levels/{en => }/remotes/sequence (100%) rename levels/{en => }/sandbox/empty (100%) rename levels/{en => }/sandbox/remote (100%) rename levels/{en => }/sandbox/sequence (100%) rename levels/{en => }/sandbox/three-commits (100%) rename levels/{en => }/sequence (100%) rename levels/{en => }/shit-happens/bad-commit (100%) rename levels/{en => }/shit-happens/pushed-something-broken (100%) rename levels/{en => }/shit-happens/reflog (100%) rename levels/{en => }/shit-happens/restore-a-file (100%) rename levels/{en => }/shit-happens/restore-a-file-from-the-past (100%) rename levels/{en => }/shit-happens/sequence (100%) rename levels/{en => }/stash/sequence (100%) rename levels/{en => }/stash/stash (100%) rename levels/{en => }/stash/stash-branch (100%) rename levels/{en => }/stash/stash-clear (100%) rename levels/{en => }/stash/stash-merge (100%) rename levels/{en => }/stash/stash-pop (100%) rename levels/{en => }/tags/add-tag (100%) rename levels/{en => }/tags/add-tag-later (100%) rename levels/{en => }/tags/remote-tag (100%) rename levels/{en => }/tags/remove-tag (100%) rename levels/{en => }/tags/sequence (100%) rename levels/{en => }/unused/checkout (100%) rename levels/{en => }/unused/clone (100%) rename levels/{en => }/unused/commit (100%) rename levels/{en => }/unused/commit-a (100%) rename levels/{en => }/unused/fetch (100%) rename levels/{en => }/unused/files-move (100%) rename levels/{en => }/unused/index-mv (100%) rename levels/{en => }/unused/init (100%) rename levels/{en => }/unused/pull-push (100%) rename levels/{en => }/unused/remotes-add (100%) rename levels/{en => }/unused/remotes-delete (100%) rename levels/{en => }/unused/restore (100%) rename levels/{en => }/unused/split (100%) rename levels/{en => }/unused/steps (100%) rename levels/{en => }/unused/who-are-you (100%) rename levels/{en => }/workflows/gitignore (100%) rename levels/{en => }/workflows/pr (100%) rename levels/{en => }/workflows/sequence (100%) create mode 100644 locale/messages.mo diff --git a/levels/en/bisect/bisect b/levels/bisect/bisect similarity index 100% rename from levels/en/bisect/bisect rename to levels/bisect/bisect diff --git a/levels/en/bisect/sequence b/levels/bisect/sequence similarity index 100% rename from levels/en/bisect/sequence rename to levels/bisect/sequence diff --git a/levels/en/branches/branch-create b/levels/branches/branch-create similarity index 100% rename from levels/en/branches/branch-create rename to levels/branches/branch-create diff --git a/levels/en/branches/branch-remove b/levels/branches/branch-remove similarity index 100% rename from levels/en/branches/branch-remove rename to levels/branches/branch-remove diff --git a/levels/en/branches/checkout-commit b/levels/branches/checkout-commit similarity index 100% rename from levels/en/branches/checkout-commit rename to levels/branches/checkout-commit diff --git a/levels/en/branches/fork b/levels/branches/fork similarity index 100% rename from levels/en/branches/fork rename to levels/branches/fork diff --git a/levels/en/branches/grow b/levels/branches/grow similarity index 100% rename from levels/en/branches/grow rename to levels/branches/grow diff --git a/levels/en/branches/reorder b/levels/branches/reorder similarity index 100% rename from levels/en/branches/reorder rename to levels/branches/reorder diff --git a/levels/en/branches/sequence b/levels/branches/sequence similarity index 100% rename from levels/en/branches/sequence rename to levels/branches/sequence diff --git a/levels/en/changing-the-past/rebase b/levels/changing-the-past/rebase similarity index 100% rename from levels/en/changing-the-past/rebase rename to levels/changing-the-past/rebase diff --git a/levels/en/changing-the-past/reorder b/levels/changing-the-past/reorder similarity index 100% rename from levels/en/changing-the-past/reorder rename to levels/changing-the-past/reorder diff --git a/levels/en/changing-the-past/sequence b/levels/changing-the-past/sequence similarity index 100% rename from levels/en/changing-the-past/sequence rename to levels/changing-the-past/sequence diff --git a/levels/en/files/files-add b/levels/files/files-add similarity index 100% rename from levels/en/files/files-add rename to levels/files/files-add diff --git a/levels/en/files/files-delete b/levels/files/files-delete similarity index 100% rename from levels/en/files/files-delete rename to levels/files/files-delete diff --git a/levels/en/files/sequence b/levels/files/sequence similarity index 100% rename from levels/en/files/sequence rename to levels/files/sequence diff --git a/levels/en/index/add b/levels/index/add similarity index 100% rename from levels/en/index/add rename to levels/index/add diff --git a/levels/en/index/change b/levels/index/change similarity index 100% rename from levels/en/index/change rename to levels/index/change diff --git a/levels/en/index/checkout b/levels/index/checkout similarity index 100% rename from levels/en/index/checkout rename to levels/index/checkout diff --git a/levels/en/index/compare b/levels/index/compare similarity index 100% rename from levels/en/index/compare rename to levels/index/compare diff --git a/levels/en/index/new b/levels/index/new similarity index 100% rename from levels/en/index/new rename to levels/index/new diff --git a/levels/en/index/reset b/levels/index/reset similarity index 100% rename from levels/en/index/reset rename to levels/index/reset diff --git a/levels/en/index/rm b/levels/index/rm similarity index 100% rename from levels/en/index/rm rename to levels/index/rm diff --git a/levels/en/index/sequence b/levels/index/sequence similarity index 100% rename from levels/en/index/sequence rename to levels/index/sequence diff --git a/levels/en/index/steps b/levels/index/steps similarity index 100% rename from levels/en/index/steps rename to levels/index/steps diff --git a/levels/en/intro/cli b/levels/intro/cli similarity index 100% rename from levels/en/intro/cli rename to levels/intro/cli diff --git a/levels/en/intro/commit b/levels/intro/commit similarity index 100% rename from levels/en/intro/commit rename to levels/intro/commit diff --git a/levels/en/intro/copies b/levels/intro/copies similarity index 100% rename from levels/en/intro/copies rename to levels/intro/copies diff --git a/levels/en/intro/init b/levels/intro/init similarity index 100% rename from levels/en/intro/init rename to levels/intro/init diff --git a/levels/en/intro/remote b/levels/intro/remote similarity index 100% rename from levels/en/intro/remote rename to levels/intro/remote diff --git a/levels/en/intro/risky b/levels/intro/risky similarity index 100% rename from levels/en/intro/risky rename to levels/intro/risky diff --git a/levels/en/intro/sequence b/levels/intro/sequence similarity index 100% rename from levels/en/intro/sequence rename to levels/intro/sequence diff --git a/levels/en/intro/who-are-you b/levels/intro/who-are-you similarity index 100% rename from levels/en/intro/who-are-you rename to levels/intro/who-are-you diff --git a/levels/it/bisect/bisect b/levels/it/bisect/bisect deleted file mode 100644 index a80e2e8..0000000 --- a/levels/it/bisect/bisect +++ /dev/null @@ -1,43 +0,0 @@ -title = Strada di mattoni gialli -cards = checkout commit-auto reset-hard bisect-start bisect-good bisect-bad - -[description] - -(Perpiacere rimpicciolisci un pochino usando la rotella del mouse! :D) - -Oh no! Hai perso la tua chiave da qualche parte durante il giorno! - -Sicuro, certo potresti guardare in ogni singolo commit nella speranza di trovarlo - ma c'è un modo migliore: la tua macchina del tempo ha un modo integrato per trovare velocemente il punto nel tempo dove le cose sono andate male! - -Per prima cosa, gioca la carta "bisec start". Quindi, vai ad un commit in cui non hai la chiave e gioca la carta "bisect bad". Allo stesso modo vai velocemente in un commit dove hai la chiave *in tascca* e gioca la carta "bisect goofìd". - -Dopo aver trovato l'ultimo commit valido reimposta la branch principale su di esso. Cosa è successo alla chiave dopo che l'hai persa? - -[setup] - -echo "Hai ancora la tua chiave." > you - -for i in {1..30}; do - if test $i -eq 12; then - echo "La tua tasca è vuota." > you - echo "E' per terra." > key - fi - if test $i -eq 13; then - echo "Tiene una chiave nel becco." > bird - rm key - fi - if test $i -eq 14; then - rm bird - fi - git add . - git commit --allow-empty -m "$i" -done - -[win] - -# Trova l'ultimo commit buono -test "$(git log --pretty=%s main | head -1)" -eq 11 - -[congrats] - -Molto bene! :) L'unico problema è che adesso devi tornare a casa camminando, dinuovo... diff --git a/levels/it/bisect/sequence b/levels/it/bisect/sequence deleted file mode 100644 index e8018fe..0000000 --- a/levels/it/bisect/sequence +++ /dev/null @@ -1 +0,0 @@ -bisect diff --git a/levels/it/branches/branch-create b/levels/it/branches/branch-create deleted file mode 100644 index 2544ead..0000000 --- a/levels/it/branches/branch-create +++ /dev/null @@ -1,44 +0,0 @@ -title = Creare ramificazioni -cards = checkout commit-auto branch branch-delete reset-hard - -[description] - -Vieni invitato a due feste! In una di queste, suona il tuo gruppo preferito e l'altra è la festa del tuo miglio amico. Dove andrai? Non preoccuparti - come agente del viaggio nel tempo, puoi andare ad entrambe le feste! - -Per rendere più facile dire quale sia la linea temporale, puoi creare portali temporali! (Chiamiamoli "rami-branchs") - -[cli] - -Anche viaggiare tra differenti rami temporali è davvero facile usando la linea di comando! Hai un ramo chiamato "birthday", puoi digitare `git checkout birthday` per arrivarci. - -[setup] - -echo "Incarta il regalo di compleanno e prendi il biglietto del concerto." > you -git add . -git commit -m "Preparazione serale" -echo "Vai alla festa di compleanno!" >> you -git add . -git commit -m "Vai al compleanno" - -git checkout HEAD~1 -echo "Vai al concerto!" > you -git add . -git commit -m "Vai al concerto" - -git checkout HEAD~1 - -git branch -D main - -[win] - -# Crea un ramo chiamato 'birthday' questo punta alla linea temporale del compleanno -git show birthday | grep 'birthday' - -# Crea un ramo chiamato 'concert' questo punta alla linea temporale del compleanno -git show concert | grep 'concert' - -[congrats] - -Adesso tu puoi viaggiare tra quie rami facilmente (usando `git checkout`) - Prova! - -Il tuo amico è felice che tu sia andato alla sua festa di compleanno e anche tu sei contento del biglietto del concerto firmato. Yay! diff --git a/levels/it/branches/branch-remove b/levels/it/branches/branch-remove deleted file mode 100644 index 00a2d4c..0000000 --- a/levels/it/branches/branch-remove +++ /dev/null @@ -1,47 +0,0 @@ -title = Cancellare rami -cards = checkout commit-auto reset-hard branch-delete - -[description] - -La vita è piena di pericolim, vero? Anche quando cammini a scuola2, sembra che ci siano molti rischi! - -Questo Lunedì è particolarmente brutto.Sei arrivato a scuola ma ci sono delle line temporali che tu non vuoi tenere in giro - -[setup] - -echo Esci di casa e ti incammini verso la scuola. > you -git add . -git commit -m "Buon giorno!" - -echo Cammini nel lato destro della strada. >> you -git commit -am "Lato destro" - -echo Salti in un tombino nel marciapiede e arrivi in orario a scuola. >> you -git commit -am "Salto" - -git checkout HEAD^ -b friend -echo "All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori." >> you -git commit -am "Un nuovo amico" - -git checkout HEAD~2 -b music -echo Cammini nel lato sinistro della strada. >> you -git commit -am "Lato sinistro" - -echo Siccome sei in ritardo, inizi a corre ma qualcuno lanci un pianoforte dalla finestra e ti schiacci. >> you -git commit -am "Bei suoni" - -git checkout HEAD^ -b ice-cream -echo Non sei preoccupato e cammini lentamente. Prendi anche un gelato per strada. Arrivi troppo tardi a scuola, il tuo insegnante è arrabbiato e vieni espulso da scuola. >> you -git commit -am "Yum" - -git branch -M main leap -git checkout leap^^ - -[win] - -# Trova i rami cattivi e cancellali. Tieni solo il migliore. -test "$(git show-ref --heads | cut -f2 -d' ')" = "$(echo refs/heads/leap)" - -[congrats] - -Ripensandoci preferisci la linea temporale del gelato? :) diff --git a/levels/it/branches/checkout-commit b/levels/it/branches/checkout-commit deleted file mode 100644 index 3d913df..0000000 --- a/levels/it/branches/checkout-commit +++ /dev/null @@ -1,43 +0,0 @@ -title = Muoversi attraverso il tempo -cards = checkout commit-auto - -[description] - -La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli "commits"! Puoi viaggiare tra loro usando la carta "checkout"! (Provala!) - -Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i files per risolvere il problema ed invia un nuovo commit! - -[cli] - -Guarda uno specifico commit, digita `git checkout` uno spazio e premi il tasto destro sopra il commit che vuoi! - -Questo inserirà l'identificatore unico del commit! - -[setup] - -echo "Questo salvadanaio appartiene alla sorella maggiore. -Contiene 10 monete." > piggy_bank -git add . -git commit -m "L'inizio" - -echo "Una giovane donna con capelli, ricci, marroni." > little_sister -git add . -git commit -m "La sorella piccola è arrivata" - -echo "Ha 10 monete." >> little_sister -echo "Questo salvadanaio appartiene alla sorella maggiore. -E' vuoto." > piggy_bank -git add . -git commit -m "La sorella piccola ha fatto qualcosa" - -git checkout HEAD^^ -git branch -df main - -[win] - -# Ripristina il salvadanaio della sorella. -{ git show HEAD:piggy_bank | grep "10 monete"; } && { git show HEAD:little_sister | grep -v "10 monete"; } && { git rev-parse HEAD^^^; } - -[congrats] - -Stupendo! Adesso hai preso famiglirità con la macchina del tempo, vediamo situazioni più complicate... diff --git a/levels/it/branches/fork b/levels/it/branches/fork deleted file mode 100644 index 46b94c6..0000000 --- a/levels/it/branches/fork +++ /dev/null @@ -1,65 +0,0 @@ -title = Crea universi paralleli -cards = checkout commit-auto - -[description] - -Sai che creare line temporali parallele è perfettamente legale e sicuro? Vero! - -Puoi scoprire qundo le cose sono andate male in questo zoo? Poi torna all'ultimo momento buono e crea un universo parallelo dove sono tutti felicy! - -[cli] - -L'animale blue rappresenta un concetto conosciuto come "HEAD pointer" in Git: Ti mostra qual'è il commit attuale. - -Ecco un simpatico trucchetto andare al commit precedente: - - git checkout HEAD^ - -Puoi anche andare indietro di 2 commit digitando, pre esempio: - - git checkout HEAD~2 - -[setup] - -mkdir cage -echo "Sembra molto affamato." > cage/lion - -echo "Un ragazzino.. -Ama veramente i gatti!" > child -git add . -git commit -m "L'inizio" - -echo "Tiene in mano un leccalecca." >> child -git commit -am "Il ragazzo compra qualcosa" - -mv child cage -git add . -git commit -m "Il bambino si arrampica da qualche parte" - -git rm cage/child -echo "E' felice. :)" > cage/lion -git add . -git commit -m "Oh no" - -echo "Sta dormendo." > cage/lion -git add . -git commit -m "Ora del pisolino!" - -git checkout --detach -git branch -d main - -[win] - -# Assicurati che il ragazzino sia felice. -git ls-tree --name-only -r HEAD | grep child - -# Assicurati che il leone abbia qualcosa da mangiare. -git show HEAD:cage/lion | grep -v "molto affamato" - -[congrats] - -Whew, ottimo lavoro! Questo sembra un risultato molto migliore. - -Sentiti libero di aggiungere altre line temporali parallele o allungarle. - -Se sei pronto, la prossima missione ci sta aspettando... diff --git a/levels/it/branches/grow b/levels/it/branches/grow deleted file mode 100644 index d560682..0000000 --- a/levels/it/branches/grow +++ /dev/null @@ -1,48 +0,0 @@ -title = I rami crescono con tè! -cards = checkout commit-auto branch branch-delete reset-hard - -[description] - -Nota che ci sono due opzioni per "viaggire fino alla fine della linea temporale": - -Primo, puoi direttamente viaggiare al commit, come abbiamo fatto prima. - -e secondo, puoi viaggiare fino all'etichetta del ramo. In questo caso, quando crei un nuovo commit, il ramo cresce con te e punta ancora alla fine della linea temporale! - -[cli] -Per viaggire in un ramo, digita `git checkout name_of_the_branch`. - -e per viaggiare all'ultimo commit, digita `git checkout --detach name_of_the_branch`. - -[setup] - -echo "In carti il regalo di complanno e prendi il biglietto del concerto." > you -git add . -git commit -m "Preparazioni della sera" -echo "Vai alla festa di compleanno!" >> you -git add . -git commit -m "Vai alla festa di compleanno" -git branch birthday - -git checkout HEAD~1 -echo "Vai al concerto!" > you -git add . -git commit -m "Vai al concerto" -git branch concert - -git checkout HEAD~1 - -git branch -D main - -[win] - -# Viaggi direttamente all'ultimo commit giallo della line temporale del compleanno, fai un cambiamento per te e crea un commit -for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do - if test $(git rev-parse $commit^) = $(git rev-parse birthday); then - return 0 - fi -done -return 1 - -# Viaggi fino al ramo, blue, del concerto, fai un cambiamento ed un commit. -git show concert^ | grep "Vai al concerto" diff --git a/levels/it/branches/reorder b/levels/it/branches/reorder deleted file mode 100644 index d8a0212..0000000 --- a/levels/it/branches/reorder +++ /dev/null @@ -1,89 +0,0 @@ -title = Muovere i rami -cards = checkout commit-auto merge reset-hard - -[description] - -Uno dei tuoi colleghi ha fatto un casino qui e ha messo le branches nelle line temporali sbagliate! - -Potresti cancellare e ricreare queste branches - ma puoi anche muoverle direttamente in un differente commit usando: - - git checkout - -nel nome della branch e poi usare - - git reset --hard - -nel commit dove vuoi che la branch vada. - -La ciambella è nella branch giusto ma la linea temporale è incompleta - fai *mangiare* la ciambella a quella branch! - -[setup] - -echo "Tu non hai una baguette. - -Non hai un caffe. - -Non hai una ciambella." > you - -git add . -git commit -m "L'inizio" - -git checkout -b coffee -echo "Tu hai una baguette. - -Non hai un caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Compri una ciambella" - -echo "Mangi una baguette. - -Non hai un caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Mangi una baguette" - -git checkout -b baguette main -echo "Non hai una ciambella. - -Hai un caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Compri un pò di caffe" - -echo "Non hai una baguette. - -Hai bevuto caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Bevi il caffe" - -git checkout -b donut main -echo "Non hai una baguette. - -Non hai caffe. - -Hai una ciambella." > you -git add . -git commit -m "Compri una ciambella" - -git checkout --detach main - -[win] - -# Mangi una baguette nella branch delle baguette? -git show baguette:you | grep "Mangi.*baguette" - -# Bevi un caffe nella branch del caffe? -git show coffee:you | grep "Bevi.*coffe" - -# Mangi una ciambella nella branch delle ciambelle? -git show donut:you | grep "Mangi.*ciambella" - -[actions] - -test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Ricordati di controllare l'etichetta branch blue quando vuoi che cresca con la linea temporale." diff --git a/levels/it/branches/sequence b/levels/it/branches/sequence deleted file mode 100644 index 2619ea0..0000000 --- a/levels/it/branches/sequence +++ /dev/null @@ -1,6 +0,0 @@ -checkout-commit -fork -branch-create -grow -branch-remove -reorder diff --git a/levels/it/changing-the-past/rebase b/levels/it/changing-the-past/rebase deleted file mode 100644 index a704c80..0000000 --- a/levels/it/changing-the-past/rebase +++ /dev/null @@ -1,86 +0,0 @@ -title = Rebasing -cards = checkout commit-auto reset-hard rebase - -[description] - -Okay - Salta vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro il regolamento dell'International Time Travel Association. Dovrai svolgere i tuoi compiti in sequenza dopotutto. - -Vedi la carta "rebase"? Quando la trascini su di un commit, copierà dopo di esso tutti gli eventi della linea temporale su cui ti trovi! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi. - -Nuovamente, vogliamo rendere questa la nostra realtà di base - il ramo "main" dovrebbe puntare a quella linea temporale! - -[setup] - -echo "Non hai una baguette. - -Non hai caffe. - -Non hai una ciambella." > you - -git add . -git commit -m "L'inizio" - -git checkout -b baguette main -echo "Hai una baguette. - -Non hai caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Compri una baguette" - -echo "Mangi una baguette. - -Non hai caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Mangi la baguette" - -git checkout -b coffee main -echo "Non hai una baguette. - -Hai del caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Compri un pò di caffe" - -echo "Non hai una baguette. - -Hai bevuto caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Bevi il caffe" - -git checkout -b donut main -echo "Non hai una baguette - -Non hai caffe. - -Hai una ciamebella." > you -git add . -git commit -m "Compri una ciambella" - -echo "Non hai una baguette. - -Non hai caffe. - -Mangi una ciambella." > you -git add . -git commit -m "Mangi la ciambella" - -git checkout --detach main - - -[win] - -# Ordina le tre ramificazioni in una e muovi il riferimento al ramo principale -{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; } - -[congrats] - -Nota come gli altri commit e linee temporali siano ancora li - se qualcosa va storto, puoi ancora tornare in dietro. - -E' davvero difficile *distruggere* le cose con la tua macchina del tempo. diff --git a/levels/it/changing-the-past/reorder b/levels/it/changing-the-past/reorder deleted file mode 100644 index 8bbe21a..0000000 --- a/levels/it/changing-the-past/reorder +++ /dev/null @@ -1,77 +0,0 @@ -title = Riordinare gli eventi -cards = checkout commit-auto reset-hard rebase-interactive cherry-pick - -[description] - -Oops, guarda c'è qualcosa di incasinato qui. Puoi rimettere gli eventi nel corretto ordine? - -Ci sono due modi per farlo: Puoi trascinare la carta "interactive rebase" sul commit precedente a quello che vuoi cambiare, poi riordinare le linee nel file che si apre e salvarlo. -Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit (cherry-pick) nell'ordine desiderato. Hai carte per entrambe i modi! - -[setup] - -echo "Ti sei appena svegliato. - -Non indossi biancheria intima. - -Non indossi pantaloni. - -Non indossi la maglia. - -Non indossi le scarpe." > you -git add . - -git commit -m "L'inizio" - -echo "Ti sei appena svegliato. - -Non indossi biancheria intima. - -Non indossi pantaloni. - -Non indossi la maglia. - -Indossi le scarpe." > you -git commit -am "Metti le scarpe" - -echo "Ti sei appena svegliato. - -Non indossi biancheria intima. - -Indossi pantaloni. - -Non indossi la maglia. - -Indossi le scarpe." > you -git commit -am "Metti i pantaloni" - -echo "Ti sei appena svegliato. - -Indossi la biancheria intima. - -Indossi pantaloni. - -Non indossi la maglia. - -Indossi le scarpe." > you -git commit -am "Metti biancheria intima" - -echo "Ti sei appena svegliato. - -Indossi biancheria intima. - -Indossi pantaloni. - -Indossi la maglia. - -Indossi le scarpe." > you -git commit -am "Ti metti la maglia" - -[win] - -# Riordina i commit per vestirti nel modo corretto -{ git log main --oneline | perl -0777 -ne'exit(1) if not /scarpe[\s\S]*pantaloni[\s\S]*biancheria/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; } - -[congrats] - -Sentiti libero di resettare il livello e provare l'altra strategia! Qual'è quella che preferisci? diff --git a/levels/it/changing-the-past/sequence b/levels/it/changing-the-past/sequence deleted file mode 100644 index 43c5d08..0000000 --- a/levels/it/changing-the-past/sequence +++ /dev/null @@ -1,2 +0,0 @@ -rebase -reorder diff --git a/levels/it/files/files-add b/levels/it/files/files-add deleted file mode 100644 index f0149b9..0000000 --- a/levels/it/files/files-add +++ /dev/null @@ -1,31 +0,0 @@ -title = Arredatore di interni -cards = file-new file-delete - -[description] - -Ora che la tua stanza sembra in ordine, puoi iniziare a disfare le tue cose. Hai portato con te due mobili nuovi e con un sorriso luminoso, -vedi che i loro colori corrispondono al colore del tuo letto! - -Costruisci i tuoi due mobili usando la carta touch. -Quindi dai il nome ai tuoi mobili - puoi sciegliere quello che tu vuoi. - -Assicurati che i colori siano uguali! Puoi trovare il colore del letto nella descrizione. -Non dimenticare di aggiungere un colore e una descrizione anche ai tuoi nuovi mobile. - -[setup] -echo Un accogliente letto giallo. > bed - -[win] - -# Aggiungi altri due mobili -NUM_FILES="$(ls | wc -l)" -test "$NUM_FILES" -ge 3 - -# Assicurati che i colori corrispondano a quelle del tuo letto -NUM_FILES="$(ls | wc -l)" -YELLOW_FILES="$(grep -li giallo * | wc -l)" -test "$NUM_FILES" -ge 2 && test "$YELLOW_FILES" = "$NUM_FILES" - -[congrats] - -Non ti senti già più a casa? diff --git a/levels/it/files/files-delete b/levels/it/files/files-delete deleted file mode 100644 index 9b207dc..0000000 --- a/levels/it/files/files-delete +++ /dev/null @@ -1,36 +0,0 @@ -title = Coinquilini inaspettati -cards = file-delete - -[description] - -Il primo giorno alla Scuola del viaggio nel tempo sta per finire e tu ricevi le chiavi della tua stanza. -Eccitatissimo apri la porta giusto per vedere... ragnatele! Ragnatele ovunque! - -Cava tutte le ragnatele che puoi trovare con la carta remove! - -[cli] - -Nella line di comando, puoi facilmente eliminare tutti i file che finiscono in "web" usando il comando: - - rm *web - -[setup] - -echo Una piccola ragnatela è accanto alla tua finestra. > tiny_web -echo Una grande ragnatela attaccata sopra al tuo letto. > big_web -echo Un letto accogliente. > bed -echo Una ragnatela spessa è alla destra della tua porta. > thick_web - -[win] - -# Rimuovi tutte le ragnatele. -! ls | grep thick_web && -! ls | grep big_web && -! ls | grep tiny_web - -# Ma assicurati di mantenere il tuo letto! -ls | grep bed - -[congrats] - -Guarda la tua stanza adesso è davvero ordinata ed accogliente! Il momento per disfare le valige! diff --git a/levels/it/files/sequence b/levels/it/files/sequence deleted file mode 100644 index cb24408..0000000 --- a/levels/it/files/sequence +++ /dev/null @@ -1,3 +0,0 @@ -files-delete -files-add - diff --git a/levels/it/index/#sequence# b/levels/it/index/#sequence# deleted file mode 100644 index 42f7f48..0000000 --- a/levels/it/index/#sequence# +++ /dev/null @@ -1,5 +0,0 @@ -compare -new -change -reset -steps diff --git a/levels/it/index/add b/levels/it/index/add deleted file mode 100644 index e627917..0000000 --- a/levels/it/index/add +++ /dev/null @@ -1,38 +0,0 @@ -title = Updating files in the index -cards = add commit checkout - -[description] - -So you start working, and make changes to your files! Git lets you choose which of these changes you want to put in the next commit. This is like updating the index version of that file to the new version. - -This allows you to have smaller commits, that describe better what you changed! - -The command for this is the same - `git add`! - -[setup] - -echo a > a -echo b > b -echo c > c -git add . -git commit -m "Initial commit" - -[win] - -# Make changes to all files! -test "$(cat a)" != "a" && -test "$(cat b)" != "b" && -test "$(cat c)" != "c" - -# Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b! - -test "$(git show main:a)" != "a" && -test "$(git show main:b)" != "b" && -test "$(git show main:c)" != "c" && -test "$(git show main^:a)" != "a" && -test "$(git show main^:b)" == "b" && -test "$(git show main^:c)" != "c" - -[congrats] - -Well done! Try tavelling between the commits using `git checkout`, so you can look at their contents again! diff --git a/levels/it/index/change b/levels/it/index/change deleted file mode 100644 index 970ffd6..0000000 --- a/levels/it/index/change +++ /dev/null @@ -1,31 +0,0 @@ -title = Aggiornare i file nell'indice -cards = add commit - -[description] - -Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice alla nuova versione del file.. - -Proviamoci! - -Le icone nel file manager ti mostrano quando il file attuale (bianco) e la versione nell'indice (blu) differiscono o sono uguali! - -[win] - -Bene! L'indice è anche chiamato "staging area" (area di staging) - E contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`! - -[setup] - -echo "La candela brucia con una fiamma blu." > candle -git add . -git commit -m "L'inizio" - -[win] - -# Fai una modifica alla candela -test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed - -# Aggiungi la candella. -test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added - -# Fai un commit. -test "$(git diff --name-only HEAD HEAD^)" = "candle" diff --git a/levels/it/index/checkout b/levels/it/index/checkout deleted file mode 100644 index 3c01b09..0000000 --- a/levels/it/index/checkout +++ /dev/null @@ -1,25 +0,0 @@ -title = Checking out files from the index -cards = add reset-file checkout-file commit - -[description] - -So you've made changes to your files, but you decide that you don't want to keep them! You can use `git checkout` for that! - -What happens if you have already update the index, like in file c? You have to reset the index first! - -[setup] - -echo a > a -echo b > b -echo c > c -git add . -git commit -m "Initial commit" -echo x > a -echo x > b -echo x > c -git add c - -[win] - -# Remove all changes in your local files! -test "$(git diff --name-only | wc -l)" -eq 0 diff --git a/levels/it/index/compare b/levels/it/index/compare deleted file mode 100644 index 557b654..0000000 --- a/levels/it/index/compare +++ /dev/null @@ -1,51 +0,0 @@ -title = Passo dopo passo -cards = checkout commit-auto - -[description] - -Benvenuto! nella lezione di oggi impareremo come creare commits con più precisione! - -Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato, ma in una delle due è molto più semplice capire cosa è successo. - -[win] - -# Esatto! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo! -git branch --show-current | grep step-by-step - -[setup] - -echo "Una piccola ma pesante palla di vetro." > ball -echo "Un sottile libro che sta in piedi." > book -echo "Una candela brucia con una fiamma blu." > candle -echo "Un sensore di fumo. E' assolutamente silenzioso." > smoke_detector - -git add . -git commit -m "L'inizio" - -git branch -M all-at-once - -echo "La palla adesso tocca il libro." > ball -echo "Il libro è caduto." > book -echo "La candella è stata spenta." > candle - -git commit -am "La fine" - -git checkout HEAD^ - -git checkout -b step-by-step - -echo "La palla adesso tocca il libro." > ball -git commit -am "La palla rotola verso il libro" - -echo "Il libro è caduto." > book -git commit -am "Il libro è caduto" - -echo "La candela è stata spenta." > candle -git commit -am "Il libro ha spento la candela" - -git checkout HEAD~3 - -[win] - -# Prendi la sequenza temporale più chiara e fai suonare il sensore di fumo! -git show step-by-step:smoke_detector | tail -n 1 | grep -v "assolutamente silenzioso" diff --git a/levels/it/index/new b/levels/it/index/new deleted file mode 100644 index 4ce39ec..0000000 --- a/levels/it/index/new +++ /dev/null @@ -1,28 +0,0 @@ -title = Aggiungere nuovi file all'indice -cards = add commit - -[description] - -Finora, quando abbiamo eseguito un commit abbiamo sempre registrato lo stato di tutti gli oggetti, vero? - -Ma Git ti permette di scegliere i cambiamenti che si vogliono mettere in un commit! - -Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel file manager! - -Inizialmente, l'indice è vuoto. Per fare un commit che contenga un nuovo file, dobbiamo aggiungerlo! - -[cli] - -Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere il nome di un file e premi il tasto tab per completarlo. Così risparmi tempo! - -[setup] - -echo "La candela brucia con una fiamma blu." > candle - -[win] - -# Aggiungi la candela. -test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added - -# Crea un commit. -test "$(git ls-tree --name-only HEAD)" = "candle" diff --git a/levels/it/index/reset b/levels/it/index/reset deleted file mode 100644 index fd118fd..0000000 --- a/levels/it/index/reset +++ /dev/null @@ -1,37 +0,0 @@ -title = Resettare i file nell'indice -cards = add reset-file commit - -[description] - -Vedi l'ombra scura dietro le icone? Questa è la versione del file nell'ultimo commit! - -Per esempio, queste candele sono state spente e quella modifica è stata aggiunta! - -Ma è stato un errore! Vuoi solo spegnere al candela rossa nel prossimo commit! - -Se hai già aggiunto un file modificato all'indice ma vuoi ripristinarlo, puoi usare `git reset`! - -[setup] - -echo "Sta bruciando!" > red_candle -echo "Sta bruciando!" > green_candle -echo "Sta bruciando!" > blue_candle -git add . -git commit -m "L'inizio" - -echo "È stata spenta." > red_candle -echo "È stata spenta." > green_candle -echo "È stata spenta." > blue_candle -git add . - -[win] - -# Ripristina i cambiamenti nella candela verde e in quella blu! -git show :green_candle | grep burning && -git show :blue_candle | grep burning && -git show :red_candle | grep -v burning - -# E fai un commit -git show main:green_candle | grep burning && -git show main:blue_candle | grep burning && -git show main:red_candle | grep -v burning diff --git a/levels/it/index/rm b/levels/it/index/rm deleted file mode 100644 index 637fd22..0000000 --- a/levels/it/index/rm +++ /dev/null @@ -1,24 +0,0 @@ -title = Delete a file in the next commit -cards = add reset-file checkout-file rm file-delete commit - -[description] - -If you want to remove a file in the next commit, you can use `git rm`! This will both delete the file locally, and in the index. - -If a file is modified, you'll need to reset these changes first/reset the files. - -[setup] - -echo a > a -echo x > b -echo x > c -git add . -git commit -m "Initial commit" -echo x > a -echo b > b -git add b - -[win] - -# Make a commit where all files are deleted ¯\_(^_^)_/¯ -test "$(git ls-tree main | wc -l)" -eq 0 diff --git a/levels/it/index/sequence b/levels/it/index/sequence deleted file mode 100644 index 42f7f48..0000000 --- a/levels/it/index/sequence +++ /dev/null @@ -1,5 +0,0 @@ -compare -new -change -reset -steps diff --git a/levels/it/index/steps b/levels/it/index/steps deleted file mode 100644 index 8c13af7..0000000 --- a/levels/it/index/steps +++ /dev/null @@ -1,53 +0,0 @@ -title = Aggiungere le modifice una per volta -cards = add reset-file commit - -[description] - -L'indice è veramente utile perché ci permette di essere precisi su quali cambiamenti vogliamo includere in ogni commit! - -[setup] - -echo "Un martello, in equilibrio sul suo manico." > hammer -echo "Una bottiglia contenente un liquido trasparente." > bottle -echo "Un cubetto di zucchero bianco." > sugar_cube - -git add . -git commit -m "L'inizio" - -[win] - -# Fai dei cambiamenti a tutti e tre gli oggetti per creare una sequenza logica di eventi! -test "$(git diff --name-only | wc -l)" -eq 3 || file -f .git/candle-changed && touch .git/candle-changed - -# Aggiungi solo uno dei cambiamenti! -test "$(git diff --cached --name-only | wc -l)" -eq 1 || file -f .git/candle-added && touch .git/candle-added - -# E fai un commit -COUNT=0 -for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do - if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then - COUNT=$((COUNT+1)) - fi -done - -test "$COUNT" -ge 1 - -# Fai un secondo commit che registri solo un singolo cambiamento. -COUNT=0 -for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do - if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then - COUNT=$((COUNT+1)) - fi -done - -test "$COUNT" -ge 2 - -# E aggiungine un terzo. -COUNT=0 -for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do - if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then - COUNT=$((COUNT+1)) - fi -done - -test "$COUNT" -ge 3 diff --git a/levels/it/intro/cli b/levels/it/intro/cli deleted file mode 100644 index c643fc1..0000000 --- a/levels/it/intro/cli +++ /dev/null @@ -1,27 +0,0 @@ -title = La line di comando -cards = - -[description] - -Queste carte da gioco sono state disegnate per essere usate e ricordate facilmente! Ti consigliamo di attenerti a loro se non hai molta esperienza di Git! - -[cli] - -Ma c'è un'altra via per interagire con Git: - -Prova a digitare `git init` nel terminale qui sotto e premere il pulsante Enter! - -[setup] - -rm -rf .git - -[win] - -# Inizializza la macchina del tempo! -test -d .git - -[congrats] - -Perfetto! Al posto di usare le carte da gioco, puoi anche fare tutto dalla line di comando! - -La line di comando e piuttosto potente! A volte, puoi usarla per risolvere le attività più velocemente che con l'interfaccia grafica. diff --git a/levels/it/intro/commit b/levels/it/intro/commit deleted file mode 100644 index 1141ae1..0000000 --- a/levels/it/intro/commit +++ /dev/null @@ -1,32 +0,0 @@ -title = Il tuo primo commit! -cards = commit-auto - -[description] - -Puoi usare la tua macchina del tempo per scattare istantanee degli oggetti intorno a te! Qui puoi metterlo in pratica! - -(Il tuo insegnante versa un pò di acqua nel bicchiere) - -[cli] -Nuovamente, al posto di usare le carte, puoi scrivere i comandi, che sono stampati sulle carte, nel terminale in basso! - -Questo è totalmente opzionale! Ma questa è una conoscenza super utile nel mondo reale - e ti farà avere un distintivo scintillante! :) - -[setup] - -echo "Il bicchiere è pieno di acqua." > glass - -[win] - -# Crea un'istantanea del bicchiere (un "commit") -git rev-parse HEAD - -# Cambia il contenuto del bicchiere! -! test "$(cat glass)" = "Il bicchiere è pieno di acqua." - -# E crea un secondo "commit"! -git rev-parse HEAD^ && ! test "$(git show main:glass)" = "Il bicchiere è bieno di acqua." - -[congrats] - -Perfetto! Puoi provare a creare altri "commit". Quando ti sentirai a posto, premi su "Next Level". diff --git a/levels/it/intro/copies b/levels/it/intro/copies deleted file mode 100644 index 8f8d6ce..0000000 --- a/levels/it/intro/copies +++ /dev/null @@ -1,42 +0,0 @@ -title = Crea una copia -cards = - -[description] - -Questa volta, stai facendo molte copie di backup - puoi guardarli cliccandoci sopra! - -[congrats] - -Okay, questo è un modo di lavorare. - -Ma sei preoccupato che ti ritroverai con centinaia di copie di questo modulo e sarà difficile tenerne traccia nel tempo. - -Specialmente quando lavori con altre persone, inviare copie avanti ed indietro non sembra l'ideale. - -Fermati, devi provare questa macchina del tempo! - -[setup] - -rm -rf .git - -echo "~ Perchè voglio imparare Git ~ - -(Devo ancora scriverlo.)" >> form.txt - - -echo "~ Perchè volgio imparare Git ~ - -- Così posso annullare gli errori" >> form2.txt - - -echo "~ Perchè volgio imparare Git ~ - -- Così posso annullare gli errori -- Per tracciare i mie progetti attraverso il tempo" >> form2_final.txt - -cp form2_final.txt form2_really_final.txt - -[win] - -# Aggiungi una nuova line al file form2_really_final.txt! -test "$(cat form2_really_final.txt | wc -l )" -ge 5 diff --git a/levels/it/intro/init b/levels/it/intro/init deleted file mode 100644 index 260f6e9..0000000 --- a/levels/it/intro/init +++ /dev/null @@ -1,24 +0,0 @@ -title = Entra nella machina del tempo -cards = init - -[description] - -Sei stato accettato nella scuola della macchina del tempo! Questo è il tuo primo giorno! Il tuo insegnate ti spiega: - -"Per fare qualsiasi cosa con una macchina del tempo, devi prima inizializzarla!" - -Trascina quella carta blu verso l'alto per usarla! - -[setup] - -rm -rf .git - -[win] - -# Inizializzazione della macchina del tempo -test -d .git - -[congrats] - -Perfetto! Vedi quel piccolo animale che è apparso? Sarà il tuo compagno e ti mostrerà dove ti trovi nel tempo! - diff --git a/levels/it/intro/remote b/levels/it/intro/remote deleted file mode 100644 index c0b582a..0000000 --- a/levels/it/intro/remote +++ /dev/null @@ -1,52 +0,0 @@ -title = Dai lavoriamo tutti assieme -cards = pull commit-auto push - -[description] - -Aggiungi il tuo nome nella nostra lista di studenti! - -Ho già un secondo "commit" nella mia macchina del tempo - Dai lavoriamo tutti assieme! - -[cli] - -Per tornare in dietro alle vecchie istruzioni, puoi premere la freccia in alto o in basso. In questo modo non devi digitare, nuovamente, le istruzioni. - -[congrats] - -Benvenuto nella scuola del viaggio nel tepo! :) Ci vediamo domani per la tua prima lezione! - -[setup] - -echo "~ Lista degli attuali studenti ~" > students -git add . -git commit -m "Versione iniziale" -git push -u teacher main - -git update-ref -d refs/remotes/teacher/main - -[setup teacher] - -git reset --hard main - -echo " -- Sam -- Alex" >> students - -git add . -git commit -m "Aggiunti due studenti" - -[win] - -# Ottieni il secondo "commit" dal tuo insegnante usando `git pull`. -test "$(git log --oneline teacher/main | wc -l)" -ge 2 - -# Aggiungi il tuo nome alla lista degli studenti. -test "$(cat students |wc -l)" -ge 5 - -# Crea un'istantanea dei risultati. -test "$(git show main:students |wc -l)" -ge 5 - -[win teacher] - -# E usa `git push` per inviarlo al tuo insegnante! -test "$(git show main:students |wc -l)" -ge 5 diff --git a/levels/it/intro/risky b/levels/it/intro/risky deleted file mode 100644 index 57a52d1..0000000 --- a/levels/it/intro/risky +++ /dev/null @@ -1,42 +0,0 @@ -title = Vivere è pericoloso -cards = - -[description] - -Quindi hai deciso di fare domanda per la scuola di viaggio nel tempo, per usare la macchina del tempo chiamata "Git"! - -Che emozione! - -Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il quale vuoi imparare Git. - -[congrats] - -All'improvviso, il tuo gatto salta sul tavolo, strappa via il modulo, e scappa via! Oh no. Tutto il tuo duro lavoro, andato! - -Devi trovare una buona soluzione. - -(Premi "Prossimo livello" appena sei pronto!) - -[setup] - -rm -rf .git - -echo "~ Perchè voglio imparare Git ~ - -- Così posso cancellare gli errori -- Per seguire il mio progetto attraverso il tempo" >> form.txt - -[actions] - -test "$(cat form.txt | wc -l )" -ge 5 && echo "(E' stato rubato dal tuo gatto.) - - - - - -" > form.txt - -[win] - -# Aggiungi un'altra line a form.txt! -test "$(cat form.txt | wc -l )" -ge 5 diff --git a/levels/it/intro/sequence b/levels/it/intro/sequence deleted file mode 100644 index aa225df..0000000 --- a/levels/it/intro/sequence +++ /dev/null @@ -1,6 +0,0 @@ -risky -copies -init -cli -commit -remote diff --git a/levels/it/intro/who-are-you b/levels/it/intro/who-are-you deleted file mode 100644 index abb94f3..0000000 --- a/levels/it/intro/who-are-you +++ /dev/null @@ -1,38 +0,0 @@ -title = Benvenuto nella scuola del viaggio nel tempo! -cards = config-name commit-auto checkout - -[description] - -Sei ancora confuso da tutto quello che sta succedendo. Il giorno seguente, decidi di iscriverti nella scuola del viaggio nel tempo! - -Il tuo insegnante del viaggio nel tempo ti saluta: "Ciao come va! Vuoi dirci il tuo nome?" - -[setup] - -git config --global user.name "TU" - -echo "~ Chi vuole imparare come si usa la macchina del tempo? ~ - -[ ] Per essere sicuro che il mio gatto non mangi il mio lavoro. -[ ] Così non devo tenere copie di tutti i miei saggi. -[ ] Per collaborare con altri studenti del viaggio nel tempo. -[ ] Altro, perfavore specifica:" > form - -[actions] - -test "$(git config user.name)" != "TU" && cat form | grep -v Signature && echo " -Firma: $(git config user.name)" >> form - -[win] - -# Presentati. -test "$(git config user.name)" != "TU" - -# Compila l'iscrizione e inviala! -git show main:form | grep '\[[xX]\]' - -[congrats] - -"Siamo lieti di averti con noi! - -Git puoi aiutarti a correggere i problemi del passato! Ti aiuta a collaborare con gli studenti del viaggio nel tempo! E' davvero potente e e popolare! Ci vediamo domani per la tua prima lezione!" diff --git a/levels/it/low-level/basics b/levels/it/low-level/basics deleted file mode 100644 index 55374b5..0000000 --- a/levels/it/low-level/basics +++ /dev/null @@ -1,26 +0,0 @@ -[description] - -For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful: - -- ls -- echo content > file -- cat file -- mkdir dir - -Find the riddle in your current directory and put the answer into the file "answer"! - -[congrats] - -Omnomnom! - -For technical reasons, you can't use `cd` in this prototype yet. But there won't be a lot of interaction with the file system anyways. :) - -[setup] - -mkdir riddle -echo "ppl p" > riddle/consonants -echo "ae ie" > riddle/vowels - -[win] - -cat answer | grep -i "apple \\?pie" diff --git a/levels/it/low-level/blob-create b/levels/it/low-level/blob-create deleted file mode 100644 index 86f6254..0000000 --- a/levels/it/low-level/blob-create +++ /dev/null @@ -1,38 +0,0 @@ -[description] - -At its core, Git is very simple. It stores "objects", which are basically files identified by an "identifier" (short: ID). - -There are four types of objects: blobs, trees, commits, and tags. The simplest type is a "blob", which is just a piece of text. - -Let's create some blobs! To do that, create a file with the desired content, and then use - - git hash-object -w - -The flag -w means "write", and tells Git to actually write the new blob to the disk. - -Create three new blobs! - -[congrats] - -Tip: You can also use a command like this to create a blob in a single line: - - echo "awesome content" | git hash-object -w --stdin - -Did you already notice that you can drag and drop all objects? :) - -[setup] - -[setup goal] - -echo "Hi" > file1 -echo "Ho" > file2 -echo "Hu" > file3 -git hash-object -w file1 -git hash-object -w file2 -git hash-object -w file3 - -[win] - -BLOB_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep blob | wc -l) - -test "$BLOB_COUNT" -gt 2 diff --git a/levels/it/low-level/blob-remove b/levels/it/low-level/blob-remove deleted file mode 100644 index bbc1b30..0000000 --- a/levels/it/low-level/blob-remove +++ /dev/null @@ -1,27 +0,0 @@ -[description] - -There's a simple command to remove all objects that are not referenced by anything: - - git prune - -Remove all blobs in this repository. - -[congrats] - -Generally, `git prune` will be useful if you want to clean up some objects you made. - -Alternatively, you can also click the "Reload" button to restart a level. - -[setup] - -echo "My master password is a1b2c3d4e5" | git hash-object -w --stdin -echo "This blob really should not exist" | git hash-object -w --stdin -echo "This is a virus" | git hash-object -w --stdin - -[setup goal] - -[win] - -OBJECT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | wc -l) - -test "$OBJECT_COUNT" -eq 0 diff --git a/levels/it/low-level/commit-create b/levels/it/low-level/commit-create deleted file mode 100644 index 79a8e52..0000000 --- a/levels/it/low-level/commit-create +++ /dev/null @@ -1,37 +0,0 @@ -[description] - -So a tree describes a directory structure at a specific point in time. - -It would be nice if we could remember when that state existed, and who authored it, right? - -Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using - - git commit-tree -m "Description of your commit" - -Make a commit from the tree in this repository! - -[setup] - -touch empty_file -git add . -git write-tree - -rm empty_file -git update-index --remove empty_file - -[setup goal] - -touch empty_file -git add . -git write-tree - -rm empty_file -git update-index --remove empty_file - -git commit-tree 3185 -m 'Clever commit message' - -[win] - -COMMIT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | wc -l) - -test "$COMMIT_COUNT" -gt 0 diff --git a/levels/it/low-level/commit-parents b/levels/it/low-level/commit-parents deleted file mode 100644 index a2efb11..0000000 --- a/levels/it/low-level/commit-parents +++ /dev/null @@ -1,31 +0,0 @@ -[description] - -When using the commit-tree command, you can optionally specify a parent: - - git commit-tree -m "Description" -p - -Make a string of three commits! - -Hint: You'll need a tree object. What could be the easiest way to obtain one? - -[setup] - -[setup goal] - -git write-tree -FIRST_COMMIT=$(git commit-tree 4b82 -m 'First commit :O') -SECOND_COMMIT=$(git commit-tree 4b82 -p $FIRST_COMMIT -m 'Second commit :D') -THIRD_COMMIT=$(git commit-tree 4b82 -p $SECOND_COMMIT -m 'Third commit \o/') - -[win] - -COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ") - -for COMMIT in $COMMITS; do - echo a commit named $COMMIT - if [ $(git rev-list $COMMIT | wc -l) -ge 3 ]; then - return 0 - fi -done - -return 1 diff --git a/levels/it/low-level/commit-rhombus b/levels/it/low-level/commit-rhombus deleted file mode 100644 index e320ca0..0000000 --- a/levels/it/low-level/commit-rhombus +++ /dev/null @@ -1,30 +0,0 @@ -[description] - -A commit can have multiple parents! You can specify the -p option multiple times, like this: - - git commit-tree -m "Description" -p -p - -Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them. - -[setup] - -[setup goal] - -TREE=$(git write-tree) -SOUTH=$(git commit-tree $TREE -m "South") -EAST=$(git commit-tree $TREE -m "East" -p $SOUTH) -WEST=$(git commit-tree $TREE -m "West" -p $SOUTH) -NORTH=$(git commit-tree $TREE -m "Nort" -p $EAST -p $WEST) - -[win] - -COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ") - -for COMMIT in $COMMITS; do - # My first parent's parents has to be the same as my second parent's parent. - if [ "$(git rev-parse --verify -q $COMMIT^1^)" = "$(git rev-parse --verify -q $COMMIT^2^)" ]; then - return 0 - fi -done - -return 1 diff --git a/levels/it/low-level/index-add b/levels/it/low-level/index-add deleted file mode 100644 index 633245c..0000000 --- a/levels/it/low-level/index-add +++ /dev/null @@ -1,37 +0,0 @@ -[description] - -Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name! - -Git has a very powerful concept to store metadata related to blobs: the index! It's a list that relates blobs to filenames and access permissions. - -The most convenient option to add an entry to the index is via an existing file: - - echo "my content" > file - git update-index --add file - -Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like "directory/file"? - -[congrats] - -There's another way to add an entry to the index directly: - - git update-index --add --cacheinfo ,, - -The first three numbers of the mode describe the type of the entry, "100" is a regular file. - -The second three number describe the permissions. Only "644" (non-executable) and "755" (executable) are supported. - -You can insert the hash of an object into the terminal by right-clicking on it! :) - -[setup] - -[setup goal] - -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 -git add . - -[win] - -test "$(git ls-files | wc -l)" -ge 3 diff --git a/levels/it/low-level/index-remove b/levels/it/low-level/index-remove deleted file mode 100644 index 9816126..0000000 --- a/levels/it/low-level/index-remove +++ /dev/null @@ -1,29 +0,0 @@ -[description] - -To remove an entry from the index, use a command like this: - - git update-index --force-remove - -Remove all entries from the index! - -[setup] - -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 -git add . - -[setup goal] - -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 -git add . - -git update-index --force-remove file1 -git update-index --force-remove file2 -git update-index --force-remove file3 - -[win] - -test "$(git ls-files | wc -l)" -eq 0 diff --git a/levels/it/low-level/index-update b/levels/it/low-level/index-update deleted file mode 100644 index 047493d..0000000 --- a/levels/it/low-level/index-update +++ /dev/null @@ -1,33 +0,0 @@ -[description] - -Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry! - -Put the content you want in a file with a matching name, and then run - - git update-index - -This will create a new blob, and update the hash of the entry to that blob. - -Update an entry in the index! - -[setup] - -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 -git add . - -[setup goal] - -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 -git add . - -echo "new content" > file1 -git update-index file1 - -[win] - -# This is not really a good test for the winning condition... -test "$(git ls-files -s | git hash-object --stdin)" != "10c4b28623e7e44e09f5a596450a50ab7ac31fbe" -a "$(git ls-files | wc -l)" -eq 3 diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/it/low-level/puzzle-apocalypse deleted file mode 100644 index 119784d..0000000 --- a/levels/it/low-level/puzzle-apocalypse +++ /dev/null @@ -1,41 +0,0 @@ -[description] - -Delete all objects in this repository using git commands only! - -Useful commands: - - git prune - git reflog expire - -[setup] - -echo foo > foo -BLOB=$(git hash-object -w foo) -echo bar > bar -git add . -git commit -m "Initial commit" -echo blabber >> bar -git commit -a -m "Second commit" -git update-ref refs/important HEAD -git update-ref refs/interesting "$BLOB" - -[setup goal] - -echo foo > foo -BLOB=$(git hash-object -w foo) -echo bar > bar -git add . -git commit -m "Initial commit" -echo blabber >> bar -git commit -a -m "Second commit" -git update-ref refs/important HEAD -git update-ref refs/interesting "$BLOB" - -TREE=$(git mktree) -git read-tree $TREE -rm -rf .git/refs/* -rm -rf .git/objects/* - -[win] - -test "$(git cat-file --batch-check --batch-all-objects | wc -l)" -eq 0 diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/it/low-level/puzzle-precious-blob deleted file mode 100644 index 865cfdf..0000000 --- a/levels/it/low-level/puzzle-precious-blob +++ /dev/null @@ -1,28 +0,0 @@ -[description] - -Create two trees pointing to the same blob! - -[setup] - -[setup goal] - -BLOB=$(echo "I am precious" | git hash-object -w --stdin) -git update-index --add --cacheinfo 100644,$BLOB,a -git write-tree -git update-index --force-remove a -git update-index --add --cacheinfo 100644,$BLOB,b -git write-tree -git update-index --force-remove b - -[win] - -TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") - -ALL_TREE_CHILDREN=$(for TREE in $TREES; do - git cat-file -p $TREE | cut -f1 | cut -f3 -d" " -done) - -NUMBER_OF_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | wc -l) -UNIQUE_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | sort -u | wc -l) - -test "$NUMBER_OF_CHILDREN" -gt "$UNIQUE_CHILDREN" diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/it/low-level/puzzle-trees-all-the-way-down deleted file mode 100644 index bc3e58a..0000000 --- a/levels/it/low-level/puzzle-trees-all-the-way-down +++ /dev/null @@ -1,34 +0,0 @@ -[description] - -Construct a chain of three trees, which don't point to anything else. - -This is hard! The `git mktree` command might be useful. - -[setup] - -[setup goal] - -git mktree -TREE=$(echo -e "040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\tdir" | git mktree) -echo -e "040000 tree $TREE\tdir" | git mktree - -[win] - -TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") - -for TREE in $TREES; do - if [ "$(git cat-file -p $TREE | wc -l)" -eq 1 ]; then - if [ "$(git cat-file -p $TREE | cut -f1 | grep tree | wc -l)" -eq 1 ]; then - # So the tree has exactly one child, and it is a tree! - TREE2=$(git cat-file -p $TREE | cut -f1 | grep tree | cut -f3 -d" ") - if [ "$(git cat-file -p $TREE2 | wc -l)" -eq 1 ]; then - if [ "$(git cat-file -p $TREE2 | cut -f1 | grep tree | wc -l)" -eq 1 ]; then - # Same for its child! \o/ - return 0 - fi - fi - fi - fi -done - -return 1 diff --git a/levels/it/low-level/ref-create b/levels/it/low-level/ref-create deleted file mode 100644 index 1cc4bcf..0000000 --- a/levels/it/low-level/ref-create +++ /dev/null @@ -1,42 +0,0 @@ -[description] - -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/ - -Make sure to always start a ref's name with "refs/"! That's a convention that helps Git find all refs you create. If you forget the "refs/", you will not see the ref. - -Create refs that point to all objects in this repository! - -[setup] - -echo hello > hello -echo world > world -BLOB1=$(git hash-object -w hello) -BLOB2=$(git hash-object -w world) -git add . -TREE=$(git write-tree) -COMMIT=$(git commit-tree $TREE -m "Initial commit") - -[setup goal] - -echo hello > hello -echo world > world -BLOB1=$(git hash-object -w hello) -BLOB2=$(git hash-object -w world) -git add . -TREE=$(git write-tree) -COMMIT=$(git commit-tree $TREE -m "Initial commit") - -git update-ref refs/a $BLOB1 -git update-ref refs/b $BLOB2 -git update-ref refs/c $TREE -git update-ref refs/d $COMMIT - -[win] - -OBJECTS=$(git cat-file --batch-check='%(objectname)' --batch-all-objects | sort) -REF_TARGETS=$(git show-ref -s | sort | uniq) -test "$OBJECTS" = "$REF_TARGETS" diff --git a/levels/it/low-level/ref-move b/levels/it/low-level/ref-move deleted file mode 100644 index e3b29e3..0000000 --- a/levels/it/low-level/ref-move +++ /dev/null @@ -1,41 +0,0 @@ -[description] - -You can point refs to a new location using the same command you use to create them: - - git update-ref refs/ - -As an exercise, make all refs in this repository point to the tree object! - -[setup] - -echo hello > hello -echo world > world -BLOB1=$(git hash-object -w hello) -BLOB2=$(git hash-object -w world) -git add . -TREE=$(git write-tree) -COMMIT=$(git commit-tree $TREE -m "Initial commit") - -git update-ref refs/a "$BLOB1" -git update-ref refs/b "$COMMIT" - -[setup goal] - -echo hello > hello -echo world > world -BLOB1=$(git hash-object -w hello) -BLOB2=$(git hash-object -w world) -git add . -TREE=$(git write-tree) -COMMIT=$(git commit-tree $TREE -m "Initial commit") - -git update-ref refs/a "$BLOB1" -git update-ref refs/b "$COMMIT" - -for REF in $(git for-each-ref --format='%(refname)'); do - git update-ref "$REF" "$TREE" -done - -[win] - -test "$(git show-ref -s | sort -u)" = "c7863f72467ed8dd44f4b8ffdb8b57ca7d91dc9e" diff --git a/levels/it/low-level/ref-remove b/levels/it/low-level/ref-remove deleted file mode 100644 index d1fa982..0000000 --- a/levels/it/low-level/ref-remove +++ /dev/null @@ -1,41 +0,0 @@ -[description] - -And finally, to delete a ref, use - - git update-ref -d refs/ - -Delete all refs! :P (Well, except for HEAD. HEAD is special.) - -[setup] - -echo hello > hello -echo world > world -BLOB1=$(git hash-object -w hello) -BLOB2=$(git hash-object -w world) -git add . -TREE=$(git write-tree) -COMMIT=$(git commit-tree $TREE -m "Initial commit") - -git update-ref refs/best_blob_ever "$BLOB1" -git update-ref refs/beautiful_commit "$COMMIT" - -[setup goal] - -echo hello > hello -echo world > world -BLOB1=$(git hash-object -w hello) -BLOB2=$(git hash-object -w world) -git add . -TREE=$(git write-tree) -COMMIT=$(git commit-tree $TREE -m "Initial commit") - -git update-ref refs/best_blob_ever "$BLOB1" -git update-ref refs/beautiful_commit "$COMMIT" - -for REF in $(git for-each-ref --format='%(refname)'); do - git update-ref -d "$REF" -done - -[win] - -test "$(git show-ref | wc -l)" -eq 0 diff --git a/levels/it/low-level/sequence b/levels/it/low-level/sequence deleted file mode 100644 index 5feb0c8..0000000 --- a/levels/it/low-level/sequence +++ /dev/null @@ -1,18 +0,0 @@ -welcome -basics -blob-create -blob-remove -index-add -index-remove -index-update -tree-create -tree-read -tree-nested -commit-create -commit-parents -commit-rhombus -ref-create -ref-move -ref-remove -symref-create -symref-no-deref diff --git a/levels/it/low-level/symref-create b/levels/it/low-level/symref-create deleted file mode 100644 index da933cb..0000000 --- a/levels/it/low-level/symref-create +++ /dev/null @@ -1,21 +0,0 @@ -[description] - -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 - -Create a symbolic ref called "refs/rainbow"! - -[setup] - -[setup goal] - -BLOB=$(git hash-object -w --stdin) -git update-ref refs/double "$BLOB" -git symbolic-ref refs/rainbow refs/double - -[win] - -git symbolic-ref refs/rainbow diff --git a/levels/it/low-level/symref-no-deref b/levels/it/low-level/symref-no-deref deleted file mode 100644 index 458e669..0000000 --- a/levels/it/low-level/symref-no-deref +++ /dev/null @@ -1,46 +0,0 @@ -[description] - -When you have a symbolic ref (a ref pointing at another ref), and you decide you want it to be a regular ref again (pointing to an object), you're in for some trouble! :) - -What happens when you try pointing the symbolic ref directly to the blob using `git update-ref`? - -Oops! Turns out that when you reference a symbolic ref, it acts as if you had specified the ref it points to. To de-symbolic-ize it, use the `--no-deref` option directly after `update-ref`! - -Weird, huh? - -[congrats] - -Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs! - -You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :) - -Everything else is just convention and high-level commands that make interacting with the objects more convenient. - -We haven't covered: - -- tag objects (they are the fourth object type - a bit like refs with a description and an author) -- configuration (allows you to specify remote repositories, for example) -- working with local files (which is, uh, arguably pretty important :P) - -Thanks for playing! You're welcome to check out the "puzzle" levels in the dropdown, some of them are more advanced! - -[setup] - -BLOB1=$(echo delicious | git hash-object -w --stdin) -BLOB2=$(echo very | git hash-object -w --stdin) -git update-ref refs/curly "$BLOB1" -git symbolic-ref refs/fries refs/curly - -[setup goal] - -BLOB1=$(echo delicious | git hash-object -w --stdin) -BLOB2=$(echo very | git hash-object -w --stdin) -git update-ref refs/curly "$BLOB1" -git symbolic-ref refs/fries refs/curly - -git update-ref --no-deref refs/fries "$BLOB2" - -[win] - -git symbolic-ref refs/fries && return 1 -test "$(git show-ref -s refs/fries)" = "035e2968dafeea08e46e8fe6743cb8123e8b9aa6" diff --git a/levels/it/low-level/tree-create b/levels/it/low-level/tree-create deleted file mode 100644 index 3da3618..0000000 --- a/levels/it/low-level/tree-create +++ /dev/null @@ -1,35 +0,0 @@ -[description] - -After carefully building the index we want, it would be nice to save a permanent snapshot of it, right? - -This is what the second type of objects is for: trees! You can convert the index into a tree using - - git write-tree - -Try it! :) - -[congrats] - -Nice! - -Can you make a different tree? Modify the index, then call `git write-tree` again! - -[setup] - -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 -git add . - -[setup goal] - -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 -git add . - -git write-tree - -[win] - -git cat-file -p 21a638f28022064c1f1df20844278b494d197979 diff --git a/levels/it/low-level/tree-nested b/levels/it/low-level/tree-nested deleted file mode 100644 index c7afce8..0000000 --- a/levels/it/low-level/tree-nested +++ /dev/null @@ -1,38 +0,0 @@ -[description] - -Trees can also point to other trees! This way, they can describe nested directory structures. - -When you add a file inside of a directory to the index, and then call `git write-tree`, it will create a nested tree for the directory, and attach the blob to it. - -To solve this level, build a little stick figure, as shown on the left - a tree that points to two blobs, as well to a tree that points to two blobs. - -[setup] - -[setup goal] - -echo "I'm the left arm" > arm1 -echo "I'm the right arm" > arm2 -mkdir hip -echo "I'm the left leg" > hip/leg1 -echo "I'm the right leg" > hip/leg2 -git add . -git write-tree - -[win] - -TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") - -for OUTER_TREE in $TREES; do - NUMBER_OF_BLOB_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep blob | wc -l) - NUMBER_OF_TREE_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep tree | wc -l) - - if [ $NUMBER_OF_BLOB_CHILDREN -eq 2 -a $NUMBER_OF_TREE_CHILDREN -eq 1 ]; then - TREE_CHILD=$(git cat-file -p $OUTER_TREE | cut -f1 | grep tree | cut -d" " -f3) - NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD=$(git cat-file -p $TREE_CHILD | cut -f2 -d" " | grep blob | wc -l) - if [ $NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD -eq 2 ]; then - return 0 - fi - fi -done - -return 1 diff --git a/levels/it/low-level/tree-read b/levels/it/low-level/tree-read deleted file mode 100644 index ba8c440..0000000 --- a/levels/it/low-level/tree-read +++ /dev/null @@ -1,51 +0,0 @@ -[description] - -As soon as you have some tree objects, you can always read them and set the index exactly to their content! Unsurprisingly, the command is called - - git read-tree - -For , you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal! - -Try reading some of the trees in this repository into the index! - -[setup] - -EMPTY_TREE=$(git write-tree) - -echo "file 1" > file1 -echo "file 2" > file2 -git add . -git write-tree - -rm * -echo "file A" > fileA -echo "file B" > fileB -echo "file C" > fileC -git add . -TRIPLE_TREE=$(git write-tree) - -git read-tree "$EMPTY_TREE" - -[setup goal] - -EMPTY_TREE=$(git write-tree) - -echo "file 1" > file1 -echo "file 2" > file2 -git add . -git write-tree - -rm * -echo "file A" > fileA -echo "file B" > fileB -echo "file C" > fileC -git add . -TRIPLE_TREE=$(git write-tree) - -git read-tree "$EMPTY_TREE" - -git read-tree "$TRIPLE_TREE" - -[win] - -test "$(git ls-files | wc -l)" -gt 0 diff --git a/levels/it/low-level/welcome b/levels/it/low-level/welcome deleted file mode 100644 index d669136..0000000 --- a/levels/it/low-level/welcome +++ /dev/null @@ -1,33 +0,0 @@ -[description] - -This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3 - -You can interact with the repository labelled "yours" by typing Bash commands in the terminal below! The visualization will show you its internal status. - -Let's get started by initializing an empty Git repository in the current directory by typing: - - git init - -[congrats] - -Well done! - -An empty Git repository is... well, quite empty. The only thing that always exists is a reference called "HEAD" - we'll learn what that is later! - -But first, let's look at some basics! - -(Click "Next Level" as soon as you're ready!) - -[setup] - -rm -rf .git - -[setup goal] - -rm -rf .git - -git init - -[win] - -test -d .git diff --git a/levels/it/merge/conflict b/levels/it/merge/conflict deleted file mode 100644 index 645b5ed..0000000 --- a/levels/it/merge/conflict +++ /dev/null @@ -1,47 +0,0 @@ -title = Contraddizioni -cards = checkout commit-auto merge reset-hard - -[description] - -A volte le linee temporali si contraddicono a vicenda. - -Per esempio, in questo caso, un nostro cliente vuole che queste linee temporali siano unite ma hanno mangiato cose differenti in entrambe le linee temporali. - -Prova ad unirle! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare l'elemento problematico, ti verranno mostrate le parti che vanno in conflitto. Puoi mantenere una delle due versioni o creare una combinazione di entrambe! Poi rimuovi i marcatori >>>, <<<, e === e crea un nuovo commit per finalizare l'unione! - -La tua linea temporale definitiva è "main". - -[setup] - -echo "Si è appena svegliato. È affamato." > sam -git add . -git commit -m "L'inizio" - -git checkout -b pancakes -echo "Ha fatto colazione con pancakes ai mirtilli e sciroppo d'acero." > sam -git add . -git commit -m "Pancakes!" - -echo " -È al lavoro." >> sam -git commit -am "Va al lavoro" - -git checkout -b muesli main -echo "Ha fatto colazione con muesli all'avena e fragole." > sam -git add . -git commit -m "Muesli!" - -echo " -È al lavoro." >> sam -git commit -am "Va al lavoro" - -git checkout main - -[win] - -# Crea un compromesso tra le due colazioni nel branch "main". -git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)" - -[congrats] - -Yum, questa sembra una buona colazione! diff --git a/levels/it/merge/merge b/levels/it/merge/merge deleted file mode 100644 index 9050cb7..0000000 --- a/levels/it/merge/merge +++ /dev/null @@ -1,82 +0,0 @@ -title = Unire le linee temporali -cards = checkout commit-auto merge - -[description] - -Ecco un trucco per domire un pò più a lungo: svolgi tutte le tue attività mattutine in universi paralleli, e poi uniscile! - -[setup] - -echo "Non hai una baguette. - -Non hai caffe. - -Non hai una ciambella." > you - -git add . -git commit -m "L'inizio" - -echo "Hai una baguette. - -Non hai caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Compri una baguette" - -echo "Mangi una baguette. - -Non hai caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Mangi la baguette" - -git checkout HEAD~2 -echo "Non hai una baguette. - -Hai caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Compri un pò di caffe" - -echo "Non hai una baguette. - -Bevi il caffe. - -Non hai una ciambella." > you -git add . -git commit -m "Bevi il caffe" - -git checkout HEAD~2 -echo "Non hai una baguette. - -Non hai caffe. - -Hai una ciambella." > you -git add . -git commit -m "Compri una ciambella" - -echo "Non hai una baguette. - -Non hai caffe. - -Mangi una ciambella." > you -git add . -git commit -m "Mangi la ciambella" - -git checkout --detach -git branch -D main - -[win] - -# Crea una situazione dove consumi una baguette, un caffe e una ciambella. -{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*caffe"; } && { git show HEAD:you | grep "Mangi.*ciambella"; } - -# Crea (e spostati su) un commit di unione. -test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2 - -[congrats] - -Mi chiedo se sei più rilassato quando *dormi* in linee temporali parallele... diff --git a/levels/it/merge/merge-abort b/levels/it/merge/merge-abort deleted file mode 100644 index efabb5d..0000000 --- a/levels/it/merge/merge-abort +++ /dev/null @@ -1,54 +0,0 @@ -title = Interrompere un merge -cards = checkout commit-auto merge merge-abort - -[description] - -Può capitare che tu voglia unire il contenuto di due commit ma si verifica un conflitto che al momento non vuoi risolvere. - -In queste situazioni, puoi interrompere il merge per riprendere successivamente. Usa - git merge --abort -mentre sei nel processo di merge. - -Prova a unire i due commit e interrompi la procedura di merge. - -[setup] - -echo "Un nuovo giorno sta iniziando" > you - -git add . -git commit -m "Start" - -echo "Stai camminando sulla corsia principale." >> you - -git add . -git commit -m "Corsia Principale" - - -git checkout HEAD~1 - -echo "Stai camminando sulla corsia laterale." >> you - -git add . -git commit -m "Corsia laterale" - -git checkout HEAD~1 - -git branch -D main - -[actions] - -if test -f .git/MERGE_HEAD; then - touch .git/secretfile -fi - -[win] - -# Hai provato a fare il merge? -test -f .git/secretfile - -# Hai interrotto il merge? -test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^ - -[congrats] - -Aaah, faremo il merge più tardi... diff --git a/levels/it/merge/sequence b/levels/it/merge/sequence deleted file mode 100644 index 2e1aa81..0000000 --- a/levels/it/merge/sequence +++ /dev/null @@ -1,3 +0,0 @@ -merge -conflict -merge-abort \ No newline at end of file diff --git a/levels/it/remotes/friend b/levels/it/remotes/friend deleted file mode 100644 index c6f46c8..0000000 --- a/levels/it/remotes/friend +++ /dev/null @@ -1,47 +0,0 @@ -title = Amici -cards = pull push commit-auto checkout - -[description] - -Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo! - -Fate botta e risposta fino a che non ti ritrovi ad avere cinque linee! - -[setup yours] - -echo "Linea 1" > essay -git add . -git commit -m "Una linea" - -git push -u friend main - -[setup friend] - -git checkout main -echo "Linea 2, gnihihi" >> essay -git commit -am "Un'altra linea" - -[actions friend] - -if test "$(git log --oneline | wc -l)" -eq 3; then - git reset --hard main # Necessario perché la directory di lavoro non è aggiornata quando viene inviata all'amico - echo "Linea 4, blurbblubb" >> essay - git commit -am "Linea finale" - hint "Oh bene, Ho aggiunto la quarta linea!" -fi - -[win] - -# Ricevuto la seconda linea dal tuo amico. -git show HEAD:essay | grep gnihihi - -# Ricevuto la quarta linea dal tuo amico. -git show HEAD:essay | grep blurbblubb - -[win friend] - -# L'amico ha ricevuto la terza linea da te. -test "$(git show HEAD:essay | wc -l)" -ge 3 - -# L'amico ha ricevuto la quinta linea da te. -test "$(git show HEAD:essay | wc -l)" -ge 5 diff --git a/levels/it/remotes/problems b/levels/it/remotes/problems deleted file mode 100644 index 764a6fc..0000000 --- a/levels/it/remotes/problems +++ /dev/null @@ -1,33 +0,0 @@ -title = Problemi -cards = checkout add pull push commit-auto merge - -[description] - -Entrambi, tu ed il tuo amico, avete lavorato sullo stesso file e volete sincronizare! - -[setup yours] - -echo "Il capannone delle bici dovrebbe essere ???" > file -git add . -git commit -m "inizio" - -git push -u friend main - -echo "Il capannone delle bici dovrebbe essere verde" > file - -[setup friend] - -git checkout main - -echo "Il capannone delle bici dovrebbe essere blu" > file -git commit -a -m "versione dell'amico" - -[win] - -# Fai il commit delle tue modifiche locali. -test "$(git status -s)" = "" - -[win friend] - -# Quarda il suggerimento dell'amico, trova un compromesso e rimandalo in dietro. -git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)" diff --git a/levels/it/remotes/sequence b/levels/it/remotes/sequence deleted file mode 100644 index 13c5715..0000000 --- a/levels/it/remotes/sequence +++ /dev/null @@ -1,2 +0,0 @@ -friend -problems diff --git a/levels/it/sandbox/empty b/levels/it/sandbox/empty deleted file mode 100644 index 1f954a5..0000000 --- a/levels/it/sandbox/empty +++ /dev/null @@ -1,7 +0,0 @@ -title = Empty sandbox - -[description] - -This is an empty sandbox you can play around in. - -[setup] diff --git a/levels/it/sandbox/remote b/levels/it/sandbox/remote deleted file mode 100644 index f0ca2c0..0000000 --- a/levels/it/sandbox/remote +++ /dev/null @@ -1,22 +0,0 @@ -title = Sandbox with a remote -cards = checkout commit-auto pull fetch push - -[description] - -Here's a sandbox with a remote! Try pulling, fetching, or pushing! - -How can you push tags and branches on a remote? How can you delete them again? - -[setup yours] - -echo "Line 1" > essay -git add . -git commit -m "Initial commit" - -git push -u friend main - -[setup friend] - -git checkout main -echo "Line 2" >> essay -git commit -am "Another line" diff --git a/levels/it/sandbox/sequence b/levels/it/sandbox/sequence deleted file mode 100644 index 29aa91f..0000000 --- a/levels/it/sandbox/sequence +++ /dev/null @@ -1,3 +0,0 @@ -empty -remote -three-commits diff --git a/levels/it/sandbox/three-commits b/levels/it/sandbox/three-commits deleted file mode 100644 index 3e5308c..0000000 --- a/levels/it/sandbox/three-commits +++ /dev/null @@ -1,26 +0,0 @@ -title = Sandbox with three commits -cards = checkout add reset-file checkout-file commit merge rebase - -[setup] - -echo "You wake up." > you -git add . -git commit -m "The beginning" - -echo "You drink coffee." >> you -git commit -am "First things first" - -echo "You hear a knock on the door." >> you -git commit -am "Who's there?" - -git branch not_main - -[description] - -Here's a sandbox you can play around in. - -You can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try: - -- Make a commit that merges three timelines together at once! -- Create and delete some tags! -- Make a timeline that's completely independent of the rest! diff --git a/levels/it/sequence b/levels/it/sequence deleted file mode 100644 index cefcd7a..0000000 --- a/levels/it/sequence +++ /dev/null @@ -1,13 +0,0 @@ -intro -files -branches -merge -index -remotes -changing-the-past -shit-happens -workflows -bisect -stash -tags -sandbox diff --git a/levels/it/shit-happens/bad-commit b/levels/it/shit-happens/bad-commit deleted file mode 100644 index 0febbc2..0000000 --- a/levels/it/shit-happens/bad-commit +++ /dev/null @@ -1,31 +0,0 @@ -title = Annullare un cattivo commit -cards = reset commit-a - -[description] - -Oh no, abbiamo fatto un cattivo commit! Come possiamo annullare un commit e tornare ad un punto dove poter riprovare? - -La risposta è usare `git reset [commit]` che fa due cose: - -- Reimposta il riferimento (ref) del ramo corrente al commit che hai specificato. -- Reimposta l'indice a quel commit. - -Non cambia la tua directory di lavoro in nessun modo, il che significa che dopo puoi provare a rifare il commit che desideri. - - -[setup] - -echo "1 2 3 4" > numbers -git add . -git commit -m "commit iniziale" -echo "1 2 3 4 5 6 7 8 9 11" > numbers -git commit -am "Più numerrrrri" - -[win] - -# Nel primo commit il file numbers contiene i numeri da 1 a 10. -test "$(git show main:numbers)" = "1 2 3 4 5 6 7 8 9 10" -# Il messaggio di questo commit è "Più numeri". -git log -1 --oneline | grep "Più numeri" -# Il commit con l'errore si battitura non fa più parte del ramo principale. -git log --oneline | grep -v "rrrrr" diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/it/shit-happens/pushed-something-broken deleted file mode 100644 index cb7f2fb..0000000 --- a/levels/it/shit-happens/pushed-something-broken +++ /dev/null @@ -1,54 +0,0 @@ -title = Ho fatto il push di qualcosa di rotto -cards = revert push - -[description] - -Stavamo parlando di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert` - -[setup] - -echo "questo va bene - -? - -? - -?" > text -git add . -git commit -m bene -echo "questo va bene - -anche questo va bene - -? - -?" > text -git commit -am "anche questo bene" -echo "questo va bene - -anche questo va bene - -questo è veramente sbagliato - -?" > text -git commit -am "veramente sbagliato" -echo "questo va bene - -anche questo va bene - -questo è veramente sbagliato - -questo va nuovamente bene" > text -git commit -am "nuovamente bene" - -git push team main -git branch -u team/main main - -[setup team] - -[win team] - -# Il ramo main del Team non contiene più niente di sbagliato. -! { git show main:text | grep -q "veramente sbagliato"; } -# e la cronologia non è stata modificata. -git show main^:text | grep -q "veramente sbagliato" diff --git a/levels/it/shit-happens/reflog b/levels/it/shit-happens/reflog deleted file mode 100644 index 23f7bdc..0000000 --- a/levels/it/shit-happens/reflog +++ /dev/null @@ -1,26 +0,0 @@ -title = Torna dove eri prima -cards = checkout reflog - -[description] - -Diciamo che stavi guardando qualcosa nel passato e poi sei tornato al ramo principale (main). - -Ma poi ti sei distratto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo? - -C'è un comodo comando che ti mostra tutti i posti a cui la tua HEAD ha puntato in passato: - - git reflog - -[setup] - -for i in {1..10}; do - git commit --allow-empty -m $i - git branch $i -done -git checkout 3 -git checkout main - -[win] - -# Trova cosa stavi facendo prima e tornaci! -test "$(git rev-parse HEAD)" = "$(git rev-parse 3)" diff --git a/levels/it/shit-happens/restore-a-file b/levels/it/shit-happens/restore-a-file deleted file mode 100644 index 16cf0dc..0000000 --- a/levels/it/shit-happens/restore-a-file +++ /dev/null @@ -1,22 +0,0 @@ -title = Recuperare un file cancellato -cards = checkout - -[description] - -Oops - Hai cancellato il file "essay" dove hai lavorato tutta la notte! - -Stai sereno, Git è qui per aiutare! Puoi usare `git checkout` per recuperare il file! - -[setup] - -echo importante > essay -git add . -git commit -m "Commit iniziale" -echo "contenuto importante" > essay -git commit -am "Ottimizzato essay" -rm essay - -[win] - -# Recupera il file "essay" che contiene "contenuto importante" -test "$(cat essay)" = "contenuto importante" diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/it/shit-happens/restore-a-file-from-the-past deleted file mode 100644 index c15f2a3..0000000 --- a/levels/it/shit-happens/restore-a-file-from-the-past +++ /dev/null @@ -1,22 +0,0 @@ -title = Recuperare un file dal passato -cards = checkout checkout-from commit - -[description] - -Questo è un problema simile: preferivi il file "essay" del primissimo commit e vuoi riaverlo indietro! Bene, checkout puo anche recuperare le cose dai vecchi commits. -Così: - - git checkout [commit] [file] - -[setup] - -echo "versione buona" > essay -git add . -git commit -m "commit iniziale" -echo "versione cattiva" > essay -git commit -am "\"Migliorato\" essay" - -[win] - -# Prendi la prima versione di "essay" e crea un nuovo commit con essa. -test "$(git show main:essay)" = "versione buona" diff --git a/levels/it/shit-happens/sequence b/levels/it/shit-happens/sequence deleted file mode 100644 index 663d5d9..0000000 --- a/levels/it/shit-happens/sequence +++ /dev/null @@ -1,5 +0,0 @@ -restore-a-file -restore-a-file-from-the-past -bad-commit -pushed-something-broken -reflog diff --git a/levels/it/stash/sequence b/levels/it/stash/sequence deleted file mode 100644 index 9dd02f7..0000000 --- a/levels/it/stash/sequence +++ /dev/null @@ -1,5 +0,0 @@ -stash -stash-pop -stash-clear -stash-branch -stash-merge diff --git a/levels/it/stash/stash b/levels/it/stash/stash deleted file mode 100644 index 6a4bc61..0000000 --- a/levels/it/stash/stash +++ /dev/null @@ -1,45 +0,0 @@ -title = Stashing -cards = checkout commit-auto merge reset-hard - -[description] - -You will encounter situations in which you are working on your project but you need to -put your current changes aside temporarily. To do so, you can use the stash function. Use - git stash push -to add your current changes to the stash stack. - ---- -tipp1 ---- -tipp2 ---- -tipp3 - -[setup] - -echo "Apple Pie:" > recipe - -git add . -git commit -m "creating a recipe" - -echo "- 4 Apples" >> recipe - -git add . -git commit -m "Adding ingredients" - -echo "- 500g Flour" >> recipe - -git checkout main - -[win] - -# Did you stash the current changes? -test "$(git stash list | wc -l)" -ge 1 - -[actions] - - - -[congrats] - -Nice stash you got there! :) diff --git a/levels/it/stash/stash-branch b/levels/it/stash/stash-branch deleted file mode 100644 index e51e4d2..0000000 --- a/levels/it/stash/stash-branch +++ /dev/null @@ -1,47 +0,0 @@ -title = Ramo dalla scorta -cards = checkout commit-auto merge reset-hard - -[description] - -Se vuoi matenere tutte le modifiche ma non appartengono al ramo principale, puoi facilemnte creare un nuovo ramo dai cambiamenti dalle modifiche nascoste. Usando - git stash branch -Se vuoi solo usare l'ultimo elemento della scorta puoi lasciare vuota l'opzione . - -Crea un nuovo ramo dalle modifiche nascoste!! - ---- -tipp1 ---- -tipp2 ---- -tipp3 - -[setup] - -echo "Torta di mele:" > recipe - -git add . -git commit -m "creata una ricetta" - -echo "- 4 Mele" >> recipe - -git add . -git commit -m "Aggiunto ingredienti" - -echo "- 500g Farina" >> recipe -git stash push - -git checkout main - -[win] - -# Hai creato un nuovo ramo dai cambiamenti nascosti? -test "$(git branch --list| wc -l)" -ge 2 - -[actions] - - - -[congrats] - -I cambiamenti nascosti sono nel nuovo ramo! :) diff --git a/levels/it/stash/stash-clear b/levels/it/stash/stash-clear deleted file mode 100644 index 32f82cb..0000000 --- a/levels/it/stash/stash-clear +++ /dev/null @@ -1,57 +0,0 @@ -title = Pulire la scorta -cards = checkout commit-auto merge reset-hard - -[description] - -Se vuoi controllare la tua scorta, usa il comando - git stash list - -Oh, non vuoi mantenere i tuoi cambiamenti nella scorta? C'è un modo per farlo? Poi vai avanti e pulisci la scorta con - git stash clear -Se vuoi solo scartare un certo elemento dalla scorta, puoi usare - git stash drop - -Pulisci la tua pila di scorta! - ---- -tipp1 ---- -tipp2 ---- -tipp3 - -[setup] - -echo "Torta di mele:" > recipe - -git add . -git commit -m "creata una ricetta" - -echo "- 4 Mele" >> recipe - -git add . -git commit -m "Aggiunto ingredienti" - -echo "- 500g Farina" >> recipe -git stash push - -echo "- 200g Zucchero" >> recipe -git stash push - -echo "- Pizzico di sale" >> recipe -git stash push - -git checkout main - -[win] - -# Hai pulito la tua pila di scorta? -test "$(git stash list | wc -l)" -eq 0 - -[actions] - - - -[congrats] - -Pulito tutto! :) diff --git a/levels/it/stash/stash-merge b/levels/it/stash/stash-merge deleted file mode 100644 index a4ed759..0000000 --- a/levels/it/stash/stash-merge +++ /dev/null @@ -1,53 +0,0 @@ -title = Unire la scorta spuntata -cards = checkout commit-auto merge reset-hard - -[description] - -Quando vuoi riapplicare i cambiamenti ma hai continuato a lavora nei tuoi file, potresti ricevere un conflitto di unione! Facciamo un pò di pratica con questa situazione. -Fai uscire le modifiche dalla scorta con - git stash pop -e risolvi i conflitti di unione. Invia la soluzione dei cambiamenti e dopo pulisci la scorta. - ---- -tipp1 ---- -tipp2 ---- -tipp3 - -[setup] - -echo "Torta di mele:" > recipe - -git add . -git commit -m "creata una ricetta" - -echo "- 4 Mele" >> recipe - -git add . -git commit -m "Aggiunti ingredienti" - -echo "- 500g Farina" >> recipe - -git stash push - -echo "- Pizzico di sale" >> recipe - -git checkout main -git add recipe - -[win] - -# Hai rislto i conflitti ed inviato? -{ git show HEAD | grep "Farina"; } && { git show HEAD | grep "Sale"; } - -# Hai pulito la pila di scorta? -test "$(git stash list | wc -l)" -eq 0 - -[actions] - - - -[congrats] - -Yay, hai riavuto le tue modifiche in dietro! :) diff --git a/levels/it/stash/stash-pop b/levels/it/stash/stash-pop deleted file mode 100644 index cffc30d..0000000 --- a/levels/it/stash/stash-pop +++ /dev/null @@ -1,46 +0,0 @@ -title = Pop dalla scorta -cards = checkout commit-auto merge reset-hard - -[description] - -Quando hai nascosto le tue modifiche e vuoi riapplicarle nella tua directory di lavoro, puoi usare - git stash pop -Questo rimuoverà i cambiamenti dalla pila di scorta. Se voui anche mantenere le modifiche della pila di scorta usa - git stash apply - ---- -tipp1 ---- -tipp2 ---- -tipp3 - -[setup] - -echo "Torta di mele:" > recipe - -git add . -git commit -m "creata una ricetta" - -echo "- 4 Mele" >> recipe - -git add . -git commit -m "Aggiunto ingredienti" - -echo "- 500g Farina" >> recipe - -git stash push -git checkout main - -[win] - -# Hai pop i cambiamenti dalla pila di scorta? -test "$(git stash list | wc -l)" -eq 0 - -[actions] - - - -[congrats] - -Yay, hai riavuto i tuoi cambiamenti in dietro! :) diff --git a/levels/it/tags/add-tag b/levels/it/tags/add-tag deleted file mode 100644 index 2351635..0000000 --- a/levels/it/tags/add-tag +++ /dev/null @@ -1,53 +0,0 @@ -title = Creare etichette -cards = checkout commit-auto merge reset-hard - -[description] - -Alcuni dei tuoi commit potrebbero essere commit speciali. Potresti aver raggiunto un traguargo o un nuovo numero di versione. - -Puoi contrassegnare questo commit con un flag spegiale chiamato 'tag'. - -Scrivi - - git tag - -per etichettare il tuo commit. - ---- -tipp1 ---- -tipp2 ---- -tipp3 - -[setup] - -echo "event 1" > elenco-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 1" - -echo "event 2" >> elenco-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 2" - -echo "event 3" >> elenco-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 3" - -git checkout --detach main - -[win] - -# Hai creato un nuovo tag? -test "$(git tag -l | wc -l)" -ge 1 - -[actions] - - - -[congrats] - -Bene! Hai etichettato il tuo primo commit :) diff --git a/levels/it/tags/add-tag-later b/levels/it/tags/add-tag-later deleted file mode 100644 index 49e17d4..0000000 --- a/levels/it/tags/add-tag-later +++ /dev/null @@ -1,50 +0,0 @@ -title = Etichettare dopo -cards = checkout commit-auto merge reset-hard - -[description] - -Ma cosa succede se ti dimentichi di etichettare il corrente commit? -No c'è problema! Puoi etichettare i vecchi commit tramite - - git tag - -Etichetta il commit "Aggiunta caratteristica 2" con il nome "v1"! - ---- -tipp1 ---- -tipp2 ---- -tipp3 - -[setup] - -echo "event 1" > elenco-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 1" - -echo "event 2" >> elenco-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 2" - -echo "event 3" >> elecno-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 3" - -git checkout --detach main - -[win] - -# Hai creato una nuova etichetta? -test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" - -[actions] - - - -[congrats] - -Motlo bene :) diff --git a/levels/it/tags/remote-tag b/levels/it/tags/remote-tag deleted file mode 100644 index 0a68035..0000000 --- a/levels/it/tags/remote-tag +++ /dev/null @@ -1,58 +0,0 @@ -title = Etichette remote -cards = pull push commit-auto checkout - -[description] - -Quando lavori con un repositor remoto, le etichette non sono messe o prese automaticamente. - -Puoi inviare un tag con - git push -O tutti i tags con - git push --tags - -Rimuovere i tags nel repository remoto con - git push --delete - -Puoi anche sincronizzare - git fetch --prune --prune-tags - - -Aggiungere un nome di tag "v2" nell'ultimo commit ed inviarlo nel remoto, anche prendere il tag "v1" in quello locale. -[setup yours] - -git checkout main - -git checkout main -echo "Condivisione dello spazzolino" > project-ideas -git add . -git commit -m "Prima idea" - -echo "Il mio telefono è sottosopra? App" >> project-ideas -git commit -am "Un'altra idea" - - - -git push friend main - -git branch -u friend/main main - -[setup friend] - - - -[actions friend] - -git tag v1 HEAD~1 - -[win] -# v1 tag nel tuo repo -test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" - -# v2 tag nel tuo repo -test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" - - -[win friend] - -# v2 tag nel remoto -test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" diff --git a/levels/it/tags/remove-tag b/levels/it/tags/remove-tag deleted file mode 100644 index 2d2dfd9..0000000 --- a/levels/it/tags/remove-tag +++ /dev/null @@ -1,53 +0,0 @@ -title = Rimuovere etichette -cards = checkout commit-auto merge reset-hard - -[description] - -Hai aggiunto molte ectichette? Non c'è problema! Cancellali con - - git tag -d - -Rimuovi tutti i tag in questo repository! - ---- -tipp1 ---- -tipp2 ---- -tipp3 - -[setup] - -echo "event 1" > elenco-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 1" - -echo "event 2" >> elenco-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 2" - -echo "event 3" >> elenco-caratteristiche - -git add . -git commit -m "Aggiunta caratteristica 3" - -git tag v1 HEAD~2 -git tag v2 HEAD~1 -git tag v3 - -git checkout --detach main - -[win] - -# Hai riosso tutte le etichette? -test "$(git tag -l | wc -l)" -eq 0 - -[actions] - - - -[congrats] - -Molto bene :) diff --git a/levels/it/tags/sequence b/levels/it/tags/sequence deleted file mode 100644 index fd63d9c..0000000 --- a/levels/it/tags/sequence +++ /dev/null @@ -1,4 +0,0 @@ -add-tag -remove-tag -add-tag-later -remote-tag diff --git a/levels/it/unused/checkout b/levels/it/unused/checkout deleted file mode 100644 index 9d9c957..0000000 --- a/levels/it/unused/checkout +++ /dev/null @@ -1,31 +0,0 @@ -title = Getting the last version -cards = checkout-file - -[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! :/ - -But Git is here to help! To discard all changes your cat made, and go back to the version in the last commit, use `checkout`! - -[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] - -# Restore the version from the last commit. -cat essay.txt | grep D diff --git a/levels/it/unused/clone b/levels/it/unused/clone deleted file mode 100644 index 8459c08..0000000 --- a/levels/it/unused/clone +++ /dev/null @@ -1,20 +0,0 @@ -title = Cloning a repo -cards = clone commit-auto pull push - -[description] - -Get your friend's repo using clone, change something, push it back. - -[setup] - -rm -rf .git - -[setup friend] - -echo hi > file -git add . -git commit -m "Initial commit" - -[win friend] - -test "$(git show main:file)" != hi diff --git a/levels/it/unused/commit b/levels/it/unused/commit deleted file mode 100644 index fd84cc9..0000000 --- a/levels/it/unused/commit +++ /dev/null @@ -1,27 +0,0 @@ -title = Make a commit \o/ -cards = add reset checkout commit - -[description] - -For practice, make a commit where all files contain an "x"! - -[setup] - -echo a > a -echo x > b -echo x > c -git add . -git commit -m "Initial commit" -echo x > a -echo b > b -git add b -echo c > c - -[win] - -# File a contains "x" in the last main commit. -test "$(git show main:a)" = x -# File b contains "x" in the last main commit. -test "$(git show main:b)" = x -# File c contains "x" in the last main commit. -test "$(git show main:c)" = x diff --git a/levels/it/unused/commit-a b/levels/it/unused/commit-a deleted file mode 100644 index 747a009..0000000 --- a/levels/it/unused/commit-a +++ /dev/null @@ -1,26 +0,0 @@ -title = Make a commit, but faster! -cards = add reset checkout commit commit-a - -[description] - -There is a time-saving trick, where instead of a plain `git commit`, you can use - - git commit -a - -This will automatically add all changes you made to local files! Very convenient. - -[setup] - -echo a > a -echo b > b -echo c > c -git add . -git commit -m "Initial commit" -echo x > a -echo x > b -echo x > c - -[win] - -# Make a commit where all files contain "x". -test "$(git show main:a)" = x && test "$(git show main:b)" = x && test "$(git show main:c)" = x diff --git a/levels/it/unused/fetch b/levels/it/unused/fetch deleted file mode 100644 index 377355a..0000000 --- a/levels/it/unused/fetch +++ /dev/null @@ -1,35 +0,0 @@ -title = Fetching from remotes -cards = checkout fetch commit-auto - -[description] - -Here, you already have two remotes configured! You can list them using `git remote`. - -Fetch from both, and look at the suggestions. - -Then, make a new commit on top of your original one that introduces a compromise. - -[setup] - -echo "The bikeshed should be ???" > proposal -git add . -git commit -m "What do you think?" - -[setup friend1] - -git pull yours main -echo "The bikeshed should be green" > proposal -git commit -am "Green" - -[setup friend2] - -git pull yours main -echo "The bikeshed should be blue" > proposal -git commit -am "Blue" - -[win] - -# Your proposal is acceptable for friend1. -git show main:proposal | git grep green -# Your proposal is acceptable for friend2. -git show main:proposal | git grep blue diff --git a/levels/it/unused/files-move b/levels/it/unused/files-move deleted file mode 100644 index 8f65710..0000000 --- a/levels/it/unused/files-move +++ /dev/null @@ -1,27 +0,0 @@ -title = No sleep required -cards = file-new file-delete file-rename - -[description] - -Actually, you decide that you don't need any sleep. - -Because of that, you won't require a bed, and can build some other piece of furniture from the wood! - - -[setup] - -echo A yellow cupboard with lots of drawers. > cupboard -echo A really big yellow shelf. > shelf -echo A comfortable, yellow bed with yellow cushions. > bed - -[win] - -# Rename the bed into something else, and give it a new description! -NUM_FILES="$(ls | wc -l)" -! test -f bed && test "$NUM_FILES" -ge 3 && ! grep -r "yellow bed" . - -[congrats] - -Neat! It even still looks a bit comfortable! - -You head out, eager for your first lesson at time travel school! diff --git a/levels/it/unused/index-mv b/levels/it/unused/index-mv deleted file mode 100644 index 9ff7270..0000000 --- a/levels/it/unused/index-mv +++ /dev/null @@ -1,26 +0,0 @@ -title = Rename a file in the next commit -cards = add reset-file checkout-file mv commit - -[description] - -Other times, you might want to rename a file in the next commit. Use - - git mv [file] [new name] - -for that. The effect is very similar as if you had created a copy with a new name, and removed the old version. - -[setup] - -echo a > a -echo SPECIAL > b -echo x > c -git add . -git commit -m "Initial commit" -echo x > a -echo b >> b -git add b - -[win] - -# Make a commit where you rename the file b to "x". -test "$(git ls-tree --name-only main)" = "$(echo -e "a\nc\nx")" diff --git a/levels/it/unused/init b/levels/it/unused/init deleted file mode 100644 index c76daa5..0000000 --- a/levels/it/unused/init +++ /dev/null @@ -1,14 +0,0 @@ -title = Welcome! -cards = init - -[description] - - -[setup] - -rm -rf .git - -[win] - -# Again, initialize your time machine! -test -d .git diff --git a/levels/it/unused/pull-push b/levels/it/unused/pull-push deleted file mode 100644 index 71ce61d..0000000 --- a/levels/it/unused/pull-push +++ /dev/null @@ -1,51 +0,0 @@ -title = Helping each other -cards = checkout commit-auto reset-hard pull push - -[description] - -The events and timelines you see are always only what your own time machine knows about! - -Of course, time agents don't have to work alone! Here, your sidekick has already prepared a merge for you! You can use the "pull" card to transfer it to your own time machine. - -Then, add another event on top (what does Sam have for dinner?), and `push` the result, to transfer it back to your sidekick! - -You can only ever manipulate things in your own time machine (the one on the bottom). - -[setup yours] - -echo "Just woke up. Is hungry." > sam -git add . -git commit -m "The beginning" - -git checkout -b pancakes -echo "Had blueberry pancakes with maple syrup for breakfast." > sam -git add . -git commit -m "Pancakes!" - -git checkout -b muesli main -echo "Had muesli with oats and strawberries for breakfast." > sam -git add . -git commit -m "Muesli!" - -git checkout main - -git push -u sidekick main pancakes muesli - -[setup sidekick] - -git checkout main -git merge pancakes -git merge muesli - -echo "Had pancakes with strawberries for breakfast." > sam -git add . -git commit -m "Let's make this breakfast compromise" --author="Sidekick " - -[win sidekick] - -# Below main's parent, there is a rhombus: -git rev-parse main^^ && test "$(git rev-parse main^^1^)" = "$(git rev-parse main^^2^)" - -[congrats] - -In reality, in many cases, a lot of time agents work together to build a really good future together! :) diff --git a/levels/it/unused/remotes-add b/levels/it/unused/remotes-add deleted file mode 100644 index db24b7d..0000000 --- a/levels/it/unused/remotes-add +++ /dev/null @@ -1,33 +0,0 @@ -title = Adding a remote -cards = checkout - -[description] - -Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using - - git remote add [name] [URL] - -where `[name]` is an arbitrary, short name you pick for the remote. - -When you've done that, you can get all commits from that remote using - - git pull friend - -There's a letter for you! - -[setup] - -git remote remove friend - -[setup friend] - -echo "I'm really committed to our friendship! <3" > love_letter -git add . -git commit -m "Write a letter" - -[win] - -# Add a remote that points to ../friend. -git remote -v | grep '../friend' -# Pull from the remote. -git show HEAD:love_letter | grep committed diff --git a/levels/it/unused/remotes-delete b/levels/it/unused/remotes-delete deleted file mode 100644 index c026204..0000000 --- a/levels/it/unused/remotes-delete +++ /dev/null @@ -1,23 +0,0 @@ -title = Deleting and renaming a remote -cards = checkout - -[description] - -Here, you already have two remotes configured! You can list them using `git remote`. - -[setup] - -git remote rename friend frend - -[setup friend] - -[setup enemy] - -[win] - -# Rename the remote with the typo (using `git remote rename [old name] [new name]`) -git remote | grep friend -# The remote with the typo is gone. -! grep 'frend' <(git remote) -# Delete the remote you don't want to keep (using `git remote remove [remote]`) -! grep 'enemy' <(git remote) diff --git a/levels/it/unused/restore b/levels/it/unused/restore deleted file mode 100644 index 1f9961e..0000000 --- a/levels/it/unused/restore +++ /dev/null @@ -1,28 +0,0 @@ -title = Looking into the past -cards = checkout-from - -[description] - -You've been working on your essay for a while. But you're not happy with the changes you've made recently. You want to go back to the version called "Best version"! - -No problem, you can use the `checkout` card to restore your essay from an older commit! - -[setup] - -echo "Initial version" > essay.txt -git add . -git commit -m "Initial commit" - -echo "Improved version" > essay.txt -git commit -a -m "Improved version" - -echo "Best version" > essay.txt -git commit -a -m "Best version" - -echo "Less-good version" > essay.txt -git commit -a -m "Less-good version" - -[win] - -# For nostalgic reasons, restore the very first backup you made! -diff essay.txt <(echo "Best version") diff --git a/levels/it/unused/split b/levels/it/unused/split deleted file mode 100644 index 274b792..0000000 --- a/levels/it/unused/split +++ /dev/null @@ -1,26 +0,0 @@ -title = Split a commit! -cards = checkout commit reset-hard reset add rebase-interactive rebase-continue show - -[description] - -Here, both changes happened in one commit! Split them to be in two commits instead. - -[setup] - -echo something > file1 -echo something else > file2 -git add . -git commit -m "Initial commit" - -echo this should happen first >> file1 -echo and this should happen after that >> file2 -git commit -am "Both together" - -echo this is some other change >> file1 -echo this is some other change >> file2 -git commit -am "Something else" - -[win] - -test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M file2" && -test "$(git diff-tree --no-commit-id --name-status -r main~2)" = "M file1" diff --git a/levels/it/unused/steps b/levels/it/unused/steps deleted file mode 100644 index cb84861..0000000 --- a/levels/it/unused/steps +++ /dev/null @@ -1,23 +0,0 @@ -title = One step after another -cards = checkout commit reset-hard add - -[description] - -Sometimes, you might want to record the order in which things changed, instead of making a single commit. - -What happened here? Make two commits from the changes (using the "add" card), in an order that makes sense! - -[setup] - -echo something > file1 -echo something else > file2 -git add . -git commit -m "Initial commit" - -echo this should happen first >> file1 -echo and this should happen after that >> file2 - -[win] - -test "$(git diff-tree --no-commit-id --name-status -r main)" = "M file2" && -test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M file1" diff --git a/levels/it/unused/who-are-you b/levels/it/unused/who-are-you deleted file mode 100644 index f06137c..0000000 --- a/levels/it/unused/who-are-you +++ /dev/null @@ -1,23 +0,0 @@ -title = Nice to meet you! -cards = config-name config-email - -[description] - -Introduce yourself using - - git config --global user.name Firstname - git config --global user.email "your@mail.com" - -[setup] - -[actions] - -test "$(git config user.name)" != "You" && hint "Hey $(git config user.name), nice to meet you!" - -[win] - -# Have a name configured. -test "$(git config user.name)" != "You" - -# Have an email address configured. -test "$(git config user.email)" != "you@time.agency" diff --git a/levels/it/workflows/gitignore b/levels/it/workflows/gitignore deleted file mode 100644 index dc55243..0000000 --- a/levels/it/workflows/gitignore +++ /dev/null @@ -1,18 +0,0 @@ -title = Ignoring files - -[description] - -That chicken is running around a lot, and changing often. We don't want to have it in our commits. - -Add it to the file .gitignore, and try using `git add .`! - -[setup] - -touch .gitignore -echo important > important -git add important -git commit -m "Initial commit" - -[actions] - -echo "$RANDOM" > chicken diff --git a/levels/it/workflows/pr b/levels/it/workflows/pr deleted file mode 100644 index 98fa95f..0000000 --- a/levels/it/workflows/pr +++ /dev/null @@ -1,25 +0,0 @@ -title = Clonare un repo -cards = clone commit-auto reset-hard checkout file-new branch - -[description] - -Il tuo amico ha un problema! Clona il repo, crea una branch chiamata "solution" e aggiusta il problema in qulla branch. Quando sei pronto crea una "Pull Request" usando `git tag pr`. - -[setup] - -rm -rf .git - -[setup friend] - -echo "2 + 3 = " > file -git add . -git commit -m "Commit iniziale" - -[actions friend] - -git ls-remote yours | grep pr && git fetch yours && git merge yours/solution -git show main:file | grep 5 && hint "Grazie!" - -[win friend] - -git show main:file | grep 5 diff --git a/levels/it/workflows/sequence b/levels/it/workflows/sequence deleted file mode 100644 index 1be11a8..0000000 --- a/levels/it/workflows/sequence +++ /dev/null @@ -1 +0,0 @@ -pr diff --git a/levels/en/low-level/basics b/levels/low-level/basics similarity index 100% rename from levels/en/low-level/basics rename to levels/low-level/basics diff --git a/levels/en/low-level/blob-create b/levels/low-level/blob-create similarity index 100% rename from levels/en/low-level/blob-create rename to levels/low-level/blob-create diff --git a/levels/en/low-level/blob-remove b/levels/low-level/blob-remove similarity index 100% rename from levels/en/low-level/blob-remove rename to levels/low-level/blob-remove diff --git a/levels/en/low-level/commit-create b/levels/low-level/commit-create similarity index 100% rename from levels/en/low-level/commit-create rename to levels/low-level/commit-create diff --git a/levels/en/low-level/commit-parents b/levels/low-level/commit-parents similarity index 100% rename from levels/en/low-level/commit-parents rename to levels/low-level/commit-parents diff --git a/levels/en/low-level/commit-rhombus b/levels/low-level/commit-rhombus similarity index 100% rename from levels/en/low-level/commit-rhombus rename to levels/low-level/commit-rhombus diff --git a/levels/en/low-level/index-add b/levels/low-level/index-add similarity index 100% rename from levels/en/low-level/index-add rename to levels/low-level/index-add diff --git a/levels/en/low-level/index-remove b/levels/low-level/index-remove similarity index 100% rename from levels/en/low-level/index-remove rename to levels/low-level/index-remove diff --git a/levels/en/low-level/index-update b/levels/low-level/index-update similarity index 100% rename from levels/en/low-level/index-update rename to levels/low-level/index-update diff --git a/levels/en/low-level/puzzle-apocalypse b/levels/low-level/puzzle-apocalypse similarity index 100% rename from levels/en/low-level/puzzle-apocalypse rename to levels/low-level/puzzle-apocalypse diff --git a/levels/en/low-level/puzzle-precious-blob b/levels/low-level/puzzle-precious-blob similarity index 100% rename from levels/en/low-level/puzzle-precious-blob rename to levels/low-level/puzzle-precious-blob diff --git a/levels/en/low-level/puzzle-trees-all-the-way-down b/levels/low-level/puzzle-trees-all-the-way-down similarity index 100% rename from levels/en/low-level/puzzle-trees-all-the-way-down rename to levels/low-level/puzzle-trees-all-the-way-down diff --git a/levels/en/low-level/ref-create b/levels/low-level/ref-create similarity index 100% rename from levels/en/low-level/ref-create rename to levels/low-level/ref-create diff --git a/levels/en/low-level/ref-move b/levels/low-level/ref-move similarity index 100% rename from levels/en/low-level/ref-move rename to levels/low-level/ref-move diff --git a/levels/en/low-level/ref-remove b/levels/low-level/ref-remove similarity index 100% rename from levels/en/low-level/ref-remove rename to levels/low-level/ref-remove diff --git a/levels/en/low-level/sequence b/levels/low-level/sequence similarity index 100% rename from levels/en/low-level/sequence rename to levels/low-level/sequence diff --git a/levels/en/low-level/symref-create b/levels/low-level/symref-create similarity index 100% rename from levels/en/low-level/symref-create rename to levels/low-level/symref-create diff --git a/levels/en/low-level/symref-no-deref b/levels/low-level/symref-no-deref similarity index 100% rename from levels/en/low-level/symref-no-deref rename to levels/low-level/symref-no-deref diff --git a/levels/en/low-level/tree-create b/levels/low-level/tree-create similarity index 100% rename from levels/en/low-level/tree-create rename to levels/low-level/tree-create diff --git a/levels/en/low-level/tree-nested b/levels/low-level/tree-nested similarity index 100% rename from levels/en/low-level/tree-nested rename to levels/low-level/tree-nested diff --git a/levels/en/low-level/tree-read b/levels/low-level/tree-read similarity index 100% rename from levels/en/low-level/tree-read rename to levels/low-level/tree-read diff --git a/levels/en/low-level/welcome b/levels/low-level/welcome similarity index 100% rename from levels/en/low-level/welcome rename to levels/low-level/welcome diff --git a/levels/en/merge/conflict b/levels/merge/conflict similarity index 100% rename from levels/en/merge/conflict rename to levels/merge/conflict diff --git a/levels/en/merge/merge b/levels/merge/merge similarity index 100% rename from levels/en/merge/merge rename to levels/merge/merge diff --git a/levels/en/merge/merge-abort b/levels/merge/merge-abort similarity index 100% rename from levels/en/merge/merge-abort rename to levels/merge/merge-abort diff --git a/levels/en/merge/sequence b/levels/merge/sequence similarity index 100% rename from levels/en/merge/sequence rename to levels/merge/sequence diff --git a/levels/en/remotes/friend b/levels/remotes/friend similarity index 100% rename from levels/en/remotes/friend rename to levels/remotes/friend diff --git a/levels/en/remotes/problems b/levels/remotes/problems similarity index 100% rename from levels/en/remotes/problems rename to levels/remotes/problems diff --git a/levels/en/remotes/sequence b/levels/remotes/sequence similarity index 100% rename from levels/en/remotes/sequence rename to levels/remotes/sequence diff --git a/levels/en/sandbox/empty b/levels/sandbox/empty similarity index 100% rename from levels/en/sandbox/empty rename to levels/sandbox/empty diff --git a/levels/en/sandbox/remote b/levels/sandbox/remote similarity index 100% rename from levels/en/sandbox/remote rename to levels/sandbox/remote diff --git a/levels/en/sandbox/sequence b/levels/sandbox/sequence similarity index 100% rename from levels/en/sandbox/sequence rename to levels/sandbox/sequence diff --git a/levels/en/sandbox/three-commits b/levels/sandbox/three-commits similarity index 100% rename from levels/en/sandbox/three-commits rename to levels/sandbox/three-commits diff --git a/levels/en/sequence b/levels/sequence similarity index 100% rename from levels/en/sequence rename to levels/sequence diff --git a/levels/en/shit-happens/bad-commit b/levels/shit-happens/bad-commit similarity index 100% rename from levels/en/shit-happens/bad-commit rename to levels/shit-happens/bad-commit diff --git a/levels/en/shit-happens/pushed-something-broken b/levels/shit-happens/pushed-something-broken similarity index 100% rename from levels/en/shit-happens/pushed-something-broken rename to levels/shit-happens/pushed-something-broken diff --git a/levels/en/shit-happens/reflog b/levels/shit-happens/reflog similarity index 100% rename from levels/en/shit-happens/reflog rename to levels/shit-happens/reflog diff --git a/levels/en/shit-happens/restore-a-file b/levels/shit-happens/restore-a-file similarity index 100% rename from levels/en/shit-happens/restore-a-file rename to levels/shit-happens/restore-a-file diff --git a/levels/en/shit-happens/restore-a-file-from-the-past b/levels/shit-happens/restore-a-file-from-the-past similarity index 100% rename from levels/en/shit-happens/restore-a-file-from-the-past rename to levels/shit-happens/restore-a-file-from-the-past diff --git a/levels/en/shit-happens/sequence b/levels/shit-happens/sequence similarity index 100% rename from levels/en/shit-happens/sequence rename to levels/shit-happens/sequence diff --git a/levels/en/stash/sequence b/levels/stash/sequence similarity index 100% rename from levels/en/stash/sequence rename to levels/stash/sequence diff --git a/levels/en/stash/stash b/levels/stash/stash similarity index 100% rename from levels/en/stash/stash rename to levels/stash/stash diff --git a/levels/en/stash/stash-branch b/levels/stash/stash-branch similarity index 100% rename from levels/en/stash/stash-branch rename to levels/stash/stash-branch diff --git a/levels/en/stash/stash-clear b/levels/stash/stash-clear similarity index 100% rename from levels/en/stash/stash-clear rename to levels/stash/stash-clear diff --git a/levels/en/stash/stash-merge b/levels/stash/stash-merge similarity index 100% rename from levels/en/stash/stash-merge rename to levels/stash/stash-merge diff --git a/levels/en/stash/stash-pop b/levels/stash/stash-pop similarity index 100% rename from levels/en/stash/stash-pop rename to levels/stash/stash-pop diff --git a/levels/en/tags/add-tag b/levels/tags/add-tag similarity index 100% rename from levels/en/tags/add-tag rename to levels/tags/add-tag diff --git a/levels/en/tags/add-tag-later b/levels/tags/add-tag-later similarity index 100% rename from levels/en/tags/add-tag-later rename to levels/tags/add-tag-later diff --git a/levels/en/tags/remote-tag b/levels/tags/remote-tag similarity index 100% rename from levels/en/tags/remote-tag rename to levels/tags/remote-tag diff --git a/levels/en/tags/remove-tag b/levels/tags/remove-tag similarity index 100% rename from levels/en/tags/remove-tag rename to levels/tags/remove-tag diff --git a/levels/en/tags/sequence b/levels/tags/sequence similarity index 100% rename from levels/en/tags/sequence rename to levels/tags/sequence diff --git a/levels/en/unused/checkout b/levels/unused/checkout similarity index 100% rename from levels/en/unused/checkout rename to levels/unused/checkout diff --git a/levels/en/unused/clone b/levels/unused/clone similarity index 100% rename from levels/en/unused/clone rename to levels/unused/clone diff --git a/levels/en/unused/commit b/levels/unused/commit similarity index 100% rename from levels/en/unused/commit rename to levels/unused/commit diff --git a/levels/en/unused/commit-a b/levels/unused/commit-a similarity index 100% rename from levels/en/unused/commit-a rename to levels/unused/commit-a diff --git a/levels/en/unused/fetch b/levels/unused/fetch similarity index 100% rename from levels/en/unused/fetch rename to levels/unused/fetch diff --git a/levels/en/unused/files-move b/levels/unused/files-move similarity index 100% rename from levels/en/unused/files-move rename to levels/unused/files-move diff --git a/levels/en/unused/index-mv b/levels/unused/index-mv similarity index 100% rename from levels/en/unused/index-mv rename to levels/unused/index-mv diff --git a/levels/en/unused/init b/levels/unused/init similarity index 100% rename from levels/en/unused/init rename to levels/unused/init diff --git a/levels/en/unused/pull-push b/levels/unused/pull-push similarity index 100% rename from levels/en/unused/pull-push rename to levels/unused/pull-push diff --git a/levels/en/unused/remotes-add b/levels/unused/remotes-add similarity index 100% rename from levels/en/unused/remotes-add rename to levels/unused/remotes-add diff --git a/levels/en/unused/remotes-delete b/levels/unused/remotes-delete similarity index 100% rename from levels/en/unused/remotes-delete rename to levels/unused/remotes-delete diff --git a/levels/en/unused/restore b/levels/unused/restore similarity index 100% rename from levels/en/unused/restore rename to levels/unused/restore diff --git a/levels/en/unused/split b/levels/unused/split similarity index 100% rename from levels/en/unused/split rename to levels/unused/split diff --git a/levels/en/unused/steps b/levels/unused/steps similarity index 100% rename from levels/en/unused/steps rename to levels/unused/steps diff --git a/levels/en/unused/who-are-you b/levels/unused/who-are-you similarity index 100% rename from levels/en/unused/who-are-you rename to levels/unused/who-are-you diff --git a/levels/en/workflows/gitignore b/levels/workflows/gitignore similarity index 100% rename from levels/en/workflows/gitignore rename to levels/workflows/gitignore diff --git a/levels/en/workflows/pr b/levels/workflows/pr similarity index 100% rename from levels/en/workflows/pr rename to levels/workflows/pr diff --git a/levels/en/workflows/sequence b/levels/workflows/sequence similarity index 100% rename from levels/en/workflows/sequence rename to levels/workflows/sequence diff --git a/locale/it.po b/locale/it.po index adbae71..59b3509 100644 --- a/locale/it.po +++ b/locale/it.po @@ -74,6 +74,10 @@ msgstr "Inglese" msgid "Italian" msgstr "Italiano" +#: oh-my-git/scenes/level.gd:45 +msgid "Good job, you solved the level!\nFeel free to try a few more things or click 'Next level'." +msgstr "Ottimo lavoro, hai risolto il livello!\n Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'" + #: oh-my-git/scenes/level.gd:81 msgid "Complete the goal of this level" msgstr "Completa l'obbiettivo di questo ivello!" @@ -262,3 +266,153 @@ msgstr "Il testo qui" #: oh-my-git/scenes/title.tscn:74 msgid "Language" msgstr "Linguaggio" + +#: CARDS DESCRIPTION +#: oh-my-git/resources/cards.json:6 +msgid "Drag this card into the empty space above to initialize the time machine!" +msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" + +#: oh-my-git/resources/cards.json:14 +msgid "Create your own copy of someone else's repo." +msgstr "Crea la tua copia personale del Repo di qualcun'altro." + +#: oh-my-git/resources/cards.json:22 +msgid "Set your name.\n\n(Will not change anything outside of this game.)" +msgstr "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" + +#: oh-my-git/resources/cards.json:30 +msgid "Set your email address." +msgstr "Imposta la tua e-mail." + +#: oh-my-git/resources/cards.json:38 +msgid "Drag this card to a commit or to a branch to travel to it!" +msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso." + +#: oh-my-git/resources/cards.json:46 +msgid "Reset changes in a local file." +msgstr "Resetta i cambiamenti in un file locale" + +#: oh-my-git/resources/cards.json:54 +msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." +msgstr "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice." + +#: oh-my-git/resources/cards.json:62 +msgid "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed." +msgstr "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato." + +#: oh-my-git/resources/cards.json:70 +msgid "Make a new commit containing your current environment! Type in a description of what changed!" +msgstr "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!" + +#: oh-my-git/resources/cards.json:78 +msgid "Merge the specified timeline into yours. If necessary, will create a merge commit." +msgstr "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge." + +#: oh-my-git/resources/cards.json:86 +msgid "Abort the current merge attempt, and reconstruct the previous state." +msgstr "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente." + +#: oh-my-git/resources/cards.json:94 +msgid "Put the events in your current timeline on top of the specified one." +msgstr "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata." + +#: oh-my-git/resources/cards.json:102 +msgid "Get someone else's version of the current timeline, and try to merge it into yours." +msgstr "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua." + +#: oh-my-git/resources/cards.json:110 +msgid "Get a someone else's version of the current timeline." +msgstr "Prende la versione di qualcun'altro della temporale corrente" + +#: oh-my-git/resources/cards.json:118 +msgid "Give the current timeline to someone else." +msgstr "Invia la linea temporale corrente a qualcun'altro" + +#: oh-my-git/resources/cards.json:126 +msgid "Make changes to the events in your current timeline, back to the commit you drag this to." +msgstr "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda." + +#: oh-my-git/resources/cards.json:134 +msgid "Continue the current rebasing process." +msgstr "Continua il processo di rebasing" + +#: oh-my-git/resources/cards.json:142 +msgid "Move the branch you're on to the specified commit." +msgstr "Sposta il branch su cui ti trovi al commit specificato." + +#: oh-my-git/resources/cards.json:150 +msgid "Jump to the commit, and update the index. Keep the current environment." +msgstr "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale." + +#: oh-my-git/resources/cards.json:158 +msgid "Reset the index version of a file to the version in the commit you're on." +msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei" + +#: oh-my-git/resources/cards.json:166 +msgid "Repeat the specified action on top of your current timeline." +msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente" + +#: oh-my-git/resources/cards.json:174 +msgid "Make a new commit that reverts the changes of the speicified commit." +msgstr "Crea un nuovo commit che annulla le modifiche del commit specificato." + +#: oh-my-git/resources/cards.json:182 +msgid "Start looking for the commit where things got bad." +msgstr "Inizia a cercare il commit dove le cose sono andate storte" + +#: oh-my-git/resources/cards.json:190 +msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!" +msgstr "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!" + +#: oh-my-git/resources/cards.json:198 +msgid "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!" +msgstr "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!" + +#: oh-my-git/resources/cards.json:206 +msgid "Update the index version of the file to its current real content." +msgstr "Aggiorna la versione in indice del file con il contenuto attuale." + +#: oh-my-git/resources/cards.json:214 +msgid "Delete a file both in the working directory, as well as the index." +msgstr "Cancella un file sia dalla cartella di lavoro corrente che dall'indice." + +#: oh-my-git/resources/cards.json:222 +msgid "Make a commit from the current index." +msgstr "Crea un commit dall'indice corrente." + +#: oh-my-git/resources/cards.json:230 +msgid "Show what changed in the commit." +msgstr "Mostra cosa è cambiato nel commit." + +#: oh-my-git/resources/cards.json:238 +msgid "Create a new branch at your current location." +msgstr "Crea un nuovo branch alla posizione corrente." + +#: oh-my-git/resources/cards.json:246 +msgid "Delete a branch." +msgstr "Cancella un branch." + +#: oh-my-git/resources/cards.json:254 +msgid "Display a log of where the ref pointed to in the past." +msgstr "Mostra un log di dove il riferimento (ref) ha puntato in passato." + +#: oh-my-git/resources/cards.json:262 +msgid "Create a new file." +msgstr "Crea un nuovo file." + +#: oh-my-git/resources/cards.json:270 +msgid "Delete a file." +msgstr "Cancella un file." + +#: oh-my-git/resources/cards.json:278 +msgid "Rename a file." +msgstr "Rinomina un file." + +#: oh-my-git/resources/cards.json:286 +msgid "Make a copy of a file." +msgstr "Crea una copia di un file." + +#: LEVELS +#: oh-my-git/levels/ +msgid "Amici" +msgstr "Friend" diff --git a/locale/messages.mo b/locale/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..a440a58d63cb555e4be7f22382399bf6ff95e0d7 GIT binary patch literal 8795 zcmds+UyNMWUB_>l(8BPiG!$BBL(dSBwUeFk+HP8BT_;)F8)sdwZFV;f>7U>`GiPT{ zednIZ{j=*$A(aY^S|Qq(mhylQ5)wj4z!Tz+)CZIY5TXbK5(oiOK%zqMfFd3cQW2l; zIrq-Yx(+D<35k*KerN7I=XZYp|6Kp={r7z-;j_v0Uap^dOOlMif4+}Dd_McuB)JHF z4*XW|k3l{93y^=wU-RdE;NOD}gZI8INxlVq1nhw;;QinW;4=6k_}$kA(`}U|03x1B@zY0DNz8|7n z;OD_p;A-v!5;?Cf1YZC@39f^G1%44UJd|C26Z{zX zj`zSDn1hO^Uj`L-zXje4eg(V%{vIehyqn+_Uk`wi^I=eSKLaj-p9H1!9fU zJBVu77}viGe2||X0TrJwgDLns;K#uC;IxwaHuzESGoa|b23`dJ5qur&lQc$P*WerA zE1=eOx>26{LD}~~P<%fEu7RgP$y+!03Ml!$3_cA0JopOuDky)y{6mq>4tNj0wf7mW z$GFgEQOL+kI2_M2Cd=Tr%M>0##PjfxQ^%gFDRw5*4 z8x+Wn%H4`jePnON&^a#YUVi>4m;8*dO^$QPMyI)O%OjsN{5r+;IM*?*%Ut^4uE8!( zfw)NU{d+-uHo2bUx}qOz17B38+OuX@7lq9$GqJ_knzX9yWLhnoG#{D54t-u$MLmp5 zr-j{jzAjB!rIqa`YX`RU6WdMBr^8#xg|rxz-Qtd3$(a2Wjc@v6&WrXv?zCGM_=Lu$*L4liLF`DAIhm2aD#=*TszS%n#Gb`J6qA zt9M-ni_NXD!5`#i=%)Eut<8yKAQ2<&_(cBNeiCk%Q#*9K4)sQX%ht2LN@{AjCSYd4$0(6l1L78k2qiL3b6~4sMeB4boxaHD3xm-`C;v{ew z>>Q=8rz1s{ZbwfwAGVg23xe2u-xWTepv8W2CC$fmI=0CbMRA#IrneNAjqA*G+$y2* z{@JP+b!jk7zul~$ZV1R)DUOTGM}m8ShpyQfVKV zwa0Ukmo4yzAYxcsw(f~%xFfD{7Zy?5F8VcTUHJ(KXNby)FlAbPDvN0sty`TI@?W$zUW%5eP}6Xv_=UosWOx`{v99BV#_RK!+3nFjrKuPRpyq8O6w=v z)Zu}@4er}yn==DLc9ObGzDKx|_h$DcV87Ej_M9w~lWii0j(fya}P3Ce);^82ztL z)xQ7zV|V1ks^rNIndO$OB%>diNlnKheKpK?JJ&OtmX^hfHNY-bfX?7heng!N218!7 zRo2D6JzS0SX|s0ra6yxzw&Fr*{@w?Tz* zB}Zs@`pFGBUR~PVnhyFoqFRNo-|r{SE3dXpH>DtYk*{g@gC2tf6PkPyv6ha>IVn+{ zjR;gCjTu4iZ0RRs(hgcLeMT1~0_cXb+c0fIHb$qpfEqb~wnoe4g`slJ*EhB>>Jgtz zB&t$cQn@O#$@Rj2f@Zt7G3p_r+RIgQee2rg^$R=Z#`@Ow#^o!7r`OzGu!cb&kRqIZWY(UQ?kfnL09>T-K0S7=$cNqQP)|IJ7UZI?eE+jeO*6 zRd@}E6~8aU0g(x4$qxoRY7Yo~E{;uqnR%@XgJLR7Cds#H;;I1tWP%fp&`tgmV{v{T2_@mWjQ5D!vtCKwV&Y1<&eA=2a3p$CTosWc`*C6uQbR_IR*u= z7wu_|d`V>n#wY1eQ>5B&hC*gf{{}S6S}ImBYpkSp>1SgZQ7*BJItr&ph(Z?wf7fa1 z;RiEfFewYyAw8Cge9JT~7RY3ZTeNkDIm8ps16Mfr+~ohG&3L;;w3J>85nRCu!IpSR zKe>kI+T6v6QEZbQV8g`}JxX1xfu_IIYYK%A5>-+(o&mkt8w82e_(ga$^MwuOu&`8F z@oplLppUp_@-(k;h@drBSLx94c;cAVeIYx}N6pR_FC#pP%}0#=^ayfpG|PCy&DG>8 z?!sgCX9GM8)}sT+E|?E>$GoAr0P)+A)6=YG$k)_gJb*rBJmz>jXXfE%lRZIwc;AFH z00q5$BE)e2E2KN7O*ZjW`M`xYISXF35G}JXB5YzVXu}xZalC~fpL=Djmf=)lsH)Mx z9b9zHHZ$hFNXX+gaK>Z;RT5xoUi}r^luZOzd{d>vVisy#Utyi*c`eUWohOa&x)AFG zP_t(497-uia#>ulj77*l3;+y`sD#Mo*Q^vN@X6FQ&S+pPFr<4j+f3V?i+;brAzfZ# zNxVQZ4KxwoRkA(#ZX+5@g>MEAGGQ1a^@Lcv(;atR4r6n{Xq#$BGIDy46fzHtha`{l zqlFPM^lToh2>Q9hx#xP3HFJfEqRwpF*(~b(vgS}*y!wk$eWOs!6J}CIkdS5+pH1!| z+lVD}LjuRL3(UrMLxiXjQQ^zdO*}k>T12JMtFvpjc(*|4+HX{aD#x7yv^9qu7wrGW z@=-8RPqM{31!`-`m)xsCl~B=nx7<{(R0);nf(y!7R*oOKNt2o0h>Il5q=aQ_+2|we zZ4RN5Gr-!}I`lnHwyF`aG$~89J3=a4T-2IC9HHmZx`hEY+b3U8Ge{kcF^%nMknPWI zH<5_+VT`?s*@GJf3&${uPQ6=u5|YXgDPrguVVm-JXJD$lHC%B_C}^a^p)F8#)9ZvH z6^d!78cbD87&vksUXYb^e&n``gsn>{jEY{&5EE4^FCCw|wQb5K*lZju*o;&8M-_Gb4@PJp^LeY3><0&x%V4b^KzA^co&slbcKMvR!0H)R#2 zmcS{Qtn+47gD{)A4D~d@thb!#O38Y)q21-h3&%B@ruPrIx369 z@YofUdu7~#EBzQR4z)`4oM=>v!$TMK+5}uX5L*W8wvdD_fL)3OI+ihS($sRP4Vc#6 zksL<)p9?5tYGvD*_`06y|7p~sjU8PcYgAuVG$SJr(M#GKZs<|6x%-5fcvHi0nyfV) z!|aQ4#w^#6VA^y}nqWTw literal 0 HcmV?d00001 diff --git a/resources/cards.json b/resources/cards.json index a864853..6c84a52 100644 --- a/resources/cards.json +++ b/resources/cards.json @@ -2,289 +2,181 @@ { "id": "init", "command": "git init", - "description": { - "en_EN": "Drag this card into the empty space above to initialize the time machine!", - "it_IT": "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" - } + "description": "Drag this card into the empty space above to initialize the time machine!" }, { "id": "clone", "command": "git clone ../[remote] .", - "description": { - "en_EN": "Create your own copy of someone else's repo.", - "it_IT": "Crea la tua copia personale del Repo di qualcun'altro." - } + "description": "Create your own copy of someone else's repo." }, { "id": "config-name", "command": "git config --global user.name [string]", - "description": { - "en_EN": "Set your name.\n\n(Will not change anything outside of this game.)", - "it_IT": "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" - } + "description": "Set your name.\n\n(Will not change anything outside of this game.)" }, { "id": "config-email", "command": "git config --global user.email [string]", - "description": { - "en_EN": "Set your email address.", - "it_IT": "Imposta la tua e-mail." - } + "description": "Set your email address." }, { "id": "checkout", "command": "git checkout [commit, ref]", - "description": { - "en_EN": "Drag this card to a commit or to a branch to travel to it!", - "it_IT": "Trascina questa carta su un commit o su un branch per spostarti su di esso." - } + "description": "Drag this card to a commit or to a branch to travel to it!" }, { "id": "checkout-file", "command": "git checkout [file]", - "description": { - "en_EN": "Reset changes in a local file.", - "it_IT": "Resetta i cambiamenti in un file locale" - } + "description": "Reset changes in a local file." }, { "id": "checkout-from", "command": "git checkout [commit, ref] [file]", - "description": { - "en_EN": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it.", - "it_IT": "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice." - } + "description": "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." }, { "id": "commit-a", "command": "git commit -a", - "description": { - "en_EN": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed.", - "it_IT": "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato." - } + "description": "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed." }, { "id": "commit-auto", "command": "git add .; git commit", - "description": { - "en_EN": "Make a new commit containing your current environment! Type in a description of what changed!", - "it_IT": "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!" - } + "description": "Make a new commit containing your current environment! Type in a description of what changed!" }, { "id": "merge", "command": "git merge [commit, ref]", - "description": { - "en_EN": "Merge the specified timeline into yours. If necessary, will create a merge commit.", - "it_IT": "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge." - } + "description": "Merge the specified timeline into yours. If necessary, will create a merge commit." }, { "id": "merge-abort", "command": "git merge --abort", - "description": { - "en_EN": "Abort the current merge attempt, and reconstruct the previous state.", - "it_IT": "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente." - } + "description": "Abort the current merge attempt, and reconstruct the previous state." }, { "id": "rebase", "command": "git rebase [commit]", - "description": { - "en_EN": "Put the events in your current timeline on top of the specified one.", - "it_IT": "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata." - } + "description": "Put the events in your current timeline on top of the specified one." }, { "id": "pull", "command": "git pull", - "description": { - "en_EN": "Get someone else's version of the current timeline, and try to merge it into yours.", - "it_IT": "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua." - } + "description": "Get someone else's version of the current timeline, and try to merge it into yours." }, { "id": "fetch", "command": "git fetch [remote]", - "description": { - "en_EN": "Get a someone else's version of the current timeline.", - "it_IT": "Prende la versione di qualcun'altro della temporale corrente" - } + "description": "Get a someone else's version of the current timeline." }, { "id": "push", "command": "git push", - "description": { - "en_EN": "Give the current timeline to someone else.", - "it_IT": "Invia la linea temporale corrente a qualcun'altro" - } + "description": "Give the current timeline to someone else." }, { "id": "rebase-interactive", "command": "git rebase -i [commit]", - "description": { - "en_EN": "Make changes to the events in your current timeline, back to the commit you drag this to.", - "it_IT": "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda." - } + "description": "Make changes to the events in your current timeline, back to the commit you drag this to." }, { "id": "rebase-continue", "command": "git rebase --continue", - "description": { - "en_EN": "Continue the current rebasing process.", - "it_IT": "Continua il processo di rebasing" - } + "description": "Continue the current rebasing process." }, { "id": "reset-hard", "command": "git reset --hard [commit]", - "description": { - "en_EN": "Move the branch you're on to the specified commit.", - "it_IT": "Sposta il branch su cui ti trovi al commit specificato." - } + "description": "Move the branch you're on to the specified commit." }, { "id": "reset", "command": "git reset [commit]", - "description": { - "en_EN": "Jump to the commit, and update the index. Keep the current environment.", - "it_IT": "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale." - } + "description": "Jump to the commit, and update the index. Keep the current environment." }, { "id": "reset-file", "command": "git reset [file]", - "description": { - "en_EN": "Reset the index version of a file to the version in the commit you're on.", - "it_IT": "Resetta la versione dell'indice di un file alla versione del commit in cui sei" - } + "description": "Reset the index version of a file to the version in the commit you're on." }, { "id": "cherry-pick", "command": "git cherry-pick [commit]", - "description": { - "en_EN": "Repeat the specified action on top of your current timeline.", - "it_IT": "Ripete l'azione specificata, in cima alla linea temporale corrente" - } + "description": "Repeat the specified action on top of your current timeline." }, { "id": "revert", "command": "git revert [commit]", - "description": { - "en_EN": "Make a new commit that reverts the changes of the speicified commit.", - "it_IT": "Crea un nuovo commit che annulla le modifiche del commit specificato." - } + "description": "Make a new commit that reverts the changes of the speicified commit." }, { "id": "bisect-start", "command": "git bisect start", - "description": { - "en_EN": "Start looking for the commit where things got bad.", - "it_IT": "Inizia a cercare il commit dove le cose sono andate storte" - } + "description": "Start looking for the commit where things got bad." }, { "id": "bisect-good", "command": "git bisect good", - "description": { - "en_EN": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!", - "it_IT": "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!" - } + "description": "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!" }, { "id": "bisect-bad", "command": "git bisect bad", - "description": { - "en_EN": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!", - "it_IT": "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!" - } + "description": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!" }, { "id": "add", "command": "git add [file]", - "description": { - "en_EN": "Update the index version of the file to its current real content.", - "it_IT": "Aggiorna la versione in indice del file con il contenuto attuale." - } + "description": "Update the index version of the file to its current real content." }, { "id": "rm", "command": "git rm [file]", - "description": { - "en_EN": "Delete a file both in the working directory, as well as the index.", - "it_IT": "Cancella un file sia dalla cartella di lavoro corrente che dall'indice." - } + "description": "Delete a file both in the working directory, as well as the index." }, { "id": "commit", "command": "git commit", - "description": { - "en_EN": "Make a commit from the current index.", - "it_IT": "Crea un commit dall'indice corrente." - } + "description": "Make a commit from the current index." }, { "id": "show", "command": "git show [commit]", - "description": { - "en_EN": "Show what changed in the commit.", - "it_IT": "Mostra cosa è cambiato nel commit." - } + "description": "Show what changed in the commit." }, { "id": "branch", "command": "git branch [string]", - "description": { - "en_EN": "Create a new branch at your current location.", - "it_IT": "Crea un nuovo branch alla posizione corrente." - } + "description": "Create a new branch at your current location." }, { "id": "branch-delete", "command": "git branch -D [ref]", - "description": { - "en_EN": "Delete a branch.", - "it_IT": "Cancella un branch." - } + "description": "Delete a branch." }, { "id": "reflog", "command": "git reflog [ref, head]", - "description": { - "en_EN": "Display a log of where the ref pointed to in the past.", - "it_IT": "Mostra un log di dove il riferimento (ref) ha puntato in passato." - } + "description": "Display a log of where the ref pointed to in the past." }, { "id": "file-new", "command": "touch [string]", - "description": { - "en_EN": "Create a new file.", - "it_IT": "Crea un nuovo file." - } + "description": "Create a new file." }, { "id": "file-delete", "command": "rm [file]", - "description": { - "en_EN": "Delete a file.", - "it_IT": "Cancella un file." - } + "description": "Delete a file." }, { "id": "file-rename", "command": "mv [file] [string]", - "description": { - "en_EN": "Rename a file.", - "it_IT": "Rinomina un file." - } + "description": "Rename a file." }, { "id": "file-copy", "command": "cp [file] [string]", - "description": { - "en_EN": "Make a copy of a file.", - "it_IT": "Crea una copia di un file." - } + "description": "Make a copy of a file." } ] diff --git a/scenes/cards.gd b/scenes/cards.gd index f1696ec..aeb360c 100644 --- a/scenes/cards.gd +++ b/scenes/cards.gd @@ -40,7 +40,7 @@ func draw_card(card): new_card.id = card["id"] new_card.command = card["command"] # TODO: Make better game.os_lang + "_" + game.os_lang.to_upper() - new_card.description = card["description"][game.os_lang + "_" + game.os_lang.to_upper()] + new_card.description = tr(card["description"]) new_card.energy = 0 #card.energy new_card.position = Vector2(rect_size.x, rect_size.y*2) add_child(new_card) diff --git a/scenes/level.gd b/scenes/level.gd index d978784..3f6ebdf 100644 --- a/scenes/level.gd +++ b/scenes/level.gd @@ -21,6 +21,7 @@ func load(path): var config = helpers.parse(path) title = config.get("title", slug) + print(tr(title)) description = config.get("description", "(no description)") # Surround all lines indented with four spaces with [code] tags. @@ -42,7 +43,7 @@ func load(path): if cli_hints != "": description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]" - congrats = config.get("congrats", "GOOD_JOB") + congrats = config.get("congrats", tr("Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.")) cards = Array(config.get("cards", "").split(" ")) if cards == [""]: cards = [] From c2e0eaffb6de3009f5bc3b6d6206d266a04decdc Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Thu, 18 Aug 2022 17:52:39 +0200 Subject: [PATCH 36/49] splited .po files for cards, levels and some one --- levels/branches/checkout-commit | 2 +- levels/intro/init | 2 +- levels/intro/risky | 2 +- locale/it.po | 152 +----------- locale/it_cards.po | 164 +++++++++++++ locale/it_levels.po | 401 ++++++++++++++++++++++++++++++++ project.godot | 2 +- scenes/chapter.gd | 6 +- scenes/level.gd | 10 +- scenes/levels.gd | 7 +- 10 files changed, 583 insertions(+), 165 deletions(-) create mode 100644 locale/it_cards.po create mode 100644 locale/it_levels.po diff --git a/levels/branches/checkout-commit b/levels/branches/checkout-commit index 87061d8..258434d 100644 --- a/levels/branches/checkout-commit +++ b/levels/branches/checkout-commit @@ -3,7 +3,7 @@ cards = checkout commit-auto [description] -The yellow boxes are frozen points in time, we call them "commits"! You can travel between them using the "checkout" card! (Try it!) +The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the "checkout" card! (Try it!) Can you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit! diff --git a/levels/intro/init b/levels/intro/init index ea0426e..01e6071 100644 --- a/levels/intro/init +++ b/levels/intro/init @@ -5,7 +5,7 @@ cards = init You've been accepted to time travel school! Yay! It's your first day! Your teacher explains: -"To do anything with a time machine, you first need to initialize it!" +'To do anything with a time machine, you first need to initialize it!' Drag that blue card up to play it! diff --git a/levels/intro/risky b/levels/intro/risky index a5e7239..de8560a 100644 --- a/levels/intro/risky +++ b/levels/intro/risky @@ -3,7 +3,7 @@ cards = [description] -So you have decided to apply for time travel school, to learn how to use this time machine called "Git"! +So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'! How exciting! diff --git a/locale/it.po b/locale/it.po index 59b3509..591bde3 100644 --- a/locale/it.po +++ b/locale/it.po @@ -265,154 +265,4 @@ msgstr "Il testo qui" #: oh-my-git/scenes/title.tscn:74 msgid "Language" -msgstr "Linguaggio" - -#: CARDS DESCRIPTION -#: oh-my-git/resources/cards.json:6 -msgid "Drag this card into the empty space above to initialize the time machine!" -msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" - -#: oh-my-git/resources/cards.json:14 -msgid "Create your own copy of someone else's repo." -msgstr "Crea la tua copia personale del Repo di qualcun'altro." - -#: oh-my-git/resources/cards.json:22 -msgid "Set your name.\n\n(Will not change anything outside of this game.)" -msgstr "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" - -#: oh-my-git/resources/cards.json:30 -msgid "Set your email address." -msgstr "Imposta la tua e-mail." - -#: oh-my-git/resources/cards.json:38 -msgid "Drag this card to a commit or to a branch to travel to it!" -msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso." - -#: oh-my-git/resources/cards.json:46 -msgid "Reset changes in a local file." -msgstr "Resetta i cambiamenti in un file locale" - -#: oh-my-git/resources/cards.json:54 -msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." -msgstr "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice." - -#: oh-my-git/resources/cards.json:62 -msgid "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed." -msgstr "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato." - -#: oh-my-git/resources/cards.json:70 -msgid "Make a new commit containing your current environment! Type in a description of what changed!" -msgstr "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!" - -#: oh-my-git/resources/cards.json:78 -msgid "Merge the specified timeline into yours. If necessary, will create a merge commit." -msgstr "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge." - -#: oh-my-git/resources/cards.json:86 -msgid "Abort the current merge attempt, and reconstruct the previous state." -msgstr "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente." - -#: oh-my-git/resources/cards.json:94 -msgid "Put the events in your current timeline on top of the specified one." -msgstr "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata." - -#: oh-my-git/resources/cards.json:102 -msgid "Get someone else's version of the current timeline, and try to merge it into yours." -msgstr "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua." - -#: oh-my-git/resources/cards.json:110 -msgid "Get a someone else's version of the current timeline." -msgstr "Prende la versione di qualcun'altro della temporale corrente" - -#: oh-my-git/resources/cards.json:118 -msgid "Give the current timeline to someone else." -msgstr "Invia la linea temporale corrente a qualcun'altro" - -#: oh-my-git/resources/cards.json:126 -msgid "Make changes to the events in your current timeline, back to the commit you drag this to." -msgstr "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda." - -#: oh-my-git/resources/cards.json:134 -msgid "Continue the current rebasing process." -msgstr "Continua il processo di rebasing" - -#: oh-my-git/resources/cards.json:142 -msgid "Move the branch you're on to the specified commit." -msgstr "Sposta il branch su cui ti trovi al commit specificato." - -#: oh-my-git/resources/cards.json:150 -msgid "Jump to the commit, and update the index. Keep the current environment." -msgstr "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale." - -#: oh-my-git/resources/cards.json:158 -msgid "Reset the index version of a file to the version in the commit you're on." -msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei" - -#: oh-my-git/resources/cards.json:166 -msgid "Repeat the specified action on top of your current timeline." -msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente" - -#: oh-my-git/resources/cards.json:174 -msgid "Make a new commit that reverts the changes of the speicified commit." -msgstr "Crea un nuovo commit che annulla le modifiche del commit specificato." - -#: oh-my-git/resources/cards.json:182 -msgid "Start looking for the commit where things got bad." -msgstr "Inizia a cercare il commit dove le cose sono andate storte" - -#: oh-my-git/resources/cards.json:190 -msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!" -msgstr "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!" - -#: oh-my-git/resources/cards.json:198 -msgid "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!" -msgstr "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!" - -#: oh-my-git/resources/cards.json:206 -msgid "Update the index version of the file to its current real content." -msgstr "Aggiorna la versione in indice del file con il contenuto attuale." - -#: oh-my-git/resources/cards.json:214 -msgid "Delete a file both in the working directory, as well as the index." -msgstr "Cancella un file sia dalla cartella di lavoro corrente che dall'indice." - -#: oh-my-git/resources/cards.json:222 -msgid "Make a commit from the current index." -msgstr "Crea un commit dall'indice corrente." - -#: oh-my-git/resources/cards.json:230 -msgid "Show what changed in the commit." -msgstr "Mostra cosa è cambiato nel commit." - -#: oh-my-git/resources/cards.json:238 -msgid "Create a new branch at your current location." -msgstr "Crea un nuovo branch alla posizione corrente." - -#: oh-my-git/resources/cards.json:246 -msgid "Delete a branch." -msgstr "Cancella un branch." - -#: oh-my-git/resources/cards.json:254 -msgid "Display a log of where the ref pointed to in the past." -msgstr "Mostra un log di dove il riferimento (ref) ha puntato in passato." - -#: oh-my-git/resources/cards.json:262 -msgid "Create a new file." -msgstr "Crea un nuovo file." - -#: oh-my-git/resources/cards.json:270 -msgid "Delete a file." -msgstr "Cancella un file." - -#: oh-my-git/resources/cards.json:278 -msgid "Rename a file." -msgstr "Rinomina un file." - -#: oh-my-git/resources/cards.json:286 -msgid "Make a copy of a file." -msgstr "Crea una copia di un file." - -#: LEVELS -#: oh-my-git/levels/ -msgid "Amici" -msgstr "Friend" +msgstr "Linguaggio" \ No newline at end of file diff --git a/locale/it_cards.po b/locale/it_cards.po new file mode 100644 index 0000000..8e12c7f --- /dev/null +++ b/locale/it_cards.po @@ -0,0 +1,164 @@ +# Translations template for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# Automatically generated, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: 2022-08-18 10:39+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: CARDS DESCRIPTION +#: oh-my-git/resources/cards.json:6 +msgid "Drag this card into the empty space above to initialize the time machine!" +msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" + +#: oh-my-git/resources/cards.json:14 +msgid "Create your own copy of someone else's repo." +msgstr "Crea la tua copia personale del Repo di qualcun'altro." + +#: oh-my-git/resources/cards.json:22 +msgid "Set your name.\n\n(Will not change anything outside of this game.)" +msgstr "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" + +#: oh-my-git/resources/cards.json:30 +msgid "Set your email address." +msgstr "Imposta la tua e-mail." + +#: oh-my-git/resources/cards.json:38 +msgid "Drag this card to a commit or to a branch to travel to it!" +msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso." + +#: oh-my-git/resources/cards.json:46 +msgid "Reset changes in a local file." +msgstr "Resetta i cambiamenti in un file locale" + +#: oh-my-git/resources/cards.json:54 +msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." +msgstr "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice." + +#: oh-my-git/resources/cards.json:62 +msgid "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed." +msgstr "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato." + +#: oh-my-git/resources/cards.json:70 +msgid "Make a new commit containing your current environment! Type in a description of what changed!" +msgstr "Crea un commit contenente il tuo ambiente attuale! Scrivi una descrizione di cosa è cambiato!" + +#: oh-my-git/resources/cards.json:78 +msgid "Merge the specified timeline into yours. If necessary, will create a merge commit." +msgstr "Unisce la linea temporale specificata con la tua. Se necessario, creerà un commit di merge." + +#: oh-my-git/resources/cards.json:86 +msgid "Abort the current merge attempt, and reconstruct the previous state." +msgstr "Interrompe il corrente tentativo di unione e ricostruisce lo stato precedente." + +#: oh-my-git/resources/cards.json:94 +msgid "Put the events in your current timeline on top of the specified one." +msgstr "Mette gli eventi della tua linea temporale corrente sulla linea temporale specificata." + +#: oh-my-git/resources/cards.json:102 +msgid "Get someone else's version of the current timeline, and try to merge it into yours." +msgstr "Prende la versione di qualcun'altro della temporale corrente e prova ad unirla alla tua." + +#: oh-my-git/resources/cards.json:110 +msgid "Get a someone else's version of the current timeline." +msgstr "Prende la versione di qualcun'altro della temporale corrente" + +#: oh-my-git/resources/cards.json:118 +msgid "Give the current timeline to someone else." +msgstr "Invia la linea temporale corrente a qualcun'altro" + +#: oh-my-git/resources/cards.json:126 +msgid "Make changes to the events in your current timeline, back to the commit you drag this to." +msgstr "Cambia gli eventi della linea temporale fino al commit su cui hai trascinato questa scheda." + +#: oh-my-git/resources/cards.json:134 +msgid "Continue the current rebasing process." +msgstr "Continua il processo di rebasing" + +#: oh-my-git/resources/cards.json:142 +msgid "Move the branch you're on to the specified commit." +msgstr "Sposta il branch su cui ti trovi al commit specificato." + +#: oh-my-git/resources/cards.json:150 +msgid "Jump to the commit, and update the index. Keep the current environment." +msgstr "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale." + +#: oh-my-git/resources/cards.json:158 +msgid "Reset the index version of a file to the version in the commit you're on." +msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei" + +#: oh-my-git/resources/cards.json:166 +msgid "Repeat the specified action on top of your current timeline." +msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente" + +#: oh-my-git/resources/cards.json:174 +msgid "Make a new commit that reverts the changes of the speicified commit." +msgstr "Crea un nuovo commit che annulla le modifiche del commit specificato." + +#: oh-my-git/resources/cards.json:182 +msgid "Start looking for the commit where things got bad." +msgstr "Inizia a cercare il commit dove le cose sono andate storte" + +#: oh-my-git/resources/cards.json:190 +msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!" +msgstr "Dichiara che l'attuale commit è buono! Continua a giocare con le carte `buono` e `cattivo`!" + +#: oh-my-git/resources/cards.json:198 +msgid "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!" +msgstr "Dichiara che l'attuale commit non è valido! Continua a giocare con le carte `buone` e `cattive`!" + +#: oh-my-git/resources/cards.json:206 +msgid "Update the index version of the file to its current real content." +msgstr "Aggiorna la versione in indice del file con il contenuto attuale." + +#: oh-my-git/resources/cards.json:214 +msgid "Delete a file both in the working directory, as well as the index." +msgstr "Cancella un file sia dalla cartella di lavoro corrente che dall'indice." + +#: oh-my-git/resources/cards.json:222 +msgid "Make a commit from the current index." +msgstr "Crea un commit dall'indice corrente." + +#: oh-my-git/resources/cards.json:230 +msgid "Show what changed in the commit." +msgstr "Mostra cosa è cambiato nel commit." + +#: oh-my-git/resources/cards.json:238 +msgid "Create a new branch at your current location." +msgstr "Crea un nuovo branch alla posizione corrente." + +#: oh-my-git/resources/cards.json:246 +msgid "Delete a branch." +msgstr "Cancella un branch." + +#: oh-my-git/resources/cards.json:254 +msgid "Display a log of where the ref pointed to in the past." +msgstr "Mostra un log di dove il riferimento (ref) ha puntato in passato." + +#: oh-my-git/resources/cards.json:262 +msgid "Create a new file." +msgstr "Crea un nuovo file." + +#: oh-my-git/resources/cards.json:270 +msgid "Delete a file." +msgstr "Cancella un file." + +#: oh-my-git/resources/cards.json:278 +msgid "Rename a file." +msgstr "Rinomina un file." + +#: oh-my-git/resources/cards.json:286 +msgid "Make a copy of a file." +msgstr "Crea una copia di un file." \ No newline at end of file diff --git a/locale/it_levels.po b/locale/it_levels.po new file mode 100644 index 0000000..1bd7b4f --- /dev/null +++ b/locale/it_levels.po @@ -0,0 +1,401 @@ +# Translations template for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# Automatically generated, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: 2022-08-18 10:39+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: TITLE +#: oh-my-git/levels/ +msgid "Friend" +msgstr "Amici" + +msgid "friend" +msgstr "amici" + + +#: DESCRIPTION +msgid "So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!\n\nHow exciting!\n\nYou're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git." +msgstr "PIPPO" + +msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!" +msgstr "PIPPO" + +msgid "You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:\n\n'To do anything with a time machine, you first need to initialize it!'\n\nDrag that blue card up to play it!" +msgstr "PIPPO" + +msgid "These playing cards are designed to be easy to use and to remember! We'd suggest sticking to them if you don't have a lot of experience with Git!" +msgstr "PIPPO" + +msgid "You can use your time machine to make snapshots of objects around you! Here, let's practice this!\n\n(Your teacher pours some water into a glass.)" +msgstr "PIPPO" + +msgid "Let's add your name to our list of students!\n\nI already have a second commit of it in my time machine - let's work together!" +msgstr "PIPPO" + +msgid "The first day at Time Travel School comes to an end and you receive the key to your room.\nFull of excitement you open the door just to find... spider webs! Spider webs everywhere!\n\nRemove all the spider webs you can find with the remove card!" +msgstr "PIPPO" + +msgid "Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,\nyou see that their colors match the color of your bed!\n\nBuild up your two pieces of furniture by playing the touch card.\nThen name your furniture - you can choose whatever you like.\n\nMake sure the colors match! You can find the bed's color in its description.\nDon't forget to add a color and description to your new furnitures, too!" +msgstr "PIPPO" + +msgid "The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the 'checkout' card! (Try it!)\n\nCan you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!" +msgstr "PIPPO" + +msgid "Did you know that creating parallel timelines is perfectly legal and safe? It's true!\n\nCan you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!" +msgstr "PIPPO" + +msgid "You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!\n\nTo make it easier to tell which timeline is which, you can create time portals! (We call these 'branches'.)" +msgstr "PIPPO" + +msgid "Note that there are two options to 'travel to the end of a timeline':\n\nFirst, you can directly travel to the commit, like we've done it before.\n\nAnd second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!" +msgstr "PIPPO" + +msgid "Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!\n\nThis Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around." +msgstr "PIPPO" + +msgid "One of your colleagues messed up here, and put the branches in the wrong timelines!\n\nYou could delete and re-create these branches - but you can also directly move them to different commits, by using\n\n git checkout\n\non the branch names, and then using\n\n git reset --hard\n\non the commit where you want the branch to be.\n\nThe donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!" +msgstr "PIPPO" + +msgid "Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!" +msgstr "PIPPO" + +msgid "Sometimes, timelines will contradict each other.\n\nFor example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.\n\nTry to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!\n\nLet your finalized timeline be the 'main' one." +msgstr "PIPPO" + +msgid "Welcome to today's lesson! We're going to learn how to make commits with more precision!\n\nHave a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened." +msgstr "PIPPO" + +msgid "So far, when we made a commit, we've always recorded the current status of all objects, right?\n\nBut Git allows you to pick which changes you want to put in a commit!\n\nTo learn how that works, we need to learn about the 'index'! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!\n\nInitially, the index is empty. To make a commit that contains a new file, we need to add it!" +msgstr "PIPPO" + +msgid "When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.\n\nLet's try that!\n\nThe icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!" +msgstr "PIPPO" + +msgid "See the dark shadow behind the icons? That's the version of the file in the last commit!\n\nFor example, these candles have been blown out, and that change has been added.\n\nBut you decide that this was a mistake! You only want to blow out the red candle in the next commit!\n\nIf you already have updated the index to a changed file, but want to reset it, you can use `git reset`!" +msgstr "PIPPO" + +msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!" +msgstr "PIPPO" + +msgid "Your friend added another line to your essay! Get it, add a third one and send it to them!\n\nTake turns until you have five lines!" +msgstr "PIPPO" + +msgid "Both you and your friend have been working on the file, and want to sync up!" +msgstr "PIPPO" + +msgid "Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.\n\nSee the 'rebase' card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.\n\nAgain, we want to make that our base reality - the 'main' branch should point to that timeline!" +msgstr "PIPPO" + +msgid "Oops, looks like there's something messed up here. Can you put the events back into their correct order?\n\nThere are two ways to do this: You can drag the 'interactive rebase' card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.\n\nOr you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!" +msgstr "PIPPO" + +msgid "Oops - you deleted the 'essay' file, which you worked on all night!\n\nLuckily, Git is here to help! You can use `git checkout` to restore the file!" +msgstr "PIPPO" + +msgid "Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:\n\n git checkout [commit] [file]" +msgstr "PIPPO" + +msgid "Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?\n\nThe answer is using `git reset [commit]`, which does two things:\n\n- It resets the current branch ref to the commit you specify.\n- And it resets the index to that commit.\n\nIt does not change your working directory in any way, which means that after that, you can try making the commit you want again." +msgstr "PIPPO" + +msgid "We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`" +msgstr "PIPPO" + +msgid "Say you were looking at something in the past, and then switched back to the main branch.\n\nBut then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?\n\nThere's a convenient command that shows you all the places your HEAD did point to in the past:\n\n git reflog" +msgstr "PIPPO" + +msgid "Your friend has a problem! Clone the repo, create a branch called 'solution', and fix the problem in this branch. When you're ready, make a 'Pull Request' by using `git tag pr`." +msgstr "PIPPO" + +msgid "(Please zoom out a bit using your mouse wheel! :D)\n\nOh no! You have lost your key at some point during the day!\n\nSure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!\n\nFirst, play the 'bisect start' card. Then, go to a commit where you don't have the key, and play the 'bisect bad' card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the 'bisect good card'.\n\nAfter you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?" +msgstr "PIPPO" + +msgid "You will encounter situations in which you are working on your project but you need to\nput your current changes aside temporarily. To do so, you can use the stash function. Use\n git stash push \nto add your current changes to the stash stack.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "When you stashed your changes and you want to apply them back to your current working directory, you can use\n git stash pop\nThis will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use\n git stash apply\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "If you want to inspect your stash stack, use the command\n git stash list\n \nOh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with\n git stash clear\nIf you only want to discard a certain stash entry, you can use\n git stash drop \n \nClear your stash stack!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "If you want to keep your changes but they don't belong to the main branch, you can easily\ncreate a new branch from your stashed changes. Just use\n git stash branch \nIf you just want to use the latest stash entry, you can leave the option empty.\n\nCreate a new branch from the stashed changes!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "When you want to reapply your changes but you already continued working on your file, you might get\na merge conflict! Let's practise this situation.\nPop the changes from the stash with\n git stash pop\nand resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "Some of your commits may be special commits. Maybe you reached a milestone or a new version number.\n\nYou can mark these commits with a special flag called 'tag'.\n\nWrite \n\n git tag \n \nto tag your commit.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "You added way too many tags? No prob! Delete them with\n\n git tag -d \n \nRemove all tags in this repo!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "But what happens if you forgot to tag your current commit?\nNo Prob! You can also tag older commits via\n\n git tag \n \nTag the commit 'Adding feature 2' with the name 'v1'!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "When you work with remote repositories, tags are not pushed or pulled automatically.\n\nYou can push a tag with\n git push \nOr all tags with:\n git push --tags\n \nDeleting tags on your remote works with: \n git push --delete \n \nYou can also sync \n git fetch --prune --prune-tags\n\n\nAdd a tag named 'v2' to the last commit and push it to the remote. Also pull the v1 tag to your local repository." +msgstr "PIPPO" + +msgid "This is an empty sandbox you can play around in." +msgstr "PIPPO" + +msgid "Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n\nHow can you push tags and branches on a remote? How can you delete them again?" +msgstr "PIPPO" + +msgid "Here's a sandbox you can play around in.\n\nYou can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:\n\n- Make a commit that merges three timelines together at once!\n- Create and delete some tags!\n- Make a timeline that's completely independent of the rest!" +msgstr "PIPPO" + +msgid "So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!\n\nHow exciting!\n\nYou're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git." +msgstr "PIPPO" + +msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!" +msgstr "PIPPO" + +msgid "You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:\n\n'To do anything with a time machine, you first need to initialize it!'\n\nDrag that blue card up to play it!" +msgstr "PIPPO" + +msgid "These playing cards are designed to be easy to use and to remember! We'd suggest sticking to them if you don't have a lot of experience with Git!" +msgstr "PIPPO" + +msgid "You can use your time machine to make snapshots of objects around you! Here, let's practice this!\n\n(Your teacher pours some water into a glass.)" +msgstr "PIPPO" + +msgid "Let's add your name to our list of students!\n\nI already have a second commit of it in my time machine - let's work together!" +msgstr "PIPPO" + +msgid "The first day at Time Travel School comes to an end and you receive the key to your room.\nFull of excitement you open the door just to find... spider webs! Spider webs everywhere!\n\nRemove all the spider webs you can find with the remove card!" +msgstr "PIPPO" + +msgid "Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,\nyou see that their colors match the color of your bed!\n\nBuild up your two pieces of furniture by playing the touch card.\nThen name your furniture - you can choose whatever you like.\n\nMake sure the colors match! You can find the bed's color in its description.\nDon't forget to add a color and description to your new furnitures, too!" +msgstr "PIPPO" + +msgid "The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the 'checkout' card! (Try it!)\n\nCan you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!" +msgstr "PIPPO" + +msgid "Did you know that creating parallel timelines is perfectly legal and safe? It's true!\n\nCan you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!" +msgstr "PIPPO" + +msgid "You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!\n\nTo make it easier to tell which timeline is which, you can create time portals! (We call these 'branches'.)" +msgstr "PIPPO" + +msgid "Note that there are two options to 'travel to the end of a timeline':\n\nFirst, you can directly travel to the commit, like we've done it before.\n\nAnd second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!" +msgstr "PIPPO" + +msgid "Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!\n\nThis Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around." +msgstr "PIPPO" + +msgid "One of your colleagues messed up here, and put the branches in the wrong timelines!\n\nYou could delete and re-create these branches - but you can also directly move them to different commits, by using\n\n git checkout\n\non the branch names, and then using\n\n git reset --hard\n\non the commit where you want the branch to be.\n\nThe donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!" +msgstr "PIPPO" + +msgid "Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!" +msgstr "PIPPO" + +msgid "Sometimes, timelines will contradict each other.\n\nFor example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.\n\nTry to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!\n\nLet your finalized timeline be the 'main' one." +msgstr "PIPPO" + +msgid "Welcome to today's lesson! We're going to learn how to make commits with more precision!\n\nHave a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened." +msgstr "PIPPO" + +msgid "So far, when we made a commit, we've always recorded the current status of all objects, right?\n\nBut Git allows you to pick which changes you want to put in a commit!\n\nTo learn how that works, we need to learn about the 'index'! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!\n\nInitially, the index is empty. To make a commit that contains a new file, we need to add it!" +msgstr "PIPPO" + +msgid "When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.\n\nLet's try that!\n\nThe icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!" +msgstr "PIPPO" + +msgid "See the dark shadow behind the icons? That's the version of the file in the last commit!\n\nFor example, these candles have been blown out, and that change has been added.\n\nBut you decide that this was a mistake! You only want to blow out the red candle in the next commit!\n\nIf you already have updated the index to a changed file, but want to reset it, you can use `git reset`!" +msgstr "PIPPO" + +msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!" +msgstr "PIPPO" + +msgid "Your friend added another line to your essay! Get it, add a third one and send it to them!\n\nTake turns until you have five lines!" +msgstr "PIPPO" + +msgid "Both you and your friend have been working on the file, and want to sync up!" +msgstr "PIPPO" + +msgid "Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.\n\nSee the 'rebase' card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.\n\nAgain, we want to make that our base reality - the 'main' branch should point to that timeline!" +msgstr "PIPPO" + +msgid "Oops, looks like there's something messed up here. Can you put the events back into their correct order?\n\nThere are two ways to do this: You can drag the 'interactive rebase' card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.\n\nOr you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!" +msgstr "PIPPO" + +msgid "Oops - you deleted the 'essay' file, which you worked on all night!\n\nLuckily, Git is here to help! You can use `git checkout` to restore the file!" +msgstr "PIPPO" + +msgid "Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:\n\n git checkout [commit] [file]" +msgstr "PIPPO" + +msgid "Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?\n\nThe answer is using `git reset [commit]`, which does two things:\n\n- It resets the current branch ref to the commit you specify.\n- And it resets the index to that commit.\n\nIt does not change your working directory in any way, which means that after that, you can try making the commit you want again." +msgstr "PIPPO" + +msgid "We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`" +msgstr "PIPPO" + +msgid "Say you were looking at something in the past, and then switched back to the main branch.\n\nBut then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?\n\nThere's a convenient command that shows you all the places your HEAD did point to in the past:\n\n git reflog" +msgstr "PIPPO" + +msgid "Your friend has a problem! Clone the repo, create a branch called 'solution', and fix the problem in this branch. When you're ready, make a 'Pull Request' by using `git tag pr`." +msgstr "PIPPO" + +msgid "(Please zoom out a bit using your mouse wheel! :D)\n\nOh no! You have lost your key at some point during the day!\n\nSure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!\n\nFirst, play the 'bisect start' card. Then, go to a commit where you don't have the key, and play the 'bisect bad' card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the 'bisect good card'.\n\nAfter you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?" +msgstr "PIPPO" + +msgid "You will encounter situations in which you are working on your project but you need to\nput your current changes aside temporarily. To do so, you can use the stash function. Use\n git stash push \nto add your current changes to the stash stack.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "When you stashed your changes and you want to apply them back to your current working directory, you can use\n git stash pop\nThis will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use\n git stash apply\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "If you want to inspect your stash stack, use the command\n git stash list\n \nOh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with\n git stash clear\nIf you only want to discard a certain stash entry, you can use\n git stash drop \n \nClear your stash stack!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "If you want to keep your changes but they don't belong to the main branch, you can easily\ncreate a new branch from your stashed changes. Just use\n git stash branch \nIf you just want to use the latest stash entry, you can leave the option empty.\n\nCreate a new branch from the stashed changes!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "When you want to reapply your changes but you already continued working on your file, you might get\na merge conflict! Let's practise this situation.\nPop the changes from the stash with\n git stash pop\nand resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "Some of your commits may be special commits. Maybe you reached a milestone or a new version number.\n\nYou can mark these commits with a special flag called 'tag'.\n\nWrite \n\n git tag \n \nto tag your commit.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "You added way too many tags? No prob! Delete them with\n\n git tag -d \n \nRemove all tags in this repo!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "But what happens if you forgot to tag your current commit?\nNo Prob! You can also tag older commits via\n\n git tag \n \nTag the commit 'Adding feature 2' with the name 'v1'!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" +msgstr "PIPPO" + +msgid "When you work with remote repositories, tags are not pushed or pulled automatically.\n\nYou can push a tag with\n git push \nOr all tags with:\n git push --tags\n \nDeleting tags on your remote works with: \n git push --delete \n \nYou can also sync \n git fetch --prune --prune-tags\n\n\nAdd a tag named 'v2' to the last commit and push it to the remote. Also pull the v1 tag to your local repository." +msgstr "PIPPO" + +msgid "This is an empty sandbox you can play around in." +msgstr "PIPPO" + +msgid "Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n\nHow can you push tags and branches on a remote? How can you delete them again?" +msgstr "PIPPO" + +msgid "Here's a sandbox you can play around in.\n\nYou can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:\n\n- Make a commit that merges three timelines together at once!\n- Create and delete some tags!\n- Make a timeline that's completely independent of the rest!" +msgstr "PIPPO" + +#: HITS +msgid "But there's another way to interact with Git:\n\nTry typing `git init` into the black terminal below, and pressing the enter key!" +msgstr "PIPPO" + +msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!\n\nThis is totally optional! But this will be a super useful skill in the real world - and it will give you a sparkling golden badge! :)" +msgstr "PIPPO" + +msgid "To go back to old commands, you can press arrow up and down. That way, you don't have to type in long commands twice." +msgstr "PIPPO" + +msgid "On the command line, you can easily delete all files ending in -web using this command:\n\n rm *web" +msgstr "PIPPO" + +msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!\n\nThis will insert the commit's unique identifier!" +msgstr "PIPPO" + +msgid "The blue animal represents a concept known as the 'HEAD pointer' in Git: It shows you which commit is the current one.\n\nHere's a cool trick to go to the previous commit: \n\n git checkout HEAD^\n\nYou can also go back two commits by typing, for example: \n\n git checkout HEAD~2" +msgstr "PIPPO" + +msgid "Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called 'birthday', you can type `git checkout birthday` to travel to it!" +msgstr "PIPPO" + +msgid "To travel to a branch, type `git checkout name_of_the_branch`.\n\nAnd to travel to the last commit, type `git checkout --detach name_of_the_branch`." +msgstr "PIPPO" + +msgid "You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!" +msgstr "PIPPO" + +msgid "But there's another way to interact with Git:\n\nTry typing `git init` into the black terminal below, and pressing the enter key!" +msgstr "PIPPO" + +msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!\n\nThis is totally optional! But this will be a super useful skill in the real world - and it will give you a sparkling golden badge! :)" +msgstr "PIPPO" + +msgid "To go back to old commands, you can press arrow up and down. That way, you don't have to type in long commands twice." +msgstr "PIPPO" + +msgid "On the command line, you can easily delete all files ending in -web using this command:\n\n rm *web" +msgstr "PIPPO" + +msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!\n\nThis will insert the commit's unique identifier!" +msgstr "PIPPO" + +msgid "The blue animal represents a concept known as the 'HEAD pointer' in Git: It shows you which commit is the current one.\n\nHere's a cool trick to go to the previous commit: \n\n git checkout HEAD^\n\nYou can also go back two commits by typing, for example: \n\n git checkout HEAD~2" +msgstr "PIPPO" + +msgid "Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called 'birthday', you can type `git checkout birthday` to travel to it!" +msgstr "PIPPO" + +msgid "To travel to a branch, type `git checkout name_of_the_branch`.\n\nAnd to travel to the last commit, type `git checkout --detach name_of_the_branch`." +msgstr "PIPPO" + +msgid "You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!" +msgstr "PIPPO" + + +############################################# + +#: CONGRAT +msgid "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'." +msgstr "PIPPO" +msgid "Suddenly, your cat jumps on the table, snatches away the form, and runs away! Oh no. All your hard work, gone!\n\nYou clearly need a better solution.\n\n(Click 'Next Level' as soon as you're ready!)" +msgstr "PIPPO" +msgid "Okay, this kind of works.\n\nBut you're a bit worried that you'll end up with hundreds of copies of this form, and it will be hard to keep track of all of them.\n\nAnd especially when working with other people, sending copies back and forth doesn't seem ideal.\n\nYou can't wait to try these time machines!" +msgstr "PIPPO" +msgid "Nice! See that little owl squirrel that appeared? It will be your companion, and always show you where you are in time!" +msgstr "PIPPO" +msgid "Cool! Instead of using the playing cards, you can also do everything via the command line!\n\nThe command line is pretty powerful! Often, you can use it to solve tasks faster compared to using a graphical interface." +msgstr "PIPPO" +msgid "Nice! You can try making some additional commits. When you feel comfortable, click on 'Next Level'." +msgstr "PIPPO" +msgid "Welcome to time travel school! :) I'll see you for your first class tomorrow!" +msgstr "PIPPO" +msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" +msgstr "PIPPO" +msgid "Don't you immediately feel more at home?" +msgstr "PIPPO" +msgid "Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations..." +msgstr "PIPPO" +msgid "Whew, good job! This seems like a *much* better outcome.\n\nFeel free to add more parallel timelines, or make them longer.\n\nIf you're ready, our next mission is already waiting..." +msgstr "PIPPO" +msgid "Now you can travel between those branches easily (using `git checkout`) - try it!\n\nYour friend is happy that you made it to the birthday party and you also got your concert ticket signed. Yay!" +msgstr "PIPPO" +msgid "On second thought, maybe you even prefer the ice cream timeline to the main one? :)" +msgstr "PIPPO" +msgid "I wonder if you're more relaxed when you *sleep* in parallel timelines..." +msgstr "PIPPO" +msgid "Yum, that sounds like a good breakfast!" +msgstr "PIPPO" +msgid "Notice how the other timelines and commits are still there - if anything goes wrong, you can also travel back to them.\n\nIt's really hard to actually *destroy* stuff with your time machine." +msgstr "PIPPO" +msgid "Feel free to reset the level and try the other strategy! Which one do you like better?" +msgstr "PIPPO" +msgid "Well done! :) The only problem is that you now have to walk all the way back home, again..." +msgstr "PIPPO" +msgid "Nice stash you got there! :)" +msgstr "PIPPO" +msgid "Yay, you got your changes back! :)" +msgstr "PIPPO" +msgid "All clear! :)" +msgstr "PIPPO" +msgid "Stashed changes are in a new branch! :)" +msgstr "PIPPO" +msgid "Nice! You tagged your first commit :)" +msgstr "PIPPO" +msgid "Well done :)" +msgstr "PIPPO" \ No newline at end of file diff --git a/project.godot b/project.godot index 59db029..05c7cc7 100644 --- a/project.godot +++ b/project.godot @@ -151,7 +151,7 @@ mute={ [locale] -translations=PoolStringArray( "res://locale/it.po" ) +translations=PoolStringArray( "res://locale/it.po", "res://locale/it_levels.po", "res://locale/it_cards.po" ) locale_filter=[ 0, [ ] ] [network] diff --git a/scenes/chapter.gd b/scenes/chapter.gd index 17f75b5..9f2abc2 100644 --- a/scenes/chapter.gd +++ b/scenes/chapter.gd @@ -13,7 +13,7 @@ func load(path): var level_names = [] var dir = Directory.new() - dir.open("res://levels/" + game.os_lang + "/%s" % slug) + dir.open("res://levels/%s" % slug) dir.list_dir_begin() while true: @@ -28,7 +28,7 @@ func load(path): var final_level_sequence = [] - var level_sequence = Array(helpers.read_file("res://levels/" + game.os_lang + "/%s/sequence" % slug, "").split("\n")) + var level_sequence = Array(helpers.read_file("res://levels/%s/sequence" % slug, "").split("\n")) for level in level_sequence: if level == "": @@ -42,7 +42,7 @@ func load(path): for l in final_level_sequence: var level = Level.new() - level.load("res://levels/" + game.os_lang + "/%s/%s" % [slug, l]) + level.load("res://levels/%s/%s" % [slug, l]) levels.push_back(level) func _to_string(): diff --git a/scenes/level.gd b/scenes/level.gd index 3f6ebdf..7d277f1 100644 --- a/scenes/level.gd +++ b/scenes/level.gd @@ -20,9 +20,9 @@ func load(path): # This is a new-style level. var config = helpers.parse(path) - title = config.get("title", slug) - print(tr(title)) + title = tr(config.get("title", slug)) description = config.get("description", "(no description)") + description = tr(description.replace("\"", "\'")) # Surround all lines indented with four spaces with [code] tags. var monospace_regex = RegEx.new() @@ -31,9 +31,11 @@ func load(path): description = description.split("---") var cli_hints = config.get("cli", "") + cli_hints = tr(cli_hints.replace("\"", "\'")) # Also do this substitution in the CLI hints. cli_hints = monospace_regex.sub(cli_hints, "\n [code][color=#bbbb5d]$1[/color][/code]", true) + # Also replace `code` with [code] tags. var monospace_inline_regex = RegEx.new() monospace_inline_regex.compile("`([^`]+)`") @@ -43,7 +45,9 @@ func load(path): if cli_hints != "": description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]" - congrats = config.get("congrats", tr("Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.")) + congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.") + congrats = congrats.replace("\"", "\'") + congrats = tr(congrats) cards = Array(config.get("cards", "").split(" ")) if cards == [""]: cards = [] diff --git a/scenes/levels.gd b/scenes/levels.gd index 3065f76..0efb4dd 100644 --- a/scenes/levels.gd +++ b/scenes/levels.gd @@ -3,14 +3,13 @@ extends Node var chapters func _ready(): - var lang = game.os_lang reload() func reload(): chapters = [] var dir = Directory.new() - dir.open("res://levels/" + game.os_lang) + dir.open("res://levels/") dir.list_dir_begin() var chapter_names = [] @@ -27,7 +26,7 @@ func reload(): var final_chapter_sequence = [] - var chapter_sequence = Array(helpers.read_file("res://levels/" + game.os_lang + "/sequence", "").split("\n")) + var chapter_sequence = Array(helpers.read_file("res://levels/sequence", "").split("\n")) for chapter in chapter_sequence: if chapter == "": @@ -41,5 +40,5 @@ func reload(): for c in final_chapter_sequence: var chapter = Chapter.new() - chapter.load("res://levels/" + game.os_lang + "/%s" % c) + chapter.load("res://levels/%s" % c) chapters.push_back(chapter) From 27db39c2fbbeaeb328a046c0e17859b4def1714a Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Thu, 18 Aug 2022 22:55:42 +0200 Subject: [PATCH 37/49] Some modification .po files --- locale/it_levels.po | 434 +++++++++++++++++++++++++++++++++++++++++++- scenes/level.gd | 1 + scenes/title.tscn | 4 + 3 files changed, 438 insertions(+), 1 deletion(-) diff --git a/locale/it_levels.po b/locale/it_levels.po index 1bd7b4f..0c625d2 100644 --- a/locale/it_levels.po +++ b/locale/it_levels.po @@ -398,4 +398,436 @@ msgstr "PIPPO" msgid "Nice! You tagged your first commit :)" msgstr "PIPPO" msgid "Well done :)" -msgstr "PIPPO" \ No newline at end of file +msgstr "PIPPO" + +#: Command +--- Debugging process started --- +Godot Engine v3.5.stable.official.991bb6ac7 - https://godotengine.org +OpenGL ES 3.0 Renderer: Mesa Intel(R) UHD Graphics 620 (KBL GT2) +Async. shader compilation: OFF + +msgid "Add another line to form.txt!" +msgstr "PIPPO" + +msgid "Add another line to form2_really_final.txt!" +msgstr "PIPPO" + +msgid "Initialize the time machine!" +msgstr "PIPPO" + +msgid "Initialize the time machine!" +msgstr "PIPPO" + +msgid "Make a snapshot of the glass (a "commit")" +msgstr "PIPPO" + +msgid "Change the contents of the glass!" +msgstr "PIPPO" + +msgid "And make a second commit!" +msgstr "PIPPO" + +msgid "Get the second commit from your teacher using `git pull`." +msgstr "PIPPO" + +msgid "Add your name to the list of students" +msgstr "PIPPO" + +msgid "Commit your result." +msgstr "PIPPO" + +msgid "And use `git push` to send it to your teacher!" +msgstr "PIPPO" + +msgid "Remove all spider webs." +msgstr "PIPPO" + +msgid "But make sure you keep your bed!" +msgstr "PIPPO" + +msgid "Add two more pieces of furniture" +msgstr "PIPPO" + +msgid "Make sure the colors match your bed's color." +msgstr "PIPPO" + +msgid "Restore sisterly peace." +msgstr "PIPPO" + +msgid "Make sure that the child is happy." +msgstr "PIPPO" + +msgid "Make sure that the lion gets something to eat." +msgstr "PIPPO" + +msgid "Create a branch called 'birthday' that points to the birthday timeline." +msgstr "PIPPO" + +msgid "Create a branch called 'concert' that points to the concert timeline." +msgstr "PIPPO" + +msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit" +msgstr "PIPPO" + +msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit." +msgstr "PIPPO" + +msgid "Find the bad branches and delete them. Keep only the best one." +msgstr "PIPPO" + +msgid "Did you eat a baguette on the baguette branch?" +msgstr "PIPPO" + +msgid "Did you drink a coffee on the coffee branch?" +msgstr "PIPPO" + +msgid "Did you eat a donut on the donut branch?" +msgstr "PIPPO" + +msgid "Build a situation where you consumed a baguette, a coffee, *and* a donut." +msgstr "PIPPO" + +msgid "Be on a merge commit." +msgstr "PIPPO" + +msgid "Make a breakfast compromise in the 'main' branch." +msgstr "PIPPO" + +msgid "Pick the timeline that's clearer, and make the alarm go off!" +msgstr "PIPPO" + +msgid "Add the candle." +msgstr "PIPPO" + +msgid "Make a commit." +msgstr "PIPPO" + +msgid "Make a change to the candle." +msgstr "PIPPO" + +msgid "Add the candle." +msgstr "PIPPO" + +msgid "Make a commit." +msgstr "PIPPO" + +msgid "Reset the changes in the green and blue candles!" +msgstr "PIPPO" + +msgid "And make a commit!" +msgstr "PIPPO" + +msgid "Make changes to all three objects, to form a logical sequence of events!" +msgstr "PIPPO" + +msgid "Only add one of these changes!" +msgstr "PIPPO" + +msgid "And make a commit." +msgstr "PIPPO" + +msgid "Make a second commit that only records a single change." +msgstr "PIPPO" + +msgid "And a third one." +msgstr "PIPPO" + +msgid "Got the second line from your friend" +msgstr "PIPPO" + +msgid "Got the fourth line from your friend." +msgstr "PIPPO" + +msgid "The friend got a third line from you" +msgstr "PIPPO" + +msgid "The friend got a fifth line from you" +msgstr "PIPPO" + +msgid "Commit your local changes." +msgstr "PIPPO" + +msgid "Look at your friend's suggestion, make a compromise, and push it back." +msgstr "PIPPO" + +msgid "Order all tree branches into one and move the main branch ref" +msgstr "PIPPO" + +msgid "Reorder the commits to dress yourself in the correct way" +msgstr "PIPPO" + +msgid "Restore the essay to contain "important content"" +msgstr "PIPPO" + +msgid "Get the first version of your essay, and make a new commit with it." +msgstr "PIPPO" + +msgid "In the last main commit, the numbers file contains the numbers from 1 to 10." +msgstr "PIPPO" + +msgid "The commit message of that commit is "More numbers"." +msgstr "PIPPO" + +msgid "The commit with the typo is not part of the main branch anymore." +msgstr "PIPPO" + +msgid "The team's main branch no longer contains the bad thing." +msgstr "PIPPO" + +msgid "And the history has not been modified." +msgstr "PIPPO" + +msgid "Find out where you've been before, and go back there!" +msgstr "PIPPO" + +msgid "Find the last good commit" +msgstr "PIPPO" + +msgid "Did you stash the current changes?" +msgstr "PIPPO" + +msgid "Did you pop the changes from the stash stack?" +msgstr "PIPPO" + +msgid "Did you clear your stash stack?" +msgstr "PIPPO" + +msgid "Did you create a new branch from the stashed changes?" +msgstr "PIPPO" + +msgid "Did you resolve the confict and commit?" +msgstr "PIPPO" + +msgid "Did you clear stash stack?" +msgstr "PIPPO" + +msgid "Did you create a new tag?" +msgstr "PIPPO" + +msgid "Did you remove all tags?" +msgstr "PIPPO" + +msgid "Did you create a new tag?" +msgstr "PIPPO" + +msgid "v1 tag in your repo" +msgstr "PIPPO" + +msgid "v2 tag in your repo" +msgstr "PIPPO" + +msgid "v2 tag in the remote" +msgstr "PIPPO" + +msgid "Add another line to form.txt!" +msgstr "PIPPO" + +msgid "Add another line to form2_really_final.txt!" +msgstr "PIPPO" + +msgid "Initialize the time machine!" +msgstr "PIPPO" + +msgid "Initialize the time machine!" +msgstr "PIPPO" + +msgid "Make a snapshot of the glass (a "commit")" +msgstr "PIPPO" + +msgid "Change the contents of the glass!" +msgstr "PIPPO" + +msgid "And make a second commit!" +msgstr "PIPPO" + +msgid "Get the second commit from your teacher using `git pull`." +msgstr "PIPPO" + +msgid "Add your name to the list of students" +msgstr "PIPPO" + +msgid "Commit your result." +msgstr "PIPPO" + +msgid "And use `git push` to send it to your teacher!" +msgstr "PIPPO" + +msgid "Remove all spider webs." +msgstr "PIPPO" + +msgid "But make sure you keep your bed!" +msgstr "PIPPO" + +msgid "Add two more pieces of furniture" +msgstr "PIPPO" + +msgid "Make sure the colors match your bed's color." +msgstr "PIPPO" + +msgid "Restore sisterly peace." +msgstr "PIPPO" + +msgid "Make sure that the child is happy." +msgstr "PIPPO" + +msgid "Make sure that the lion gets something to eat." +msgstr "PIPPO" + +msgid "Create a branch called 'birthday' that points to the birthday timeline." +msgstr "PIPPO" + +msgid "Create a branch called 'concert' that points to the concert timeline." +msgstr "PIPPO" + +msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit" +msgstr "PIPPO" + +msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit." +msgstr "PIPPO" + +msgid "Find the bad branches and delete them. Keep only the best one." +msgstr "PIPPO" + +msgid "Did you eat a baguette on the baguette branch?" +msgstr "PIPPO" + +msgid "Did you drink a coffee on the coffee branch?" +msgstr "PIPPO" + +msgid "Did you eat a donut on the donut branch?" +msgstr "PIPPO" + +msgid "Build a situation where you consumed a baguette, a coffee, *and* a donut." +msgstr "PIPPO" + +msgid "Be on a merge commit." +msgstr "PIPPO" + +msgid "Make a breakfast compromise in the 'main' branch." +msgstr "PIPPO" + +msgid "Pick the timeline that's clearer, and make the alarm go off!" +msgstr "PIPPO" + +msgid "Add the candle." +msgstr "PIPPO" + +msgid "Make a commit." +msgstr "PIPPO" + +msgid "Make a change to the candle." +msgstr "PIPPO" + +msgid "Add the candle." +msgstr "PIPPO" + +msgid "Make a commit." +msgstr "PIPPO" + +msgid "Reset the changes in the green and blue candles!" +msgstr "PIPPO" + +msgid "And make a commit!" +msgstr "PIPPO" + +msgid "Make changes to all three objects, to form a logical sequence of events!" +msgstr "PIPPO" + +msgid "Only add one of these changes!" +msgstr "PIPPO" + +msgid "And make a commit." +msgstr "PIPPO" + +msgid "Make a second commit that only records a single change." +msgstr "PIPPO" + +msgid "And a third one." +msgstr "PIPPO" + +msgid "Got the second line from your friend" +msgstr "PIPPO" + +msgid "Got the fourth line from your friend." +msgstr "PIPPO" + +msgid "The friend got a third line from you" +msgstr "PIPPO" + +msgid "The friend got a fifth line from you" +msgstr "PIPPO" + +msgid "Commit your local changes." +msgstr "PIPPO" + +msgid "Look at your friend's suggestion, make a compromise, and push it back." +msgstr "PIPPO" + +msgid "Order all tree branches into one and move the main branch ref" +msgstr "PIPPO" + +msgid "Reorder the commits to dress yourself in the correct way" +msgstr "PIPPO" + +msgid "Restore the essay to contain "important content"" +msgstr "PIPPO" + +msgid "Get the first version of your essay, and make a new commit with it." +msgstr "PIPPO" + +msgid "In the last main commit, the numbers file contains the numbers from 1 to 10." +msgstr "PIPPO" + +msgid "The commit message of that commit is "More numbers"." +msgstr "PIPPO" + +msgid "The commit with the typo is not part of the main branch anymore." +msgstr "PIPPO" + +msgid "The team's main branch no longer contains the bad thing." +msgstr "PIPPO" + +msgid "And the history has not been modified." +msgstr "PIPPO" + +msgid "Find out where you've been before, and go back there!" +msgstr "PIPPO" + +msgid "Find the last good commit" +msgstr "PIPPO" + +msgid "Did you stash the current changes?" +msgstr "PIPPO" + +msgid "Did you pop the changes from the stash stack?" +msgstr "PIPPO" + +msgid "Did you clear your stash stack?" +msgstr "PIPPO" + +msgid "Did you create a new branch from the stashed changes?" +msgstr "PIPPO" + +msgid "Did you resolve the confict and commit?" +msgstr "PIPPO" + +msgid "Did you clear stash stack?" +msgstr "PIPPO" + +msgid "Did you create a new tag?" +msgstr "PIPPO" + +msgid "Did you remove all tags?" +msgstr "PIPPO" + +msgid "Did you create a new tag?" +msgstr "PIPPO" + +msgid "v1 tag in your repo" +msgstr "PIPPO" + +msgid "v2 tag in your repo" +msgstr "PIPPO" + +msgid "v2 tag in the remote" +msgstr "PIPPO" diff --git a/scenes/level.gd b/scenes/level.gd index 7d277f1..a05de90 100644 --- a/scenes/level.gd +++ b/scenes/level.gd @@ -87,6 +87,7 @@ func load(path): for line in Array(config[k].split("\n")): if line.length() > 0 and line[0] == "#": desc = line.substr(1).strip_edges(true, true) + print("msgid \"", desc, "\"\nmsgstr \"PIPPO\"\n") else: if not repos[repo].win_conditions.has(desc): repos[repo].win_conditions[desc] = "" diff --git a/scenes/title.tscn b/scenes/title.tscn index 6ea4267..d247714 100644 --- a/scenes/title.tscn +++ b/scenes/title.tscn @@ -11,6 +11,10 @@ anchor_right = 1.0 anchor_bottom = 1.0 theme = ExtResource( 1 ) script = ExtResource( 3 ) +__meta__ = { +"_editor_description_": " +" +} [node name="Label2" type="Label" parent="."] margin_left = 790.778 From 4ef05f6ea3d051458fabf5654e7609e345b49e9a Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Fri, 19 Aug 2022 16:18:17 +0200 Subject: [PATCH 38/49] Add *.mo files to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3c165fe..d1b5863 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ *~ *.org #*# +*.mo From 337d3d396309d8d3efa4bef954a754fd3a5a5228 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Fri, 19 Aug 2022 16:36:47 +0200 Subject: [PATCH 39/49] the internationalization system was completed and the Italian translation of the first level was added --- locale/it.po | 151 ++-- locale/it_cards.po | 48 +- locale/it_levels.po | 1498 ++++++++++++++++++++++---------------- project.godot | 2 +- scenes/level.gd | 10 +- scenes/level_select.gd | 7 - scenes/level_select.tscn | 1 - scenes/main.tscn | 1 - scenes/sandbox.tscn | 3 - 9 files changed, 967 insertions(+), 754 deletions(-) diff --git a/locale/it.po b/locale/it.po index 591bde3..4dff1c8 100644 --- a/locale/it.po +++ b/locale/it.po @@ -8,28 +8,22 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: 2022-08-19 14:46+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.10.3\n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.10.3\n" +"X-Generator: Poedit 3.1\n" -#: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48 -#msgid "label" -#msgstr "" - -#: oh-my-git/scenes/card.tscn:125 -#msgid "Description" -#msgstr "" - -#: oh-my-git/scenes/card.tscn:144 -#msgid "0" -#msgstr "" +msgid "teacher" +msgstr "insegnante" +#: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48 +#: oh-my-git/scenes/card.tscn:125 oh-my-git/scenes/card.tscn:144 #: oh-my-git/scenes/cards.gd:58 msgid "These are your cards! Drag them to highlighted areas to play them!" msgstr "Queste sono le tue carte! Spostale nell'area evidenziata per usarle!" @@ -38,30 +32,16 @@ msgstr "Queste sono le tue carte! Spostale nell'area evidenziata per usarle!" msgid "Draw new cards" msgstr "Pesca nuove carte" -#: oh-my-git/scenes/cards.tscn:48 -#msgid "3" -#msgstr "" - -#: oh-my-git/scenes/file_browser.tscn:51 +#: oh-my-git/scenes/cards.tscn:48 oh-my-git/scenes/file_browser.tscn:51 msgid "title" msgstr "titolo" -#: oh-my-git/scenes/file_browser.tscn:64 -#msgid "root" -#msgstr "" - -#: oh-my-git/scenes/file_browser.tscn:70 -#msgid "dir" -#msgstr "" - +#: oh-my-git/scenes/file_browser.tscn:64 oh-my-git/scenes/file_browser.tscn:70 #: oh-my-git/scenes/file_browser.tscn:111 oh-my-git/scenes/text_editor.tscn:32 msgid "Save" msgstr "Salva" #: oh-my-git/scenes/file_browser.tscn:126 oh-my-git/scenes/text_editor.tscn:47 -#msgid "x" -#msgstr "" - #: oh-my-git/scenes/file_browser_item.tscn:118 msgid "filename" msgstr "nome file" @@ -75,20 +55,28 @@ msgid "Italian" msgstr "Italiano" #: oh-my-git/scenes/level.gd:45 -msgid "Good job, you solved the level!\nFeel free to try a few more things or click 'Next level'." -msgstr "Ottimo lavoro, hai risolto il livello!\n Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'" +msgid "" +"Good job, you solved the level!\n" +"Feel free to try a few more things or click 'Next level'." +msgstr "" +"Ottimo lavoro, hai risolto il livello!\n" +" Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'." #: oh-my-git/scenes/level.gd:81 msgid "Complete the goal of this level" -msgstr "Completa l'obbiettivo di questo ivello!" +msgstr "Completa l'obbiettivo di questo ivello" #: oh-my-git/scenes/level_select.gd:60 msgid "You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?" msgstr "Ti aggiudicherai un badge d'oro per ogni livello che risolverai senza usare le cards! Puoi risolverli usando solo la linea di comando?" #: oh-my-git/scenes/level_select.tscn:51 -msgid "Help us improving Oh My Git! by\nanswering some questions:" -msgstr "Aiutaci a migliorare Oh My Git!\nRispondendo ad alcune domande:" +msgid "" +"Help us improving Oh My Git! by\n" +"answering some questions:" +msgstr "" +"Aiutaci a migliorare Oh My Git!\n" +"Rispondendo ad alcune domande:" #: oh-my-git/scenes/level_select.tscn:65 oh-my-git/scenes/survey.tscn:105 msgid "To the survey /o/" @@ -102,15 +90,8 @@ msgstr "Indietro" msgid "Reload" msgstr "Ricarica" -#: oh-my-git/scenes/main.tscn:105 -#msgid "Level name here!" -#msgstr "" - -#: oh-my-git/scenes/main.tscn:124 oh-my-git/scenes/main.tscn:136 -#msgid "Level description here!" -#msgstr "" - -#: oh-my-git/scenes/main.tscn:237 +#: oh-my-git/scenes/main.tscn:105 oh-my-git/scenes/main.tscn:124 +#: oh-my-git/scenes/main.tscn:136 oh-my-git/scenes/main.tscn:237 msgid "Cards!" msgstr "Carte!" @@ -127,15 +108,9 @@ msgid "Toggle music" msgstr "Musica" #: oh-my-git/scenes/no_git.tscn:33 oh-my-git/scenes/survey.tscn:46 -#: oh-my-git/scenes/title.tscn:25 -#msgid "by bleeptrack & blinry" -#msgstr "" - -#: oh-my-git/scenes/no_git.tscn:46 oh-my-git/scenes/title.tscn:38 -#msgid "Original score by winniehell" -#msgstr "" - -#: oh-my-git/scenes/no_git.tscn:65 oh-my-git/scenes/title.tscn:56 +#: oh-my-git/scenes/title.tscn:25 oh-my-git/scenes/no_git.tscn:46 +#: oh-my-git/scenes/title.tscn:38 oh-my-git/scenes/no_git.tscn:65 +#: oh-my-git/scenes/title.tscn:56 msgid "Levels" msgstr "Livelli" @@ -147,25 +122,18 @@ msgstr "Sandbox" msgid "Install" msgstr "Installa" -#: oh-my-git/scenes/no_git.tscn:97 -#msgid "GIT_MESSAGE" -#msgstr "" - -#: oh-my-git/scenes/node.gd:83 +#: oh-my-git/scenes/no_git.tscn:97 oh-my-git/scenes/node.gd:83 msgid "You can drag these around with your mouse!" msgstr "Puoi trascinarli in giro con il mouse!" -#: oh-my-git/scenes/node.tscn:55 -#msgid "object_id" -#msgstr "" - -#: oh-my-git/scenes/notification.gd:5 oh-my-git/scenes/notification.tscn:59 +#: oh-my-git/scenes/node.tscn:55 oh-my-git/scenes/notification.gd:5 +#: oh-my-git/scenes/notification.tscn:59 msgid "Got it!" msgstr "Fatto!" #: oh-my-git/scenes/notification.gd:6 msgid "Interesting!" -msgstr "Interessante" +msgstr "Interessante!" #: oh-my-git/scenes/notification.gd:7 msgid "Very useful!" @@ -203,22 +171,11 @@ msgstr "Eccezionale!" msgid "This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint!" msgstr "Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento! Questo è un suggerimento!" -#: oh-my-git/scenes/notification.tscn:59 -#msgid "Got it!" -#msgstr "Fatto!" - -#: oh-my-git/scenes/repository.gd:92 +#: oh-my-git/scenes/notification.tscn:59 oh-my-git/scenes/repository.gd:92 msgid "This is the time machine of another person! To interact with it, you need special commands!" msgstr "Questa è la macchina del tempo di u'altra persona! Per interagirci hai bisogno di comandi speciali!" -#: oh-my-git/scenes/repository.tscn:56 -#msgid "Repo name" -#msgstr "" - -#: oh-my-git/scenes/repository.tscn:67 -#msgid "Index:" -#msgstr "" - +#: oh-my-git/scenes/repository.tscn:56 oh-my-git/scenes/repository.tscn:67 #: oh-my-git/scenes/repository.tscn:78 msgid "Update" msgstr "Aggiorna" @@ -227,42 +184,30 @@ msgstr "Aggiorna" msgid "Hide trees and blobs" msgstr "Nascondi alberi e macchie" -#: oh-my-git/scenes/survey.tscn:34 -#msgid "Oh My Git!" -#msgstr "" - -#: oh-my-git/scenes/survey.tscn:71 oh-my-git/scenes/title.tscn:68 +#: oh-my-git/scenes/survey.tscn:34 oh-my-git/scenes/survey.tscn:71 +#: oh-my-git/scenes/title.tscn:68 msgid "Quit" msgstr "Esci" #: oh-my-git/scenes/survey.tscn:90 -msgid "Thank you very much for playing!\nPlease help us improve Oh My Git! \nby filling out this survey:" -msgstr "Grazie mille per aver giocato!\nAiutaci a migliorare Oh My Git!\ncompilando questo sondaggio:" +msgid "" +"Thank you very much for playing!\n" +"Please help us improve Oh My Git! \n" +"by filling out this survey:" +msgstr "" +"Grazie mille per aver giocato!\n" +"Aiutaci a migliorare Oh My Git!\n" +"compilando questo sondaggio:" #: oh-my-git/scenes/terminal.gd:107 msgid "This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!" msgstr "Questo è il tuo terminale! Tutti i comandi sono eseguiti qui e puoi vedere il loro output. Puoi anche digitare i tuoi comandi qui!" -#: oh-my-git/scenes/terminal.tscn:86 -#msgid "git commit --allow-empty -m \"$RANDOM\"" -#msgstr "" - -#: oh-my-git/scenes/terminal.tscn:93 -#msgid "git checkout HEAD^" -#msgstr "" - -#: oh-my-git/scenes/terminal.tscn:100 -#msgid "git checkout -b \"$RANDOM\"" -#msgstr "" - -#: oh-my-git/scenes/text_editor.tscn:12 +#: oh-my-git/scenes/terminal.tscn:86 oh-my-git/scenes/terminal.tscn:93 +#: oh-my-git/scenes/terminal.tscn:100 oh-my-git/scenes/text_editor.tscn:12 msgid "Text here" msgstr "Il testo qui" -#: oh-my-git/scenes/title.tscn:68 -#msgid "Quit" -#msgstr "Esci" - -#: oh-my-git/scenes/title.tscn:74 +#: oh-my-git/scenes/title.tscn:68 oh-my-git/scenes/title.tscn:74 msgid "Language" -msgstr "Linguaggio" \ No newline at end of file +msgstr "Linguaggio" diff --git a/locale/it_cards.po b/locale/it_cards.po index 8e12c7f..409d345 100644 --- a/locale/it_cards.po +++ b/locale/it_cards.po @@ -8,28 +8,34 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: 2022-08-19 14:48+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.10.3\n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.10.3\n" +"X-Generator: Poedit 3.1\n" -#: CARDS DESCRIPTION -#: oh-my-git/resources/cards.json:6 +#: CARDS DESCRIPTION oh-my-git/resources/cards.json:6 msgid "Drag this card into the empty space above to initialize the time machine!" -msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo" +msgstr "Trascina questa carta nell'area vuota sopra per inizializzare la macchina del tempo!" #: oh-my-git/resources/cards.json:14 msgid "Create your own copy of someone else's repo." msgstr "Crea la tua copia personale del Repo di qualcun'altro." #: oh-my-git/resources/cards.json:22 -msgid "Set your name.\n\n(Will not change anything outside of this game.)" -msgstr "Imposta il tuo nome.\n\n(Non cambierà nulla all'infuori del gioco.)" +msgid "" +"Set your name.\n" +"\n" +"(Will not change anything outside of this game.)" +msgstr "" +"Imposta il tuo nome.\n" +"\n" +"(Non cambierà nulla all'infuori del gioco.)" #: oh-my-git/resources/cards.json:30 msgid "Set your email address." @@ -37,19 +43,23 @@ msgstr "Imposta la tua e-mail." #: oh-my-git/resources/cards.json:38 msgid "Drag this card to a commit or to a branch to travel to it!" -msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso." +msgstr "Trascina questa carta su un commit o su un branch per spostarti su di esso.!" #: oh-my-git/resources/cards.json:46 msgid "Reset changes in a local file." -msgstr "Resetta i cambiamenti in un file locale" +msgstr "Resetta i cambiamenti in un file locale." #: oh-my-git/resources/cards.json:54 msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." msgstr "Ottieni il contenuto dei file dai commit specificati e resetta sia la directory di lavoro sia l'indice." #: oh-my-git/resources/cards.json:62 -msgid "Make a new commit, after automatically adding all changes to the index.\nYou'll be asked to enter a short description of what you changed." -msgstr "Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\nDovrai inserire una breve descrizione di cosa hai cambiato." +msgid "" +"Make a new commit, after automatically adding all changes to the index.\n" +"You'll be asked to enter a short description of what you changed." +msgstr "" +"Crea un nuovo commit, dopo aver aggiunto automaticamente tutti i cambiamenti all'indice.\n" +"Dovrai inserire una breve descrizione di cosa hai cambiato." #: oh-my-git/resources/cards.json:70 msgid "Make a new commit containing your current environment! Type in a description of what changed!" @@ -73,11 +83,11 @@ msgstr "Prende la versione di qualcun'altro della temporale corrente e prova ad #: oh-my-git/resources/cards.json:110 msgid "Get a someone else's version of the current timeline." -msgstr "Prende la versione di qualcun'altro della temporale corrente" +msgstr "Prende la versione di qualcun'altro della temporale corrente." #: oh-my-git/resources/cards.json:118 msgid "Give the current timeline to someone else." -msgstr "Invia la linea temporale corrente a qualcun'altro" +msgstr "Invia la linea temporale corrente a qualcun'altro." #: oh-my-git/resources/cards.json:126 msgid "Make changes to the events in your current timeline, back to the commit you drag this to." @@ -85,7 +95,7 @@ msgstr "Cambia gli eventi della linea temporale fino al commit su cui hai trasci #: oh-my-git/resources/cards.json:134 msgid "Continue the current rebasing process." -msgstr "Continua il processo di rebasing" +msgstr "Continua il processo di rebasing." #: oh-my-git/resources/cards.json:142 msgid "Move the branch you're on to the specified commit." @@ -97,11 +107,11 @@ msgstr "Salta al commit e aggiorna l'indice. Mantieni l'ambiente attuale." #: oh-my-git/resources/cards.json:158 msgid "Reset the index version of a file to the version in the commit you're on." -msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei" +msgstr "Resetta la versione dell'indice di un file alla versione del commit in cui sei." #: oh-my-git/resources/cards.json:166 msgid "Repeat the specified action on top of your current timeline." -msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente" +msgstr "Ripete l'azione specificata, in cima alla linea temporale corrente." #: oh-my-git/resources/cards.json:174 msgid "Make a new commit that reverts the changes of the speicified commit." @@ -109,7 +119,7 @@ msgstr "Crea un nuovo commit che annulla le modifiche del commit specificato." #: oh-my-git/resources/cards.json:182 msgid "Start looking for the commit where things got bad." -msgstr "Inizia a cercare il commit dove le cose sono andate storte" +msgstr "Inizia a cercare il commit dove le cose sono andate storte." #: oh-my-git/resources/cards.json:190 msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!" @@ -161,4 +171,4 @@ msgstr "Rinomina un file." #: oh-my-git/resources/cards.json:286 msgid "Make a copy of a file." -msgstr "Crea una copia di un file." \ No newline at end of file +msgstr "Crea una copia di un file." diff --git a/locale/it_levels.po b/locale/it_levels.po index 0c625d2..114a86e 100644 --- a/locale/it_levels.po +++ b/locale/it_levels.po @@ -8,826 +8,1096 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: 2022-08-19 16:33+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.10.3\n" -"Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.10.3\n" +"X-Generator: Poedit 3.1\n" #: TITLE -#: oh-my-git/levels/ -msgid "Friend" -msgstr "Amici" - -msgid "friend" -msgstr "amici" - - -#: DESCRIPTION -msgid "So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!\n\nHow exciting!\n\nYou're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git." -msgstr "PIPPO" - -msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!" -msgstr "PIPPO" - -msgid "You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:\n\n'To do anything with a time machine, you first need to initialize it!'\n\nDrag that blue card up to play it!" -msgstr "PIPPO" - -msgid "These playing cards are designed to be easy to use and to remember! We'd suggest sticking to them if you don't have a lot of experience with Git!" -msgstr "PIPPO" - -msgid "You can use your time machine to make snapshots of objects around you! Here, let's practice this!\n\n(Your teacher pours some water into a glass.)" -msgstr "PIPPO" - -msgid "Let's add your name to our list of students!\n\nI already have a second commit of it in my time machine - let's work together!" -msgstr "PIPPO" - -msgid "The first day at Time Travel School comes to an end and you receive the key to your room.\nFull of excitement you open the door just to find... spider webs! Spider webs everywhere!\n\nRemove all the spider webs you can find with the remove card!" -msgstr "PIPPO" - -msgid "Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,\nyou see that their colors match the color of your bed!\n\nBuild up your two pieces of furniture by playing the touch card.\nThen name your furniture - you can choose whatever you like.\n\nMake sure the colors match! You can find the bed's color in its description.\nDon't forget to add a color and description to your new furnitures, too!" -msgstr "PIPPO" - -msgid "The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the 'checkout' card! (Try it!)\n\nCan you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!" -msgstr "PIPPO" - -msgid "Did you know that creating parallel timelines is perfectly legal and safe? It's true!\n\nCan you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!" -msgstr "PIPPO" - -msgid "You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!\n\nTo make it easier to tell which timeline is which, you can create time portals! (We call these 'branches'.)" -msgstr "PIPPO" - -msgid "Note that there are two options to 'travel to the end of a timeline':\n\nFirst, you can directly travel to the commit, like we've done it before.\n\nAnd second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!" -msgstr "PIPPO" - -msgid "Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!\n\nThis Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around." -msgstr "PIPPO" - -msgid "One of your colleagues messed up here, and put the branches in the wrong timelines!\n\nYou could delete and re-create these branches - but you can also directly move them to different commits, by using\n\n git checkout\n\non the branch names, and then using\n\n git reset --hard\n\non the commit where you want the branch to be.\n\nThe donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!" -msgstr "PIPPO" - -msgid "Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!" -msgstr "PIPPO" - -msgid "Sometimes, timelines will contradict each other.\n\nFor example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.\n\nTry to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!\n\nLet your finalized timeline be the 'main' one." -msgstr "PIPPO" - -msgid "Welcome to today's lesson! We're going to learn how to make commits with more precision!\n\nHave a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened." -msgstr "PIPPO" - -msgid "So far, when we made a commit, we've always recorded the current status of all objects, right?\n\nBut Git allows you to pick which changes you want to put in a commit!\n\nTo learn how that works, we need to learn about the 'index'! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!\n\nInitially, the index is empty. To make a commit that contains a new file, we need to add it!" -msgstr "PIPPO" - -msgid "When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.\n\nLet's try that!\n\nThe icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!" -msgstr "PIPPO" - -msgid "See the dark shadow behind the icons? That's the version of the file in the last commit!\n\nFor example, these candles have been blown out, and that change has been added.\n\nBut you decide that this was a mistake! You only want to blow out the red candle in the next commit!\n\nIf you already have updated the index to a changed file, but want to reset it, you can use `git reset`!" -msgstr "PIPPO" - -msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!" -msgstr "PIPPO" - -msgid "Your friend added another line to your essay! Get it, add a third one and send it to them!\n\nTake turns until you have five lines!" -msgstr "PIPPO" - -msgid "Both you and your friend have been working on the file, and want to sync up!" -msgstr "PIPPO" - -msgid "Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.\n\nSee the 'rebase' card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.\n\nAgain, we want to make that our base reality - the 'main' branch should point to that timeline!" -msgstr "PIPPO" - -msgid "Oops, looks like there's something messed up here. Can you put the events back into their correct order?\n\nThere are two ways to do this: You can drag the 'interactive rebase' card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.\n\nOr you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!" -msgstr "PIPPO" - -msgid "Oops - you deleted the 'essay' file, which you worked on all night!\n\nLuckily, Git is here to help! You can use `git checkout` to restore the file!" -msgstr "PIPPO" - -msgid "Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:\n\n git checkout [commit] [file]" -msgstr "PIPPO" - -msgid "Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?\n\nThe answer is using `git reset [commit]`, which does two things:\n\n- It resets the current branch ref to the commit you specify.\n- And it resets the index to that commit.\n\nIt does not change your working directory in any way, which means that after that, you can try making the commit you want again." -msgstr "PIPPO" - -msgid "We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`" -msgstr "PIPPO" - -msgid "Say you were looking at something in the past, and then switched back to the main branch.\n\nBut then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?\n\nThere's a convenient command that shows you all the places your HEAD did point to in the past:\n\n git reflog" -msgstr "PIPPO" - -msgid "Your friend has a problem! Clone the repo, create a branch called 'solution', and fix the problem in this branch. When you're ready, make a 'Pull Request' by using `git tag pr`." -msgstr "PIPPO" - -msgid "(Please zoom out a bit using your mouse wheel! :D)\n\nOh no! You have lost your key at some point during the day!\n\nSure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!\n\nFirst, play the 'bisect start' card. Then, go to a commit where you don't have the key, and play the 'bisect bad' card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the 'bisect good card'.\n\nAfter you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?" -msgstr "PIPPO" - -msgid "You will encounter situations in which you are working on your project but you need to\nput your current changes aside temporarily. To do so, you can use the stash function. Use\n git stash push \nto add your current changes to the stash stack.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "When you stashed your changes and you want to apply them back to your current working directory, you can use\n git stash pop\nThis will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use\n git stash apply\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "If you want to inspect your stash stack, use the command\n git stash list\n \nOh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with\n git stash clear\nIf you only want to discard a certain stash entry, you can use\n git stash drop \n \nClear your stash stack!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "If you want to keep your changes but they don't belong to the main branch, you can easily\ncreate a new branch from your stashed changes. Just use\n git stash branch \nIf you just want to use the latest stash entry, you can leave the option empty.\n\nCreate a new branch from the stashed changes!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "When you want to reapply your changes but you already continued working on your file, you might get\na merge conflict! Let's practise this situation.\nPop the changes from the stash with\n git stash pop\nand resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "Some of your commits may be special commits. Maybe you reached a milestone or a new version number.\n\nYou can mark these commits with a special flag called 'tag'.\n\nWrite \n\n git tag \n \nto tag your commit.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "You added way too many tags? No prob! Delete them with\n\n git tag -d \n \nRemove all tags in this repo!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "But what happens if you forgot to tag your current commit?\nNo Prob! You can also tag older commits via\n\n git tag \n \nTag the commit 'Adding feature 2' with the name 'v1'!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "When you work with remote repositories, tags are not pushed or pulled automatically.\n\nYou can push a tag with\n git push \nOr all tags with:\n git push --tags\n \nDeleting tags on your remote works with: \n git push --delete \n \nYou can also sync \n git fetch --prune --prune-tags\n\n\nAdd a tag named 'v2' to the last commit and push it to the remote. Also pull the v1 tag to your local repository." -msgstr "PIPPO" - -msgid "This is an empty sandbox you can play around in." -msgstr "PIPPO" - -msgid "Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n\nHow can you push tags and branches on a remote? How can you delete them again?" -msgstr "PIPPO" - -msgid "Here's a sandbox you can play around in.\n\nYou can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:\n\n- Make a commit that merges three timelines together at once!\n- Create and delete some tags!\n- Make a timeline that's completely independent of the rest!" -msgstr "PIPPO" - -msgid "So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'!\n\nHow exciting!\n\nYou're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git." -msgstr "PIPPO" - -msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!" -msgstr "PIPPO" - -msgid "You've been accepted to time travel school! Yay! It's your first day! Your teacher explains:\n\n'To do anything with a time machine, you first need to initialize it!'\n\nDrag that blue card up to play it!" -msgstr "PIPPO" - -msgid "These playing cards are designed to be easy to use and to remember! We'd suggest sticking to them if you don't have a lot of experience with Git!" -msgstr "PIPPO" - -msgid "You can use your time machine to make snapshots of objects around you! Here, let's practice this!\n\n(Your teacher pours some water into a glass.)" -msgstr "PIPPO" - -msgid "Let's add your name to our list of students!\n\nI already have a second commit of it in my time machine - let's work together!" -msgstr "PIPPO" - -msgid "The first day at Time Travel School comes to an end and you receive the key to your room.\nFull of excitement you open the door just to find... spider webs! Spider webs everywhere!\n\nRemove all the spider webs you can find with the remove card!" -msgstr "PIPPO" - -msgid "Now that your room looks tidy, you can start to unpack your stuff. You brought two new pieces of furniture with you and with a bright smile,\nyou see that their colors match the color of your bed!\n\nBuild up your two pieces of furniture by playing the touch card.\nThen name your furniture - you can choose whatever you like.\n\nMake sure the colors match! You can find the bed's color in its description.\nDon't forget to add a color and description to your new furnitures, too!" -msgstr "PIPPO" - -msgid "The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the 'checkout' card! (Try it!)\n\nCan you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit!" -msgstr "PIPPO" - -msgid "Did you know that creating parallel timelines is perfectly legal and safe? It's true!\n\nCan you find out when things went wrong in this zoo? Then, go back to the last good commit and create a parallel universe where everyone is happy!" -msgstr "PIPPO" - -msgid "You were invited to two parties! At one of them, your favorite band is playing - and the other one is your best friend's birthday party. Where should you go? No worries - as a time travel agent in training, you can go to both parties!\n\nTo make it easier to tell which timeline is which, you can create time portals! (We call these 'branches'.)" -msgstr "PIPPO" - -msgid "Note that there are two options to 'travel to the end of a timeline':\n\nFirst, you can directly travel to the commit, like we've done it before.\n\nAnd second, you can travel to the branch label. In this case, when you make a new commit, the branch will grow with you, and still point at the end of the timeline!" -msgstr "PIPPO" - -msgid "Life is full of dangers, right? Even when walking to school, it seems like there's a lot of risks!\n\nThis Monday is especially bad. You made it to school, but there's some timelines you definitely don't want to keep around." -msgstr "PIPPO" - -msgid "One of your colleagues messed up here, and put the branches in the wrong timelines!\n\nYou could delete and re-create these branches - but you can also directly move them to different commits, by using\n\n git checkout\n\non the branch names, and then using\n\n git reset --hard\n\non the commit where you want the branch to be.\n\nThe donut branch is in the right place, but the timeline is still incomplete - make you actually *eat* the donut in that branch!" -msgstr "PIPPO" - -msgid "Here's a trick so that you can sleep a bit longer: just do all your morning activities in parallel universes, and then at the end, merge them together!" -msgstr "PIPPO" - -msgid "Sometimes, timelines will contradict each other.\n\nFor example, in this case, one of our clients wants these timelines merged, but they ate different things for breakfast in both timelines.\n\nTry to merge them together! You'll notice that there will be a conflict! The time machine will leave it up to you how to proceed: you can edit the problematic item, it will show you the conflicting sections. You can keep either of the two versions - or create a combination of them! Remove the >>>, <<<, and === markers, and make a new commit to finalize the merge!\n\nLet your finalized timeline be the 'main' one." -msgstr "PIPPO" - -msgid "Welcome to today's lesson! We're going to learn how to make commits with more precision!\n\nHave a look at these two timelines. They have exactly the same outcome. But one of them makes it much easier to figure out what happened." -msgstr "PIPPO" - -msgid "So far, when we made a commit, we've always recorded the current status of all objects, right?\n\nBut Git allows you to pick which changes you want to put in a commit!\n\nTo learn how that works, we need to learn about the 'index'! In the index, we can prepare what will be in the next commit. In this game, the index is represented by a blue aura around icons in the file browser!\n\nInitially, the index is empty. To make a commit that contains a new file, we need to add it!" -msgstr "PIPPO" - -msgid "When we change files, the index won't change on its own. We have to use `git add` to update the index to the changed version of the file.\n\nLet's try that!\n\nThe icons in the file browser show you when the actual file (white) and the version in the index (blue) are different, and when they are the same!" -msgstr "PIPPO" - -msgid "See the dark shadow behind the icons? That's the version of the file in the last commit!\n\nFor example, these candles have been blown out, and that change has been added.\n\nBut you decide that this was a mistake! You only want to blow out the red candle in the next commit!\n\nIf you already have updated the index to a changed file, but want to reset it, you can use `git reset`!" -msgstr "PIPPO" - -msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!" -msgstr "PIPPO" - -msgid "Your friend added another line to your essay! Get it, add a third one and send it to them!\n\nTake turns until you have five lines!" -msgstr "PIPPO" - -msgid "Both you and your friend have been working on the file, and want to sync up!" -msgstr "PIPPO" - -msgid "Okay - turns out that saving time in the morning by utilizing parallel universes is against the regulations of the International Time Travel Association. You'll have to do your tasks in sequence after all.\n\nSee the 'rebase' card? When you drag it to a commit, it will copy the events in your current timeline after the specified one! This way, make a clean, linear timeline where you visit all three shops.\n\nAgain, we want to make that our base reality - the 'main' branch should point to that timeline!" -msgstr "PIPPO" - -msgid "Oops, looks like there's something messed up here. Can you put the events back into their correct order?\n\nThere are two ways to do this: You can drag the 'interactive rebase' card to the commit before the one you want to change, then reorder the lines in the file that opens, and save it.\n\nOr you can reset the main tag to the very first commit, and then cherry-pick single commits in the order you want. You have cards for both approaches!" -msgstr "PIPPO" - -msgid "Oops - you deleted the 'essay' file, which you worked on all night!\n\nLuckily, Git is here to help! You can use `git checkout` to restore the file!" -msgstr "PIPPO" - -msgid "Here's a similar problem: you really liked the essay from the very first commit, and want to have it back! Well, checkout can also restore things from older commits, Here's how:\n\n git checkout [commit] [file]" -msgstr "PIPPO" - -msgid "Oh no, we made a bad commit! How can we undo making the commit, and go back to a point where we can try again?\n\nThe answer is using `git reset [commit]`, which does two things:\n\n- It resets the current branch ref to the commit you specify.\n- And it resets the index to that commit.\n\nIt does not change your working directory in any way, which means that after that, you can try making the commit you want again." -msgstr "PIPPO" - -msgid "We were talking about how to undo a commit, and fix it. This only helps when you haven't already pushed it to a remote. When that has happened, and you want to undo the effects of the commit completely, your best option is `git revert`" -msgstr "PIPPO" - -msgid "Say you were looking at something in the past, and then switched back to the main branch.\n\nBut then, you got reaaally distracted, and after your lunch break, you can't remember on which commit in the past you were before. How can you find out?\n\nThere's a convenient command that shows you all the places your HEAD did point to in the past:\n\n git reflog" -msgstr "PIPPO" - -msgid "Your friend has a problem! Clone the repo, create a branch called 'solution', and fix the problem in this branch. When you're ready, make a 'Pull Request' by using `git tag pr`." -msgstr "PIPPO" - -msgid "(Please zoom out a bit using your mouse wheel! :D)\n\nOh no! You have lost your key at some point during the day!\n\nSure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly!\n\nFirst, play the 'bisect start' card. Then, go to a commit where you don't have the key, and play the 'bisect bad' card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the 'bisect good card'.\n\nAfter you've found the last good commit, reset the main branch to it. What happened to the key after you lost it?" -msgstr "PIPPO" - -msgid "You will encounter situations in which you are working on your project but you need to\nput your current changes aside temporarily. To do so, you can use the stash function. Use\n git stash push \nto add your current changes to the stash stack.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "When you stashed your changes and you want to apply them back to your current working directory, you can use\n git stash pop\nThis will remove the changes from the stash stack. If you also want to keep the changes on the stash stack, use\n git stash apply\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "If you want to inspect your stash stack, use the command\n git stash list\n \nOh, you don't want to keep your stashed changes? There are way too many? Then go ahead and clear the stack with\n git stash clear\nIf you only want to discard a certain stash entry, you can use\n git stash drop \n \nClear your stash stack!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "If you want to keep your changes but they don't belong to the main branch, you can easily\ncreate a new branch from your stashed changes. Just use\n git stash branch \nIf you just want to use the latest stash entry, you can leave the option empty.\n\nCreate a new branch from the stashed changes!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "When you want to reapply your changes but you already continued working on your file, you might get\na merge conflict! Let's practise this situation.\nPop the changes from the stash with\n git stash pop\nand resolve the merge conflict. Commit the resolved changes and clear the stash stack afterwards.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "Some of your commits may be special commits. Maybe you reached a milestone or a new version number.\n\nYou can mark these commits with a special flag called 'tag'.\n\nWrite \n\n git tag \n \nto tag your commit.\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "You added way too many tags? No prob! Delete them with\n\n git tag -d \n \nRemove all tags in this repo!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "But what happens if you forgot to tag your current commit?\nNo Prob! You can also tag older commits via\n\n git tag \n \nTag the commit 'Adding feature 2' with the name 'v1'!\n\n---\ntipp1\n---\ntipp2\n---\ntipp3" -msgstr "PIPPO" - -msgid "When you work with remote repositories, tags are not pushed or pulled automatically.\n\nYou can push a tag with\n git push \nOr all tags with:\n git push --tags\n \nDeleting tags on your remote works with: \n git push --delete \n \nYou can also sync \n git fetch --prune --prune-tags\n\n\nAdd a tag named 'v2' to the last commit and push it to the remote. Also pull the v1 tag to your local repository." -msgstr "PIPPO" - -msgid "This is an empty sandbox you can play around in." -msgstr "PIPPO" - -msgid "Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n\nHow can you push tags and branches on a remote? How can you delete them again?" -msgstr "PIPPO" - -msgid "Here's a sandbox you can play around in.\n\nYou can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try:\n\n- Make a commit that merges three timelines together at once!\n- Create and delete some tags!\n- Make a timeline that's completely independent of the rest!" -msgstr "PIPPO" - -#: HITS -msgid "But there's another way to interact with Git:\n\nTry typing `git init` into the black terminal below, and pressing the enter key!" -msgstr "PIPPO" - -msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!\n\nThis is totally optional! But this will be a super useful skill in the real world - and it will give you a sparkling golden badge! :)" -msgstr "PIPPO" - -msgid "To go back to old commands, you can press arrow up and down. That way, you don't have to type in long commands twice." -msgstr "PIPPO" - -msgid "On the command line, you can easily delete all files ending in -web using this command:\n\n rm *web" -msgstr "PIPPO" - -msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!\n\nThis will insert the commit's unique identifier!" -msgstr "PIPPO" - -msgid "The blue animal represents a concept known as the 'HEAD pointer' in Git: It shows you which commit is the current one.\n\nHere's a cool trick to go to the previous commit: \n\n git checkout HEAD^\n\nYou can also go back two commits by typing, for example: \n\n git checkout HEAD~2" -msgstr "PIPPO" - -msgid "Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called 'birthday', you can type `git checkout birthday` to travel to it!" -msgstr "PIPPO" - -msgid "To travel to a branch, type `git checkout name_of_the_branch`.\n\nAnd to travel to the last commit, type `git checkout --detach name_of_the_branch`." -msgstr "PIPPO" - -msgid "You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!" -msgstr "PIPPO" - -msgid "But there's another way to interact with Git:\n\nTry typing `git init` into the black terminal below, and pressing the enter key!" -msgstr "PIPPO" - -msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!\n\nThis is totally optional! But this will be a super useful skill in the real world - and it will give you a sparkling golden badge! :)" -msgstr "PIPPO" - -msgid "To go back to old commands, you can press arrow up and down. That way, you don't have to type in long commands twice." -msgstr "PIPPO" - -msgid "On the command line, you can easily delete all files ending in -web using this command:\n\n rm *web" -msgstr "PIPPO" - -msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!\n\nThis will insert the commit's unique identifier!" -msgstr "PIPPO" - -msgid "The blue animal represents a concept known as the 'HEAD pointer' in Git: It shows you which commit is the current one.\n\nHere's a cool trick to go to the previous commit: \n\n git checkout HEAD^\n\nYou can also go back two commits by typing, for example: \n\n git checkout HEAD~2" -msgstr "PIPPO" - -msgid "Branches also make it really easy to travel between different places using the command line! As soon as you have a branch called 'birthday', you can type `git checkout birthday` to travel to it!" -msgstr "PIPPO" - -msgid "To travel to a branch, type `git checkout name_of_the_branch`.\n\nAnd to travel to the last commit, type `git checkout --detach name_of_the_branch`." -msgstr "PIPPO" - -msgid "You can use tab completion in the terminal! Start typing a filename, then press the tab key to complete its name. This will often save you some time!" -msgstr "PIPPO" - - -############################################# - -#: CONGRAT -msgid "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'." -msgstr "PIPPO" -msgid "Suddenly, your cat jumps on the table, snatches away the form, and runs away! Oh no. All your hard work, gone!\n\nYou clearly need a better solution.\n\n(Click 'Next Level' as soon as you're ready!)" -msgstr "PIPPO" -msgid "Okay, this kind of works.\n\nBut you're a bit worried that you'll end up with hundreds of copies of this form, and it will be hard to keep track of all of them.\n\nAnd especially when working with other people, sending copies back and forth doesn't seem ideal.\n\nYou can't wait to try these time machines!" -msgstr "PIPPO" -msgid "Nice! See that little owl squirrel that appeared? It will be your companion, and always show you where you are in time!" -msgstr "PIPPO" -msgid "Cool! Instead of using the playing cards, you can also do everything via the command line!\n\nThe command line is pretty powerful! Often, you can use it to solve tasks faster compared to using a graphical interface." -msgstr "PIPPO" -msgid "Nice! You can try making some additional commits. When you feel comfortable, click on 'Next Level'." -msgstr "PIPPO" -msgid "Welcome to time travel school! :) I'll see you for your first class tomorrow!" -msgstr "PIPPO" -msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" -msgstr "PIPPO" -msgid "Don't you immediately feel more at home?" -msgstr "PIPPO" -msgid "Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations..." -msgstr "PIPPO" -msgid "Whew, good job! This seems like a *much* better outcome.\n\nFeel free to add more parallel timelines, or make them longer.\n\nIf you're ready, our next mission is already waiting..." -msgstr "PIPPO" -msgid "Now you can travel between those branches easily (using `git checkout`) - try it!\n\nYour friend is happy that you made it to the birthday party and you also got your concert ticket signed. Yay!" -msgstr "PIPPO" -msgid "On second thought, maybe you even prefer the ice cream timeline to the main one? :)" -msgstr "PIPPO" -msgid "I wonder if you're more relaxed when you *sleep* in parallel timelines..." -msgstr "PIPPO" -msgid "Yum, that sounds like a good breakfast!" -msgstr "PIPPO" -msgid "Notice how the other timelines and commits are still there - if anything goes wrong, you can also travel back to them.\n\nIt's really hard to actually *destroy* stuff with your time machine." -msgstr "PIPPO" -msgid "Feel free to reset the level and try the other strategy! Which one do you like better?" -msgstr "PIPPO" -msgid "Well done! :) The only problem is that you now have to walk all the way back home, again..." -msgstr "PIPPO" -msgid "Nice stash you got there! :)" -msgstr "PIPPO" -msgid "Yay, you got your changes back! :)" -msgstr "PIPPO" -msgid "All clear! :)" -msgstr "PIPPO" -msgid "Stashed changes are in a new branch! :)" -msgstr "PIPPO" -msgid "Nice! You tagged your first commit :)" -msgstr "PIPPO" -msgid "Well done :)" -msgstr "PIPPO" +msgid "Living dangerously" +msgstr "Vivere pericolosamente" #: Command ---- Debugging process started --- -Godot Engine v3.5.stable.official.991bb6ac7 - https://godotengine.org -OpenGL ES 3.0 Renderer: Mesa Intel(R) UHD Graphics 620 (KBL GT2) -Async. shader compilation: OFF - msgid "Add another line to form.txt!" -msgstr "PIPPO" +msgstr "Aggiungi un'ulteriore linea a form.txt!" + +msgid "Making backups" +msgstr "Fare backups" msgid "Add another line to form2_really_final.txt!" -msgstr "PIPPO" +msgstr "Aggiungi un'ulteriore linea a form2_really_final.txt!" -msgid "Initialize the time machine!" -msgstr "PIPPO" +msgid "Enter the time machine" +msgstr "Entra nella macchina del tempo" msgid "Initialize the time machine!" -msgstr "PIPPO" +msgstr "Inizializza la macchina del tempo!" + +msgid "The command line" +msgstr "La linea di comando" + +msgid "Your first commit" +msgstr "Il tuo primo commit" -msgid "Make a snapshot of the glass (a "commit")" -msgstr "PIPPO" +msgid "Make a snapshot of the glass (a 'commit')" +msgstr "Crea un'istantanea di glass (un 'commit')" msgid "Change the contents of the glass!" -msgstr "PIPPO" +msgstr "Cambia il contenuto di glass!" msgid "And make a second commit!" -msgstr "PIPPO" +msgstr "E crea un secondo commit!" + +msgid "Working together" +msgstr "Lavoriamo assieme" msgid "Get the second commit from your teacher using `git pull`." -msgstr "PIPPO" +msgstr "Recupera il secondo commit dal tuo insegnante usando `git pull`." msgid "Add your name to the list of students" -msgstr "PIPPO" +msgstr "Aggiungi il tuo nome alla lista degli studenti" msgid "Commit your result." -msgstr "PIPPO" +msgstr "Conferma il risultato." msgid "And use `git push` to send it to your teacher!" -msgstr "PIPPO" +msgstr "E usa `git push` per inviarlo al tuo insegnante!" + +msgid "Unexpected Roommates" +msgstr "" msgid "Remove all spider webs." -msgstr "PIPPO" +msgstr "" msgid "But make sure you keep your bed!" -msgstr "PIPPO" +msgstr "" + +msgid "Interior design" +msgstr "" msgid "Add two more pieces of furniture" -msgstr "PIPPO" +msgstr "" msgid "Make sure the colors match your bed's color." -msgstr "PIPPO" +msgstr "" + +msgid "Moving through time" +msgstr "" msgid "Restore sisterly peace." -msgstr "PIPPO" +msgstr "" + +msgid "Make parallel commits" +msgstr "" msgid "Make sure that the child is happy." -msgstr "PIPPO" +msgstr "" msgid "Make sure that the lion gets something to eat." -msgstr "PIPPO" +msgstr "" + +msgid "Creating branches" +msgstr "" msgid "Create a branch called 'birthday' that points to the birthday timeline." -msgstr "PIPPO" +msgstr "" msgid "Create a branch called 'concert' that points to the concert timeline." -msgstr "PIPPO" +msgstr "" -msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit" -msgstr "PIPPO" +msgid "Branches grow with you!" +msgstr "" -msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit." -msgstr "PIPPO" +msgid "" +"Travel directly to the last yellow commit of the birthday timeline, make a " +"change to 'you', and make a commit" +msgstr "" + +msgid "" +"Travel to the blue 'concert' branch, make a change to 'you', and a commit." +msgstr "" + +msgid "Deleting branches" +msgstr "" msgid "Find the bad branches and delete them. Keep only the best one." -msgstr "PIPPO" +msgstr "" + +msgid "Moving branches around" +msgstr "" msgid "Did you eat a baguette on the baguette branch?" -msgstr "PIPPO" +msgstr "" msgid "Did you drink a coffee on the coffee branch?" -msgstr "PIPPO" +msgstr "" msgid "Did you eat a donut on the donut branch?" -msgstr "PIPPO" +msgstr "" + +msgid "Merging timelines" +msgstr "" -msgid "Build a situation where you consumed a baguette, a coffee, *and* a donut." -msgstr "PIPPO" +msgid "" +"Build a situation where you consumed a baguette, a coffee, *and* a donut." +msgstr "" msgid "Be on a merge commit." -msgstr "PIPPO" +msgstr "" + +msgid "Contradictions" +msgstr "" msgid "Make a breakfast compromise in the 'main' branch." -msgstr "PIPPO" +msgstr "" + +msgid "Step by step" +msgstr "" msgid "Pick the timeline that's clearer, and make the alarm go off!" -msgstr "PIPPO" +msgstr "" + +msgid "Add new files to the index" +msgstr "" msgid "Add the candle." -msgstr "PIPPO" +msgstr "" msgid "Make a commit." -msgstr "PIPPO" +msgstr "Crea un commit." -msgid "Make a change to the candle." -msgstr "PIPPO" +msgid "Update files in the index" +msgstr "" -msgid "Add the candle." -msgstr "PIPPO" +msgid "Make a change to the candle." +msgstr "" -msgid "Make a commit." -msgstr "PIPPO" +msgid "Resetting files in the index" +msgstr "" msgid "Reset the changes in the green and blue candles!" -msgstr "PIPPO" +msgstr "" msgid "And make a commit!" -msgstr "PIPPO" +msgstr "" + +msgid "Adding changes step by step" +msgstr "" -msgid "Make changes to all three objects, to form a logical sequence of events!" -msgstr "PIPPO" +msgid "" +"Make changes to all three objects, to form a logical sequence of events!" +msgstr "" msgid "Only add one of these changes!" -msgstr "PIPPO" +msgstr "" msgid "And make a commit." -msgstr "PIPPO" +msgstr "" msgid "Make a second commit that only records a single change." -msgstr "PIPPO" +msgstr "" msgid "And a third one." -msgstr "PIPPO" +msgstr "" + +msgid "Friend" +msgstr "" msgid "Got the second line from your friend" -msgstr "PIPPO" +msgstr "" msgid "Got the fourth line from your friend." -msgstr "PIPPO" +msgstr "" msgid "The friend got a third line from you" -msgstr "PIPPO" +msgstr "" msgid "The friend got a fifth line from you" -msgstr "PIPPO" +msgstr "" + +msgid "Problems" +msgstr "" msgid "Commit your local changes." -msgstr "PIPPO" +msgstr "" msgid "Look at your friend's suggestion, make a compromise, and push it back." -msgstr "PIPPO" +msgstr "" + +msgid "Rebasing" +msgstr "" msgid "Order all tree branches into one and move the main branch ref" -msgstr "PIPPO" +msgstr "" + +msgid "Reordering events" +msgstr "" msgid "Reorder the commits to dress yourself in the correct way" -msgstr "PIPPO" +msgstr "" + +msgid "Restore a deleted file" +msgstr "" + +msgid "Restore the essay to contain 'important content'" +msgstr "" -msgid "Restore the essay to contain "important content"" -msgstr "PIPPO" +msgid "Restore a file from the past" +msgstr "" msgid "Get the first version of your essay, and make a new commit with it." -msgstr "PIPPO" +msgstr "" + +msgid "Undo a bad commit" +msgstr "" -msgid "In the last main commit, the numbers file contains the numbers from 1 to 10." -msgstr "PIPPO" +msgid "" +"In the last main commit, the numbers file contains the numbers from 1 to 10." +msgstr "" -msgid "The commit message of that commit is "More numbers"." -msgstr "PIPPO" +msgid "The commit message of that commit is 'More numbers'." +msgstr "" msgid "The commit with the typo is not part of the main branch anymore." -msgstr "PIPPO" +msgstr "" + +msgid "I pushed something broken" +msgstr "" msgid "The team's main branch no longer contains the bad thing." -msgstr "PIPPO" +msgstr "" msgid "And the history has not been modified." -msgstr "PIPPO" +msgstr "" + +msgid "Go back to where you were before" +msgstr "" msgid "Find out where you've been before, and go back there!" -msgstr "PIPPO" +msgstr "" + +msgid "Cloning a repo" +msgstr "" + +msgid "Yellow brick road" +msgstr "" msgid "Find the last good commit" -msgstr "PIPPO" +msgstr "" + +msgid "Stashing" +msgstr "" msgid "Did you stash the current changes?" -msgstr "PIPPO" +msgstr "" + +msgid "Pop from Stash" +msgstr "" msgid "Did you pop the changes from the stash stack?" -msgstr "PIPPO" +msgstr "" + +msgid "Clear the Stash" +msgstr "" msgid "Did you clear your stash stack?" -msgstr "PIPPO" +msgstr "" + +msgid "Branch from stash" +msgstr "" msgid "Did you create a new branch from the stashed changes?" -msgstr "PIPPO" +msgstr "" + +msgid "Merging popped stash" +msgstr "" msgid "Did you resolve the confict and commit?" -msgstr "PIPPO" +msgstr "" msgid "Did you clear stash stack?" -msgstr "PIPPO" +msgstr "" + +msgid "Creating tags" +msgstr "" msgid "Did you create a new tag?" -msgstr "PIPPO" +msgstr "" + +msgid "Removing tags" +msgstr "" msgid "Did you remove all tags?" -msgstr "PIPPO" +msgstr "" -msgid "Did you create a new tag?" -msgstr "PIPPO" +msgid "Tagging later" +msgstr "" + +msgid "Remote Tags" +msgstr "" msgid "v1 tag in your repo" -msgstr "PIPPO" +msgstr "" msgid "v2 tag in your repo" -msgstr "PIPPO" +msgstr "" msgid "v2 tag in the remote" -msgstr "PIPPO" +msgstr "" -msgid "Add another line to form.txt!" -msgstr "PIPPO" +msgid "Empty sandbox" +msgstr "" -msgid "Add another line to form2_really_final.txt!" -msgstr "PIPPO" +msgid "Sandbox with a remote" +msgstr "" -msgid "Initialize the time machine!" -msgstr "PIPPO" +msgid "Sandbox with three commits" +msgstr "" -msgid "Initialize the time machine!" -msgstr "PIPPO" +#: DESCRIPTION +msgid "" +"So you have decided to apply for time travel school, to learn how to use " +"this time machine called 'Git'!\n" +"\n" +"How exciting!\n" +"\n" +"You're almost done with the paperwork! You just need to fill in one more " +"reason why you want to learn Git." +msgstr "" +"Bene hai deciso di fare domanda per la scuola di viaggio nel tempo, per " +"usare questa macchina del tempo chiamata 'Git'!\n" +"\n" +"Che emozione!\n" +"\n" +"Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il " +"quale vuoi imparare Git." -msgid "Make a snapshot of the glass (a "commit")" -msgstr "PIPPO" +msgid "" +"This time, you're making a lot of backup copies - you can look at them by " +"clicking on them!" +msgstr "" +"Questa volta hai fatto molti copie di backup - le puoi guardare cliccandoci " +"sopra!" -msgid "Change the contents of the glass!" -msgstr "PIPPO" +msgid "" +"You've been accepted to time travel school! Yay! It's your first day! Your " +"teacher explains:\n" +"\n" +"'To do anything with a time machine, you first need to initialize it!'\n" +"\n" +"Drag that blue card up to play it!" +msgstr "" +"Sei stato accettato nella scuola della macchina del tempo! Yay! E' il tuo " +"primo giorno! Il tuo insegnante spiega;\n" +"\n" +"'Prima di fare qualsiasi altra cosa con la macchina del tempo, e' necessario " +"che la inizializzi!'\n" +"\n" +"Trascina verso l'alto la carta blue per usarla!" -msgid "And make a second commit!" -msgstr "PIPPO" +msgid "" +"These playing cards are designed to be easy to use and to remember! We'd " +"suggest sticking to them if you don't have a lot of experience with Git!" +msgstr "" +"Queste carte da gioco sono state disegnate per essere facili da utilizzare e " +"ricordare! Ti consigliamo di usarle se non hai molta esperienza con Git!" -msgid "Get the second commit from your teacher using `git pull`." -msgstr "PIPPO" +msgid "" +"You can use your time machine to make snapshots of objects around you! Here, " +"let's practice this!\n" +"\n" +"(Your teacher pours some water into a glass.)" +msgstr "" +"Puoi usare la tua macchina del tempo per creare delle istantanee degli " +"oggetti che ti circondano! Ecco, facciamo questo!\n" +"\n" +"(Il tuo insegnante versa dell'acqua nel bicchiere.)" -msgid "Add your name to the list of students" -msgstr "PIPPO" +msgid "" +"Let's add your name to our list of students!\n" +"\n" +"I already have a second commit of it in my time machine - let's work " +"together!" +msgstr "" +"Aggiungiamo il tuo nome nella nostra lista di studenti!\n" +"\n" +"Io ne ho gia' un secondo commit nella mia macchina del tempo - lavoriamo " +"assieme!" -msgid "Commit your result." -msgstr "PIPPO" +msgid "" +"The first day at Time Travel School comes to an end and you receive the key " +"to your room.\n" +"Full of excitement you open the door just to find... spider webs! Spider " +"webs everywhere!\n" +"\n" +"Remove all the spider webs you can find with the remove card!" +msgstr "" -msgid "And use `git push` to send it to your teacher!" -msgstr "PIPPO" +msgid "" +"Now that your room looks tidy, you can start to unpack your stuff. You " +"brought two new pieces of furniture with you and with a bright smile,\n" +"you see that their colors match the color of your bed!\n" +"\n" +"Build up your two pieces of furniture by playing the touch card.\n" +"Then name your furniture - you can choose whatever you like.\n" +"\n" +"Make sure the colors match! You can find the bed's color in its " +"description.\n" +"Don't forget to add a color and description to your new furnitures, too!" +msgstr "" -msgid "Remove all spider webs." -msgstr "PIPPO" +msgid "" +"The yellow boxes are frozen points in time, we call them 'commits'! You can " +"travel between them using the 'checkout' card! (Try it!)\n" +"\n" +"Can you find out what happened here? Then, while on the last commit, edit " +"the files to fix the problem, and make a new commit!" +msgstr "" -msgid "But make sure you keep your bed!" -msgstr "PIPPO" +msgid "" +"Did you know that creating parallel timelines is perfectly legal and safe? " +"It's true!\n" +"\n" +"Can you find out when things went wrong in this zoo? Then, go back to the " +"last good commit and create a parallel universe where everyone is happy!" +msgstr "" -msgid "Add two more pieces of furniture" -msgstr "PIPPO" +msgid "" +"You were invited to two parties! At one of them, your favorite band is " +"playing - and the other one is your best friend's birthday party. Where " +"should you go? No worries - as a time travel agent in training, you can go " +"to both parties!\n" +"\n" +"To make it easier to tell which timeline is which, you can create time " +"portals! (We call these 'branches'.)" +msgstr "" -msgid "Make sure the colors match your bed's color." -msgstr "PIPPO" +msgid "" +"Note that there are two options to 'travel to the end of a timeline':\n" +"\n" +"First, you can directly travel to the commit, like we've done it before.\n" +"\n" +"And second, you can travel to the branch label. In this case, when you make " +"a new commit, the branch will grow with you, and still point at the end of " +"the timeline!" +msgstr "" -msgid "Restore sisterly peace." -msgstr "PIPPO" +msgid "" +"Life is full of dangers, right? Even when walking to school, it seems like " +"there's a lot of risks!\n" +"\n" +"This Monday is especially bad. You made it to school, but there's some " +"timelines you definitely don't want to keep around." +msgstr "" -msgid "Make sure that the child is happy." -msgstr "PIPPO" +msgid "" +"One of your colleagues messed up here, and put the branches in the wrong " +"timelines!\n" +"\n" +"You could delete and re-create these branches - but you can also directly " +"move them to different commits, by using\n" +"\n" +" git checkout\n" +"\n" +"on the branch names, and then using\n" +"\n" +" git reset --hard\n" +"\n" +"on the commit where you want the branch to be.\n" +"\n" +"The donut branch is in the right place, but the timeline is still incomplete " +"- make you actually *eat* the donut in that branch!" +msgstr "" -msgid "Make sure that the lion gets something to eat." -msgstr "PIPPO" +msgid "" +"Here's a trick so that you can sleep a bit longer: just do all your morning " +"activities in parallel universes, and then at the end, merge them together!" +msgstr "" -msgid "Create a branch called 'birthday' that points to the birthday timeline." -msgstr "PIPPO" +msgid "" +"Sometimes, timelines will contradict each other.\n" +"\n" +"For example, in this case, one of our clients wants these timelines merged, " +"but they ate different things for breakfast in both timelines.\n" +"\n" +"Try to merge them together! You'll notice that there will be a conflict! The " +"time machine will leave it up to you how to proceed: you can edit the " +"problematic item, it will show you the conflicting sections. You can keep " +"either of the two versions - or create a combination of them! Remove the " +">>>, <<<, and === markers, and make a new commit to finalize the merge!\n" +"\n" +"Let your finalized timeline be the 'main' one." +msgstr "" -msgid "Create a branch called 'concert' that points to the concert timeline." -msgstr "PIPPO" +msgid "" +"Welcome to today's lesson! We're going to learn how to make commits with " +"more precision!\n" +"\n" +"Have a look at these two timelines. They have exactly the same outcome. But " +"one of them makes it much easier to figure out what happened." +msgstr "" -msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit" -msgstr "PIPPO" +msgid "" +"So far, when we made a commit, we've always recorded the current status of " +"all objects, right?\n" +"\n" +"But Git allows you to pick which changes you want to put in a commit!\n" +"\n" +"To learn how that works, we need to learn about the 'index'! In the index, " +"we can prepare what will be in the next commit. In this game, the index is " +"represented by a blue aura around icons in the file browser!\n" +"\n" +"Initially, the index is empty. To make a commit that contains a new file, we " +"need to add it!" +msgstr "" -msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit." -msgstr "PIPPO" +msgid "" +"When we change files, the index won't change on its own. We have to use `git " +"add` to update the index to the changed version of the file.\n" +"\n" +"Let's try that!\n" +"\n" +"The icons in the file browser show you when the actual file (white) and the " +"version in the index (blue) are different, and when they are the same!" +msgstr "" -msgid "Find the bad branches and delete them. Keep only the best one." -msgstr "PIPPO" +msgid "" +"See the dark shadow behind the icons? That's the version of the file in the " +"last commit!\n" +"\n" +"For example, these candles have been blown out, and that change has been " +"added.\n" +"\n" +"But you decide that this was a mistake! You only want to blow out the red " +"candle in the next commit!\n" +"\n" +"If you already have updated the index to a changed file, but want to reset " +"it, you can use `git reset`!" +msgstr "" -msgid "Did you eat a baguette on the baguette branch?" -msgstr "PIPPO" +msgid "" +"The index is really useful, because it allows us to be precise about which " +"changes we want to include in each commit!" +msgstr "" -msgid "Did you drink a coffee on the coffee branch?" -msgstr "PIPPO" +msgid "" +"Your friend added another line to your essay! Get it, add a third one and " +"send it to them!\n" +"\n" +"Take turns until you have five lines!" +msgstr "" -msgid "Did you eat a donut on the donut branch?" -msgstr "PIPPO" +msgid "" +"Both you and your friend have been working on the file, and want to sync up!" +msgstr "" -msgid "Build a situation where you consumed a baguette, a coffee, *and* a donut." -msgstr "PIPPO" +msgid "" +"Okay - turns out that saving time in the morning by utilizing parallel " +"universes is against the regulations of the International Time Travel " +"Association. You'll have to do your tasks in sequence after all.\n" +"\n" +"See the 'rebase' card? When you drag it to a commit, it will copy the events " +"in your current timeline after the specified one! This way, make a clean, " +"linear timeline where you visit all three shops.\n" +"\n" +"Again, we want to make that our base reality - the 'main' branch should " +"point to that timeline!" +msgstr "" -msgid "Be on a merge commit." -msgstr "PIPPO" +msgid "" +"Oops, looks like there's something messed up here. Can you put the events " +"back into their correct order?\n" +"\n" +"There are two ways to do this: You can drag the 'interactive rebase' card to " +"the commit before the one you want to change, then reorder the lines in the " +"file that opens, and save it.\n" +"\n" +"Or you can reset the main tag to the very first commit, and then cherry-pick " +"single commits in the order you want. You have cards for both approaches!" +msgstr "" -msgid "Make a breakfast compromise in the 'main' branch." -msgstr "PIPPO" +msgid "" +"Oops - you deleted the 'essay' file, which you worked on all night!\n" +"\n" +"Luckily, Git is here to help! You can use `git checkout` to restore the file!" +msgstr "" -msgid "Pick the timeline that's clearer, and make the alarm go off!" -msgstr "PIPPO" +msgid "" +"Here's a similar problem: you really liked the essay from the very first " +"commit, and want to have it back! Well, checkout can also restore things " +"from older commits, Here's how:\n" +"\n" +" git checkout [commit] [file]" +msgstr "" -msgid "Add the candle." -msgstr "PIPPO" +msgid "" +"Oh no, we made a bad commit! How can we undo making the commit, and go back " +"to a point where we can try again?\n" +"\n" +"The answer is using `git reset [commit]`, which does two things:\n" +"\n" +"- It resets the current branch ref to the commit you specify.\n" +"- And it resets the index to that commit.\n" +"\n" +"It does not change your working directory in any way, which means that after " +"that, you can try making the commit you want again." +msgstr "" -msgid "Make a commit." -msgstr "PIPPO" +msgid "" +"We were talking about how to undo a commit, and fix it. This only helps when " +"you haven't already pushed it to a remote. When that has happened, and you " +"want to undo the effects of the commit completely, your best option is `git " +"revert`" +msgstr "" -msgid "Make a change to the candle." -msgstr "PIPPO" +msgid "" +"Say you were looking at something in the past, and then switched back to the " +"main branch.\n" +"\n" +"But then, you got reaaally distracted, and after your lunch break, you can't " +"remember on which commit in the past you were before. How can you find out?\n" +"\n" +"There's a convenient command that shows you all the places your HEAD did " +"point to in the past:\n" +"\n" +" git reflog" +msgstr "" -msgid "Add the candle." -msgstr "PIPPO" +msgid "" +"Your friend has a problem! Clone the repo, create a branch called " +"'solution', and fix the problem in this branch. When you're ready, make a " +"'Pull Request' by using `git tag pr`." +msgstr "" -msgid "Make a commit." -msgstr "PIPPO" +msgid "" +"(Please zoom out a bit using your mouse wheel! :D)\n" +"\n" +"Oh no! You have lost your key at some point during the day!\n" +"\n" +"Sure, you could look at every single commit in an attempt to find it - but " +"there's a better way: your time machine has a built-in way to find the point " +"in time where things went wrong quickly!\n" +"\n" +"First, play the 'bisect start' card. Then, go to a commit where you don't " +"have the key, and play the 'bisect bad' card. Likewise, go to a commit early " +"on where you have the key *in your pocket*, and play the 'bisect good " +"card'.\n" +"\n" +"After you've found the last good commit, reset the main branch to it. What " +"happened to the key after you lost it?" +msgstr "" -msgid "Reset the changes in the green and blue candles!" -msgstr "PIPPO" +msgid "" +"You will encounter situations in which you are working on your project but " +"you need to\n" +"put your current changes aside temporarily. To do so, you can use the stash " +"function. Use\n" +" git stash push \n" +"to add your current changes to the stash stack.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" -msgid "And make a commit!" -msgstr "PIPPO" +msgid "" +"When you stashed your changes and you want to apply them back to your " +"current working directory, you can use\n" +" git stash pop\n" +"This will remove the changes from the stash stack. If you also want to keep " +"the changes on the stash stack, use\n" +" git stash apply\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"If you want to inspect your stash stack, use the command\n" +" git stash list\n" +" \n" +"Oh, you don't want to keep your stashed changes? There are way too many? " +"Then go ahead and clear the stack with\n" +" git stash clear\n" +"If you only want to discard a certain stash entry, you can use\n" +" git stash drop \n" +" \n" +"Clear your stash stack!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" -msgid "Make changes to all three objects, to form a logical sequence of events!" -msgstr "PIPPO" +msgid "" +"If you want to keep your changes but they don't belong to the main branch, " +"you can easily\n" +"create a new branch from your stashed changes. Just use\n" +" git stash branch \n" +"If you just want to use the latest stash entry, you can leave the " +"option empty.\n" +"\n" +"Create a new branch from the stashed changes!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" -msgid "Only add one of these changes!" -msgstr "PIPPO" +msgid "" +"When you want to reapply your changes but you already continued working on " +"your file, you might get\n" +"a merge conflict! Let's practise this situation.\n" +"Pop the changes from the stash with\n" +" git stash pop\n" +"and resolve the merge conflict. Commit the resolved changes and clear the " +"stash stack afterwards.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" -msgid "And make a commit." -msgstr "PIPPO" +msgid "" +"Some of your commits may be special commits. Maybe you reached a milestone " +"or a new version number.\n" +"\n" +"You can mark these commits with a special flag called 'tag'.\n" +"\n" +"Write \n" +"\n" +" git tag \n" +" \n" +"to tag your commit.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" -msgid "Make a second commit that only records a single change." -msgstr "PIPPO" +msgid "" +"You added way too many tags? No prob! Delete them with\n" +"\n" +" git tag -d \n" +" \n" +"Remove all tags in this repo!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" -msgid "And a third one." -msgstr "PIPPO" +msgid "" +"But what happens if you forgot to tag your current commit?\n" +"No Prob! You can also tag older commits via\n" +"\n" +" git tag \n" +" \n" +"Tag the commit 'Adding feature 2' with the name 'v1'!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" -msgid "Got the second line from your friend" -msgstr "PIPPO" +msgid "" +"When you work with remote repositories, tags are not pushed or pulled " +"automatically.\n" +"\n" +"You can push a tag with\n" +" git push \n" +"Or all tags with:\n" +" git push --tags\n" +" \n" +"Deleting tags on your remote works with: \n" +" git push --delete \n" +" \n" +"You can also sync \n" +" git fetch --prune --prune-tags\n" +"\n" +"\n" +"Add a tag named 'v2' to the last commit and push it to the remote. Also pull " +"the v1 tag to your local repository." +msgstr "" -msgid "Got the fourth line from your friend." -msgstr "PIPPO" +msgid "This is an empty sandbox you can play around in." +msgstr "" -msgid "The friend got a third line from you" -msgstr "PIPPO" +msgid "" +"Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n" +"\n" +"How can you push tags and branches on a remote? How can you delete them " +"again?" +msgstr "" -msgid "The friend got a fifth line from you" -msgstr "PIPPO" +msgid "" +"Here's a sandbox you can play around in.\n" +"\n" +"You can use both the playing cards, as well as the terminal. This is a real " +"Git terminal! Fun things to try:\n" +"\n" +"- Make a commit that merges three timelines together at once!\n" +"- Create and delete some tags!\n" +"- Make a timeline that's completely independent of the rest!" +msgstr "" -msgid "Commit your local changes." -msgstr "PIPPO" +#: HITS +msgid "" +"But there's another way to interact with Git:\n" +"\n" +"Try typing `git init` into the black terminal below, and pressing the enter " +"key!" +msgstr "" +"Ma c'e' un'altro modo per interagire con Git:\n" +"\n" +"Prova a scrivere `git init` nel terminale sotto, per poi premere il tasto " +"invio!" -msgid "Look at your friend's suggestion, make a compromise, and push it back." -msgstr "PIPPO" +msgid "" +"Again, instead of using the card, you can also type the commands which are " +"printed on it into the black terminal below!\n" +"\n" +"This is totally optional! But this will be a super useful skill in the real " +"world - and it will give you a sparkling golden badge! :)" +msgstr "" +"Nuovamente, al posto di usare la carta, puoi anche digitare, nel terminale " +"sotto, i comandi che trovi stampato sulla carta!\n" +"\n" +"Questo e' completamente opzionale! Ma questa sara' una skill veramente utile " +"nel mondo reale - e ti dara' un distintivo scintillante! :)" -msgid "Order all tree branches into one and move the main branch ref" -msgstr "PIPPO" +msgid "" +"To go back to old commands, you can press arrow up and down. That way, you " +"don't have to type in long commands twice." +msgstr "" +"Per scorrere i vecchi comandi, puoi premere la freccia su e giu. In questo " +"modo, non dovrai digitare nuovamente i comandi." -msgid "Reorder the commits to dress yourself in the correct way" -msgstr "PIPPO" +msgid "" +"On the command line, you can easily delete all files ending in -web using " +"this command:\n" +"\n" +" rm *web" +msgstr "" -msgid "Restore the essay to contain "important content"" -msgstr "PIPPO" +msgid "" +"To checkout a specific commit, type `git checkout`, then a space, and then " +"right click on the commit you want!\n" +"\n" +"This will insert the commit's unique identifier!" +msgstr "" -msgid "Get the first version of your essay, and make a new commit with it." -msgstr "PIPPO" +msgid "" +"The blue animal represents a concept known as the 'HEAD pointer' in Git: It " +"shows you which commit is the current one.\n" +"\n" +"Here's a cool trick to go to the previous commit: \n" +"\n" +" git checkout HEAD^\n" +"\n" +"You can also go back two commits by typing, for example: \n" +"\n" +" git checkout HEAD~2" +msgstr "" -msgid "In the last main commit, the numbers file contains the numbers from 1 to 10." -msgstr "PIPPO" +msgid "" +"Branches also make it really easy to travel between different places using " +"the command line! As soon as you have a branch called 'birthday', you can " +"type `git checkout birthday` to travel to it!" +msgstr "" -msgid "The commit message of that commit is "More numbers"." -msgstr "PIPPO" +msgid "" +"To travel to a branch, type `git checkout name_of_the_branch`.\n" +"\n" +"And to travel to the last commit, type `git checkout --detach " +"name_of_the_branch`." +msgstr "" -msgid "The commit with the typo is not part of the main branch anymore." -msgstr "PIPPO" +msgid "" +"You can use tab completion in the terminal! Start typing a filename, then " +"press the tab key to complete its name. This will often save you some time!" +msgstr "" -msgid "The team's main branch no longer contains the bad thing." -msgstr "PIPPO" +#: CONGRAT +msgid "" +"Good job, you solved the level!\n" +"\n" +"Feel free to try a few more things or click 'Next level'." +msgstr "" +"Ottimo lavoro, hai risolto il livello!\n" +" Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'." -msgid "And the history has not been modified." -msgstr "PIPPO" +msgid "" +"Suddenly, your cat jumps on the table, snatches away the form, and runs " +"away! Oh no. All your hard work, gone!\n" +"\n" +"You clearly need a better solution.\n" +"\n" +"(Click 'Next Level' as soon as you're ready!)" +msgstr "" +"All'improvviso il tuo gatto salta sul tavolo, strappa via il modulo e scappa " +"via!Oh no. Tutto il tuo duro lavoro, andato!\n" +"\n" +"Devi trovare una buona soluzione\n" +"\n" +"(Clicca 'Prossimo livello' appena sei pronto!)" -msgid "Find out where you've been before, and go back there!" -msgstr "PIPPO" +msgid "" +"Okay, this kind of works.\n" +"\n" +"But you're a bit worried that you'll end up with hundreds of copies of this " +"form, and it will be hard to keep track of all of them.\n" +"\n" +"And especially when working with other people, sending copies back and forth " +"doesn't seem ideal.\n" +"\n" +"You can't wait to try these time machines!" +msgstr "" +"Ok, questo cosa può funzionare.\n" +"\n" +"Ma sei un pochino preoccupato che alla fine ti troverai con un centinaio di " +"copie di questo form, ed e' difficile tenerne traccia di tutto loro.\n" +"\n" +"Specialmente quando lavorerai con altre persone, inviare copie avanti ed " +"indietro non sembra l'ideale.\n" +"\n" +"Non vedi l'ora di provare questa macchina del tempo!" -msgid "Find the last good commit" -msgstr "PIPPO" +msgid "" +"Nice! See that little owl squirrel that appeared? It will be your companion, " +"and always show you where you are in time!" +msgstr "" +"Bene! Vedi quel piccolo animale che e' apparso? Sara' il tuo compagno e ti " +"mostrera' dove ti trovi nel tempo!" -msgid "Did you stash the current changes?" -msgstr "PIPPO" +msgid "" +"Cool! Instead of using the playing cards, you can also do everything via the " +"command line!\n" +"\n" +"The command line is pretty powerful! Often, you can use it to solve tasks " +"faster compared to using a graphical interface." +msgstr "" +"Bello! Al posto di usare le carte, puoi anche fare tutto tramite la linea di " +"comando!\n" +"\n" +"La linea di comando e' molto potente! A volte, puoi usarla per svolgere " +"alcuni compiti piu' velocemente in confronto all'uso dell'interfaccia " +"grafica." -msgid "Did you pop the changes from the stash stack?" -msgstr "PIPPO" +msgid "" +"Nice! You can try making some additional commits. When you feel comfortable, " +"click on 'Next Level'." +msgstr "" +"Bene! Puoi provare a creare altri commit aggiuntivi. Quando ti senti a tuo " +"agio, clicca su 'Prossimo livello'." -msgid "Did you clear your stash stack?" -msgstr "PIPPO" +msgid "" +"Welcome to time travel school! :) I'll see you for your first class tomorrow!" +msgstr "" +"Benvenuto nella scuola del viaggio nel tempo! :) Ci vediamo domani per la " +"tua prima lezione!" -msgid "Did you create a new branch from the stashed changes?" -msgstr "PIPPO" +msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" +msgstr "" -msgid "Did you resolve the confict and commit?" -msgstr "PIPPO" +msgid "Don't you immediately feel more at home?" +msgstr "" -msgid "Did you clear stash stack?" -msgstr "PIPPO" +msgid "" +"Wonderful! Now that you're getting familiar with the time machine, let's " +"look at some more complicated situations..." +msgstr "" -msgid "Did you create a new tag?" -msgstr "PIPPO" +msgid "" +"Whew, good job! This seems like a *much* better outcome.\n" +"\n" +"Feel free to add more parallel timelines, or make them longer.\n" +"\n" +"If you're ready, our next mission is already waiting..." +msgstr "" -msgid "Did you remove all tags?" -msgstr "PIPPO" +msgid "" +"Now you can travel between those branches easily (using `git checkout`) - " +"try it!\n" +"\n" +"Your friend is happy that you made it to the birthday party and you also got " +"your concert ticket signed. Yay!" +msgstr "" -msgid "Did you create a new tag?" -msgstr "PIPPO" +msgid "" +"On second thought, maybe you even prefer the ice cream timeline to the main " +"one? :)" +msgstr "" -msgid "v1 tag in your repo" -msgstr "PIPPO" +msgid "" +"I wonder if you're more relaxed when you *sleep* in parallel timelines..." +msgstr "" -msgid "v2 tag in your repo" -msgstr "PIPPO" +msgid "Yum, that sounds like a good breakfast!" +msgstr "" -msgid "v2 tag in the remote" -msgstr "PIPPO" +msgid "" +"Notice how the other timelines and commits are still there - if anything " +"goes wrong, you can also travel back to them.\n" +"\n" +"It's really hard to actually *destroy* stuff with your time machine." +msgstr "" + +msgid "" +"Feel free to reset the level and try the other strategy! Which one do you " +"like better?" +msgstr "" + +msgid "" +"Well done! :) The only problem is that you now have to walk all the way back " +"home, again..." +msgstr "" + +msgid "Nice stash you got there! :)" +msgstr "" + +msgid "Yay, you got your changes back! :)" +msgstr "" + +msgid "All clear! :)" +msgstr "" + +msgid "Stashed changes are in a new branch! :)" +msgstr "" + +msgid "Nice! You tagged your first commit :)" +msgstr "" + +msgid "Well done :)" +msgstr "" diff --git a/project.godot b/project.godot index 05c7cc7..0a401a8 100644 --- a/project.godot +++ b/project.godot @@ -151,7 +151,7 @@ mute={ [locale] -translations=PoolStringArray( "res://locale/it.po", "res://locale/it_levels.po", "res://locale/it_cards.po" ) +translations=PoolStringArray( "res://locale/it.po", "res://locale/it_cards.po", "res://locale/it_levels.po" ) locale_filter=[ 0, [ ] ] [network] diff --git a/scenes/level.gd b/scenes/level.gd index a05de90..743430f 100644 --- a/scenes/level.gd +++ b/scenes/level.gd @@ -20,9 +20,9 @@ func load(path): # This is a new-style level. var config = helpers.parse(path) - title = tr(config.get("title", slug)) + title = tr(config.get("title", slug)) # Title of Levels description = config.get("description", "(no description)") - description = tr(description.replace("\"", "\'")) + description = tr(description.replace("\"", "\'")) # Descriptions how to make the level # Surround all lines indented with four spaces with [code] tags. var monospace_regex = RegEx.new() @@ -31,7 +31,7 @@ func load(path): description = description.split("---") var cli_hints = config.get("cli", "") - cli_hints = tr(cli_hints.replace("\"", "\'")) + cli_hints = tr(cli_hints.replace("\"", "\'")) # suggestions to work strong # Also do this substitution in the CLI hints. cli_hints = monospace_regex.sub(cli_hints, "\n [code][color=#bbbb5d]$1[/color][/code]", true) @@ -47,7 +47,7 @@ func load(path): congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.") congrats = congrats.replace("\"", "\'") - congrats = tr(congrats) + congrats = tr(congrats) # Congratulations when the level is finish cards = Array(config.get("cards", "").split(" ")) if cards == [""]: cards = [] @@ -87,7 +87,7 @@ func load(path): for line in Array(config[k].split("\n")): if line.length() > 0 and line[0] == "#": desc = line.substr(1).strip_edges(true, true) - print("msgid \"", desc, "\"\nmsgstr \"PIPPO\"\n") + desc = desc.replace("\"", "\'") else: if not repos[repo].win_conditions.has(desc): repos[repo].win_conditions[desc] = "" diff --git a/scenes/level_select.gd b/scenes/level_select.gd index e311f12..98526e1 100644 --- a/scenes/level_select.gd +++ b/scenes/level_select.gd @@ -61,10 +61,3 @@ func reload(): level_id += 1 chapter_id += 1 - - - - - - - diff --git a/scenes/level_select.tscn b/scenes/level_select.tscn index eb8f3b5..69629da 100644 --- a/scenes/level_select.tscn +++ b/scenes/level_select.tscn @@ -97,7 +97,6 @@ margin_left = 163.0 margin_top = 0.0 margin_right = 309.0 margin_bottom = 39.0 -text = "Toggle music" [connection signal="pressed" from="HelpLabel/Button3" to="." method="onSurveyPressed"] [connection signal="pressed" from="HBoxContainer/Back" to="." method="back"] diff --git a/scenes/main.tscn b/scenes/main.tscn index a97e9e4..18c9ba4 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -247,7 +247,6 @@ margin_left = 169.0 margin_top = 0.0 margin_right = 315.0 margin_bottom = 39.0 -text = "Toggle music" [node name="CLIBadge" parent="Menu" instance=ExtResource( 10 )] anchor_right = 0.0 diff --git a/scenes/sandbox.tscn b/scenes/sandbox.tscn index fc1e113..e0546a9 100644 --- a/scenes/sandbox.tscn +++ b/scenes/sandbox.tscn @@ -10,9 +10,6 @@ anchor_right = 1.0 anchor_bottom = 1.0 theme = ExtResource( 3 ) script = ExtResource( 4 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="Background" type="ColorRect" parent="."] anchor_right = 1.0 From ba3e4b07e83a27ba02b60d920ef75f7c2a2a43cc Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Fri, 19 Aug 2022 16:58:51 +0200 Subject: [PATCH 40/49] Add template files for generating .po file in other languages --- locale/cards.pot | 169 +++++ locale/levels.pot | 1037 +++++++++++++++++++++++++++++ locale/messages.mo | Bin 8795 -> 0 bytes locale/{messages.pot => text.pot} | 185 ++--- 4 files changed, 1266 insertions(+), 125 deletions(-) create mode 100644 locale/cards.pot create mode 100644 locale/levels.pot delete mode 100644 locale/messages.mo rename locale/{messages.pot => text.pot} (53%) diff --git a/locale/cards.pot b/locale/cards.pot new file mode 100644 index 0000000..a157bab --- /dev/null +++ b/locale/cards.pot @@ -0,0 +1,169 @@ +# Translations template for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# Automatically generated, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: 2022-08-19 16:52+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.10.3\n" +"X-Generator: Poedit 3.1\n" + +#: CARDS DESCRIPTION oh-my-git/resources/cards.json:6 +msgid "Drag this card into the empty space above to initialize the time machine!" +msgstr "" + +#: oh-my-git/resources/cards.json:14 +msgid "Create your own copy of someone else's repo." +msgstr "" + +#: oh-my-git/resources/cards.json:22 +msgid "" +"Set your name.\n" +"\n" +"(Will not change anything outside of this game.)" +msgstr "" + +#: oh-my-git/resources/cards.json:30 +msgid "Set your email address." +msgstr "" + +#: oh-my-git/resources/cards.json:38 +msgid "Drag this card to a commit or to a branch to travel to it!" +msgstr "" + +#: oh-my-git/resources/cards.json:46 +msgid "Reset changes in a local file." +msgstr "" + +#: oh-my-git/resources/cards.json:54 +msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." +msgstr "" + +#: oh-my-git/resources/cards.json:62 +msgid "" +"Make a new commit, after automatically adding all changes to the index.\n" +"You'll be asked to enter a short description of what you changed." +msgstr "" + +#: oh-my-git/resources/cards.json:70 +msgid "Make a new commit containing your current environment! Type in a description of what changed!" +msgstr "" + +#: oh-my-git/resources/cards.json:78 +msgid "Merge the specified timeline into yours. If necessary, will create a merge commit." +msgstr "" + +#: oh-my-git/resources/cards.json:86 +msgid "Abort the current merge attempt, and reconstruct the previous state." +msgstr "" + +#: oh-my-git/resources/cards.json:94 +msgid "Put the events in your current timeline on top of the specified one." +msgstr "" + +#: oh-my-git/resources/cards.json:102 +msgid "Get someone else's version of the current timeline, and try to merge it into yours." +msgstr "" + +#: oh-my-git/resources/cards.json:110 +msgid "Get a someone else's version of the current timeline." +msgstr "" + +#: oh-my-git/resources/cards.json:118 +msgid "Give the current timeline to someone else." +msgstr "" + +#: oh-my-git/resources/cards.json:126 +msgid "Make changes to the events in your current timeline, back to the commit you drag this to." +msgstr "" + +#: oh-my-git/resources/cards.json:134 +msgid "Continue the current rebasing process." +msgstr "" + +#: oh-my-git/resources/cards.json:142 +msgid "Move the branch you're on to the specified commit." +msgstr "" + +#: oh-my-git/resources/cards.json:150 +msgid "Jump to the commit, and update the index. Keep the current environment." +msgstr "" + +#: oh-my-git/resources/cards.json:158 +msgid "Reset the index version of a file to the version in the commit you're on." +msgstr "" + +#: oh-my-git/resources/cards.json:166 +msgid "Repeat the specified action on top of your current timeline." +msgstr "" + +#: oh-my-git/resources/cards.json:174 +msgid "Make a new commit that reverts the changes of the speicified commit." +msgstr "" + +#: oh-my-git/resources/cards.json:182 +msgid "Start looking for the commit where things got bad." +msgstr "" + +#: oh-my-git/resources/cards.json:190 +msgid "State that the current commit is good! When you're automatically transferred, keep playing the `good` and `bad` cards!" +msgstr "" + +#: oh-my-git/resources/cards.json:198 +msgid "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!" +msgstr "" + +#: oh-my-git/resources/cards.json:206 +msgid "Update the index version of the file to its current real content." +msgstr "" + +#: oh-my-git/resources/cards.json:214 +msgid "Delete a file both in the working directory, as well as the index." +msgstr "" + +#: oh-my-git/resources/cards.json:222 +msgid "Make a commit from the current index." +msgstr "" + +#: oh-my-git/resources/cards.json:230 +msgid "Show what changed in the commit." +msgstr "" + +#: oh-my-git/resources/cards.json:238 +msgid "Create a new branch at your current location." +msgstr "" + +#: oh-my-git/resources/cards.json:246 +msgid "Delete a branch." +msgstr "" + +#: oh-my-git/resources/cards.json:254 +msgid "Display a log of where the ref pointed to in the past." +msgstr "" + +#: oh-my-git/resources/cards.json:262 +msgid "Create a new file." +msgstr "" + +#: oh-my-git/resources/cards.json:270 +msgid "Delete a file." +msgstr "" + +#: oh-my-git/resources/cards.json:278 +msgid "Rename a file." +msgstr "" + +#: oh-my-git/resources/cards.json:286 +msgid "Make a copy of a file." +msgstr "" diff --git a/locale/levels.pot b/locale/levels.pot new file mode 100644 index 0000000..eeced88 --- /dev/null +++ b/locale/levels.pot @@ -0,0 +1,1037 @@ +# Translations template for PROJECT. +# Copyright (C) 2022 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# Automatically generated, 2022. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2022-08-18 10:39+0200\n" +"PO-Revision-Date: 2022-08-19 16:53+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.10.3\n" +"X-Generator: Poedit 3.1\n" + +#: TITLE +msgid "Living dangerously" +msgstr "" + +#: Command +msgid "Add another line to form.txt!" +msgstr "" + +msgid "Making backups" +msgstr "" + +msgid "Add another line to form2_really_final.txt!" +msgstr "" + +msgid "Enter the time machine" +msgstr "" + +msgid "Initialize the time machine!" +msgstr "" + +msgid "The command line" +msgstr "" + +msgid "Your first commit" +msgstr "" + +msgid "Make a snapshot of the glass (a 'commit')" +msgstr "" + +msgid "Change the contents of the glass!" +msgstr "" + +msgid "And make a second commit!" +msgstr "" + +msgid "Working together" +msgstr "" + +msgid "Get the second commit from your teacher using `git pull`." +msgstr "" + +msgid "Add your name to the list of students" +msgstr "" + +msgid "Commit your result." +msgstr "" + +msgid "And use `git push` to send it to your teacher!" +msgstr "" + +msgid "Unexpected Roommates" +msgstr "" + +msgid "Remove all spider webs." +msgstr "" + +msgid "But make sure you keep your bed!" +msgstr "" + +msgid "Interior design" +msgstr "" + +msgid "Add two more pieces of furniture" +msgstr "" + +msgid "Make sure the colors match your bed's color." +msgstr "" + +msgid "Moving through time" +msgstr "" + +msgid "Restore sisterly peace." +msgstr "" + +msgid "Make parallel commits" +msgstr "" + +msgid "Make sure that the child is happy." +msgstr "" + +msgid "Make sure that the lion gets something to eat." +msgstr "" + +msgid "Creating branches" +msgstr "" + +msgid "Create a branch called 'birthday' that points to the birthday timeline." +msgstr "" + +msgid "Create a branch called 'concert' that points to the concert timeline." +msgstr "" + +msgid "Branches grow with you!" +msgstr "" + +msgid "" +"Travel directly to the last yellow commit of the birthday timeline, make a " +"change to 'you', and make a commit" +msgstr "" + +msgid "" +"Travel to the blue 'concert' branch, make a change to 'you', and a commit." +msgstr "" + +msgid "Deleting branches" +msgstr "" + +msgid "Find the bad branches and delete them. Keep only the best one." +msgstr "" + +msgid "Moving branches around" +msgstr "" + +msgid "Did you eat a baguette on the baguette branch?" +msgstr "" + +msgid "Did you drink a coffee on the coffee branch?" +msgstr "" + +msgid "Did you eat a donut on the donut branch?" +msgstr "" + +msgid "Merging timelines" +msgstr "" + +msgid "" +"Build a situation where you consumed a baguette, a coffee, *and* a donut." +msgstr "" + +msgid "Be on a merge commit." +msgstr "" + +msgid "Contradictions" +msgstr "" + +msgid "Make a breakfast compromise in the 'main' branch." +msgstr "" + +msgid "Step by step" +msgstr "" + +msgid "Pick the timeline that's clearer, and make the alarm go off!" +msgstr "" + +msgid "Add new files to the index" +msgstr "" + +msgid "Add the candle." +msgstr "" + +msgid "Make a commit." +msgstr "" + +msgid "Update files in the index" +msgstr "" + +msgid "Make a change to the candle." +msgstr "" + +msgid "Resetting files in the index" +msgstr "" + +msgid "Reset the changes in the green and blue candles!" +msgstr "" + +msgid "And make a commit!" +msgstr "" + +msgid "Adding changes step by step" +msgstr "" + +msgid "" +"Make changes to all three objects, to form a logical sequence of events!" +msgstr "" + +msgid "Only add one of these changes!" +msgstr "" + +msgid "And make a commit." +msgstr "" + +msgid "Make a second commit that only records a single change." +msgstr "" + +msgid "And a third one." +msgstr "" + +msgid "Friend" +msgstr "" + +msgid "Got the second line from your friend" +msgstr "" + +msgid "Got the fourth line from your friend." +msgstr "" + +msgid "The friend got a third line from you" +msgstr "" + +msgid "The friend got a fifth line from you" +msgstr "" + +msgid "Problems" +msgstr "" + +msgid "Commit your local changes." +msgstr "" + +msgid "Look at your friend's suggestion, make a compromise, and push it back." +msgstr "" + +msgid "Rebasing" +msgstr "" + +msgid "Order all tree branches into one and move the main branch ref" +msgstr "" + +msgid "Reordering events" +msgstr "" + +msgid "Reorder the commits to dress yourself in the correct way" +msgstr "" + +msgid "Restore a deleted file" +msgstr "" + +msgid "Restore the essay to contain 'important content'" +msgstr "" + +msgid "Restore a file from the past" +msgstr "" + +msgid "Get the first version of your essay, and make a new commit with it." +msgstr "" + +msgid "Undo a bad commit" +msgstr "" + +msgid "" +"In the last main commit, the numbers file contains the numbers from 1 to 10." +msgstr "" + +msgid "The commit message of that commit is 'More numbers'." +msgstr "" + +msgid "The commit with the typo is not part of the main branch anymore." +msgstr "" + +msgid "I pushed something broken" +msgstr "" + +msgid "The team's main branch no longer contains the bad thing." +msgstr "" + +msgid "And the history has not been modified." +msgstr "" + +msgid "Go back to where you were before" +msgstr "" + +msgid "Find out where you've been before, and go back there!" +msgstr "" + +msgid "Cloning a repo" +msgstr "" + +msgid "Yellow brick road" +msgstr "" + +msgid "Find the last good commit" +msgstr "" + +msgid "Stashing" +msgstr "" + +msgid "Did you stash the current changes?" +msgstr "" + +msgid "Pop from Stash" +msgstr "" + +msgid "Did you pop the changes from the stash stack?" +msgstr "" + +msgid "Clear the Stash" +msgstr "" + +msgid "Did you clear your stash stack?" +msgstr "" + +msgid "Branch from stash" +msgstr "" + +msgid "Did you create a new branch from the stashed changes?" +msgstr "" + +msgid "Merging popped stash" +msgstr "" + +msgid "Did you resolve the confict and commit?" +msgstr "" + +msgid "Did you clear stash stack?" +msgstr "" + +msgid "Creating tags" +msgstr "" + +msgid "Did you create a new tag?" +msgstr "" + +msgid "Removing tags" +msgstr "" + +msgid "Did you remove all tags?" +msgstr "" + +msgid "Tagging later" +msgstr "" + +msgid "Remote Tags" +msgstr "" + +msgid "v1 tag in your repo" +msgstr "" + +msgid "v2 tag in your repo" +msgstr "" + +msgid "v2 tag in the remote" +msgstr "" + +msgid "Empty sandbox" +msgstr "" + +msgid "Sandbox with a remote" +msgstr "" + +msgid "Sandbox with three commits" +msgstr "" + +#: DESCRIPTION +msgid "" +"So you have decided to apply for time travel school, to learn how to use " +"this time machine called 'Git'!\n" +"\n" +"How exciting!\n" +"\n" +"You're almost done with the paperwork! You just need to fill in one more " +"reason why you want to learn Git." +msgstr "" + +msgid "" +"This time, you're making a lot of backup copies - you can look at them by " +"clicking on them!" +msgstr "" + +msgid "" +"You've been accepted to time travel school! Yay! It's your first day! Your " +"teacher explains:\n" +"\n" +"'To do anything with a time machine, you first need to initialize it!'\n" +"\n" +"Drag that blue card up to play it!" +msgstr "" + +msgid "" +"These playing cards are designed to be easy to use and to remember! We'd " +"suggest sticking to them if you don't have a lot of experience with Git!" +msgstr "" + +msgid "" +"You can use your time machine to make snapshots of objects around you! Here, " +"let's practice this!\n" +"\n" +"(Your teacher pours some water into a glass.)" +msgstr "" + +msgid "" +"Let's add your name to our list of students!\n" +"\n" +"I already have a second commit of it in my time machine - let's work " +"together!" +msgstr "" + +msgid "" +"The first day at Time Travel School comes to an end and you receive the key " +"to your room.\n" +"Full of excitement you open the door just to find... spider webs! Spider " +"webs everywhere!\n" +"\n" +"Remove all the spider webs you can find with the remove card!" +msgstr "" + +msgid "" +"Now that your room looks tidy, you can start to unpack your stuff. You " +"brought two new pieces of furniture with you and with a bright smile,\n" +"you see that their colors match the color of your bed!\n" +"\n" +"Build up your two pieces of furniture by playing the touch card.\n" +"Then name your furniture - you can choose whatever you like.\n" +"\n" +"Make sure the colors match! You can find the bed's color in its " +"description.\n" +"Don't forget to add a color and description to your new furnitures, too!" +msgstr "" + +msgid "" +"The yellow boxes are frozen points in time, we call them 'commits'! You can " +"travel between them using the 'checkout' card! (Try it!)\n" +"\n" +"Can you find out what happened here? Then, while on the last commit, edit " +"the files to fix the problem, and make a new commit!" +msgstr "" + +msgid "" +"Did you know that creating parallel timelines is perfectly legal and safe? " +"It's true!\n" +"\n" +"Can you find out when things went wrong in this zoo? Then, go back to the " +"last good commit and create a parallel universe where everyone is happy!" +msgstr "" + +msgid "" +"You were invited to two parties! At one of them, your favorite band is " +"playing - and the other one is your best friend's birthday party. Where " +"should you go? No worries - as a time travel agent in training, you can go " +"to both parties!\n" +"\n" +"To make it easier to tell which timeline is which, you can create time " +"portals! (We call these 'branches'.)" +msgstr "" + +msgid "" +"Note that there are two options to 'travel to the end of a timeline':\n" +"\n" +"First, you can directly travel to the commit, like we've done it before.\n" +"\n" +"And second, you can travel to the branch label. In this case, when you make " +"a new commit, the branch will grow with you, and still point at the end of " +"the timeline!" +msgstr "" + +msgid "" +"Life is full of dangers, right? Even when walking to school, it seems like " +"there's a lot of risks!\n" +"\n" +"This Monday is especially bad. You made it to school, but there's some " +"timelines you definitely don't want to keep around." +msgstr "" + +msgid "" +"One of your colleagues messed up here, and put the branches in the wrong " +"timelines!\n" +"\n" +"You could delete and re-create these branches - but you can also directly " +"move them to different commits, by using\n" +"\n" +" git checkout\n" +"\n" +"on the branch names, and then using\n" +"\n" +" git reset --hard\n" +"\n" +"on the commit where you want the branch to be.\n" +"\n" +"The donut branch is in the right place, but the timeline is still incomplete " +"- make you actually *eat* the donut in that branch!" +msgstr "" + +msgid "" +"Here's a trick so that you can sleep a bit longer: just do all your morning " +"activities in parallel universes, and then at the end, merge them together!" +msgstr "" + +msgid "" +"Sometimes, timelines will contradict each other.\n" +"\n" +"For example, in this case, one of our clients wants these timelines merged, " +"but they ate different things for breakfast in both timelines.\n" +"\n" +"Try to merge them together! You'll notice that there will be a conflict! The " +"time machine will leave it up to you how to proceed: you can edit the " +"problematic item, it will show you the conflicting sections. You can keep " +"either of the two versions - or create a combination of them! Remove the " +">>>, <<<, and === markers, and make a new commit to finalize the merge!\n" +"\n" +"Let your finalized timeline be the 'main' one." +msgstr "" + +msgid "" +"Welcome to today's lesson! We're going to learn how to make commits with " +"more precision!\n" +"\n" +"Have a look at these two timelines. They have exactly the same outcome. But " +"one of them makes it much easier to figure out what happened." +msgstr "" + +msgid "" +"So far, when we made a commit, we've always recorded the current status of " +"all objects, right?\n" +"\n" +"But Git allows you to pick which changes you want to put in a commit!\n" +"\n" +"To learn how that works, we need to learn about the 'index'! In the index, " +"we can prepare what will be in the next commit. In this game, the index is " +"represented by a blue aura around icons in the file browser!\n" +"\n" +"Initially, the index is empty. To make a commit that contains a new file, we " +"need to add it!" +msgstr "" + +msgid "" +"When we change files, the index won't change on its own. We have to use `git " +"add` to update the index to the changed version of the file.\n" +"\n" +"Let's try that!\n" +"\n" +"The icons in the file browser show you when the actual file (white) and the " +"version in the index (blue) are different, and when they are the same!" +msgstr "" + +msgid "" +"See the dark shadow behind the icons? That's the version of the file in the " +"last commit!\n" +"\n" +"For example, these candles have been blown out, and that change has been " +"added.\n" +"\n" +"But you decide that this was a mistake! You only want to blow out the red " +"candle in the next commit!\n" +"\n" +"If you already have updated the index to a changed file, but want to reset " +"it, you can use `git reset`!" +msgstr "" + +msgid "" +"The index is really useful, because it allows us to be precise about which " +"changes we want to include in each commit!" +msgstr "" + +msgid "" +"Your friend added another line to your essay! Get it, add a third one and " +"send it to them!\n" +"\n" +"Take turns until you have five lines!" +msgstr "" + +msgid "" +"Both you and your friend have been working on the file, and want to sync up!" +msgstr "" + +msgid "" +"Okay - turns out that saving time in the morning by utilizing parallel " +"universes is against the regulations of the International Time Travel " +"Association. You'll have to do your tasks in sequence after all.\n" +"\n" +"See the 'rebase' card? When you drag it to a commit, it will copy the events " +"in your current timeline after the specified one! This way, make a clean, " +"linear timeline where you visit all three shops.\n" +"\n" +"Again, we want to make that our base reality - the 'main' branch should " +"point to that timeline!" +msgstr "" + +msgid "" +"Oops, looks like there's something messed up here. Can you put the events " +"back into their correct order?\n" +"\n" +"There are two ways to do this: You can drag the 'interactive rebase' card to " +"the commit before the one you want to change, then reorder the lines in the " +"file that opens, and save it.\n" +"\n" +"Or you can reset the main tag to the very first commit, and then cherry-pick " +"single commits in the order you want. You have cards for both approaches!" +msgstr "" + +msgid "" +"Oops - you deleted the 'essay' file, which you worked on all night!\n" +"\n" +"Luckily, Git is here to help! You can use `git checkout` to restore the file!" +msgstr "" + +msgid "" +"Here's a similar problem: you really liked the essay from the very first " +"commit, and want to have it back! Well, checkout can also restore things " +"from older commits, Here's how:\n" +"\n" +" git checkout [commit] [file]" +msgstr "" + +msgid "" +"Oh no, we made a bad commit! How can we undo making the commit, and go back " +"to a point where we can try again?\n" +"\n" +"The answer is using `git reset [commit]`, which does two things:\n" +"\n" +"- It resets the current branch ref to the commit you specify.\n" +"- And it resets the index to that commit.\n" +"\n" +"It does not change your working directory in any way, which means that after " +"that, you can try making the commit you want again." +msgstr "" + +msgid "" +"We were talking about how to undo a commit, and fix it. This only helps when " +"you haven't already pushed it to a remote. When that has happened, and you " +"want to undo the effects of the commit completely, your best option is `git " +"revert`" +msgstr "" + +msgid "" +"Say you were looking at something in the past, and then switched back to the " +"main branch.\n" +"\n" +"But then, you got reaaally distracted, and after your lunch break, you can't " +"remember on which commit in the past you were before. How can you find out?\n" +"\n" +"There's a convenient command that shows you all the places your HEAD did " +"point to in the past:\n" +"\n" +" git reflog" +msgstr "" + +msgid "" +"Your friend has a problem! Clone the repo, create a branch called " +"'solution', and fix the problem in this branch. When you're ready, make a " +"'Pull Request' by using `git tag pr`." +msgstr "" + +msgid "" +"(Please zoom out a bit using your mouse wheel! :D)\n" +"\n" +"Oh no! You have lost your key at some point during the day!\n" +"\n" +"Sure, you could look at every single commit in an attempt to find it - but " +"there's a better way: your time machine has a built-in way to find the point " +"in time where things went wrong quickly!\n" +"\n" +"First, play the 'bisect start' card. Then, go to a commit where you don't " +"have the key, and play the 'bisect bad' card. Likewise, go to a commit early " +"on where you have the key *in your pocket*, and play the 'bisect good " +"card'.\n" +"\n" +"After you've found the last good commit, reset the main branch to it. What " +"happened to the key after you lost it?" +msgstr "" + +msgid "" +"You will encounter situations in which you are working on your project but " +"you need to\n" +"put your current changes aside temporarily. To do so, you can use the stash " +"function. Use\n" +" git stash push \n" +"to add your current changes to the stash stack.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"When you stashed your changes and you want to apply them back to your " +"current working directory, you can use\n" +" git stash pop\n" +"This will remove the changes from the stash stack. If you also want to keep " +"the changes on the stash stack, use\n" +" git stash apply\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"If you want to inspect your stash stack, use the command\n" +" git stash list\n" +" \n" +"Oh, you don't want to keep your stashed changes? There are way too many? " +"Then go ahead and clear the stack with\n" +" git stash clear\n" +"If you only want to discard a certain stash entry, you can use\n" +" git stash drop \n" +" \n" +"Clear your stash stack!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"If you want to keep your changes but they don't belong to the main branch, " +"you can easily\n" +"create a new branch from your stashed changes. Just use\n" +" git stash branch \n" +"If you just want to use the latest stash entry, you can leave the " +"option empty.\n" +"\n" +"Create a new branch from the stashed changes!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"When you want to reapply your changes but you already continued working on " +"your file, you might get\n" +"a merge conflict! Let's practise this situation.\n" +"Pop the changes from the stash with\n" +" git stash pop\n" +"and resolve the merge conflict. Commit the resolved changes and clear the " +"stash stack afterwards.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"Some of your commits may be special commits. Maybe you reached a milestone " +"or a new version number.\n" +"\n" +"You can mark these commits with a special flag called 'tag'.\n" +"\n" +"Write \n" +"\n" +" git tag \n" +" \n" +"to tag your commit.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"You added way too many tags? No prob! Delete them with\n" +"\n" +" git tag -d \n" +" \n" +"Remove all tags in this repo!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"But what happens if you forgot to tag your current commit?\n" +"No Prob! You can also tag older commits via\n" +"\n" +" git tag \n" +" \n" +"Tag the commit 'Adding feature 2' with the name 'v1'!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "" +"When you work with remote repositories, tags are not pushed or pulled " +"automatically.\n" +"\n" +"You can push a tag with\n" +" git push \n" +"Or all tags with:\n" +" git push --tags\n" +" \n" +"Deleting tags on your remote works with: \n" +" git push --delete \n" +" \n" +"You can also sync \n" +" git fetch --prune --prune-tags\n" +"\n" +"\n" +"Add a tag named 'v2' to the last commit and push it to the remote. Also pull " +"the v1 tag to your local repository." +msgstr "" + +msgid "This is an empty sandbox you can play around in." +msgstr "" + +msgid "" +"Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n" +"\n" +"How can you push tags and branches on a remote? How can you delete them " +"again?" +msgstr "" + +msgid "" +"Here's a sandbox you can play around in.\n" +"\n" +"You can use both the playing cards, as well as the terminal. This is a real " +"Git terminal! Fun things to try:\n" +"\n" +"- Make a commit that merges three timelines together at once!\n" +"- Create and delete some tags!\n" +"- Make a timeline that's completely independent of the rest!" +msgstr "" + +#: HITS +msgid "" +"But there's another way to interact with Git:\n" +"\n" +"Try typing `git init` into the black terminal below, and pressing the enter " +"key!" +msgstr "" + +msgid "" +"Again, instead of using the card, you can also type the commands which are " +"printed on it into the black terminal below!\n" +"\n" +"This is totally optional! But this will be a super useful skill in the real " +"world - and it will give you a sparkling golden badge! :)" +msgstr "" + +msgid "" +"To go back to old commands, you can press arrow up and down. That way, you " +"don't have to type in long commands twice." +msgstr "" + +msgid "" +"On the command line, you can easily delete all files ending in -web using " +"this command:\n" +"\n" +" rm *web" +msgstr "" + +msgid "" +"To checkout a specific commit, type `git checkout`, then a space, and then " +"right click on the commit you want!\n" +"\n" +"This will insert the commit's unique identifier!" +msgstr "" + +msgid "" +"The blue animal represents a concept known as the 'HEAD pointer' in Git: It " +"shows you which commit is the current one.\n" +"\n" +"Here's a cool trick to go to the previous commit: \n" +"\n" +" git checkout HEAD^\n" +"\n" +"You can also go back two commits by typing, for example: \n" +"\n" +" git checkout HEAD~2" +msgstr "" + +msgid "" +"Branches also make it really easy to travel between different places using " +"the command line! As soon as you have a branch called 'birthday', you can " +"type `git checkout birthday` to travel to it!" +msgstr "" + +msgid "" +"To travel to a branch, type `git checkout name_of_the_branch`.\n" +"\n" +"And to travel to the last commit, type `git checkout --detach " +"name_of_the_branch`." +msgstr "" + +msgid "" +"You can use tab completion in the terminal! Start typing a filename, then " +"press the tab key to complete its name. This will often save you some time!" +msgstr "" + +#: CONGRAT +msgid "" +"Good job, you solved the level!\n" +"\n" +"Feel free to try a few more things or click 'Next level'." +msgstr "" + +msgid "" +"Suddenly, your cat jumps on the table, snatches away the form, and runs " +"away! Oh no. All your hard work, gone!\n" +"\n" +"You clearly need a better solution.\n" +"\n" +"(Click 'Next Level' as soon as you're ready!)" +msgstr "" + +msgid "" +"Okay, this kind of works.\n" +"\n" +"But you're a bit worried that you'll end up with hundreds of copies of this " +"form, and it will be hard to keep track of all of them.\n" +"\n" +"And especially when working with other people, sending copies back and forth " +"doesn't seem ideal.\n" +"\n" +"You can't wait to try these time machines!" +msgstr "" + +msgid "" +"Nice! See that little owl squirrel that appeared? It will be your companion, " +"and always show you where you are in time!" +msgstr "" + +msgid "" +"Cool! Instead of using the playing cards, you can also do everything via the " +"command line!\n" +"\n" +"The command line is pretty powerful! Often, you can use it to solve tasks " +"faster compared to using a graphical interface." +msgstr "" + +msgid "" +"Nice! You can try making some additional commits. When you feel comfortable, " +"click on 'Next Level'." +msgstr "" + +msgid "" +"Welcome to time travel school! :) I'll see you for your first class tomorrow!" +msgstr "" + +msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" +msgstr "" + +msgid "Don't you immediately feel more at home?" +msgstr "" + +msgid "" +"Wonderful! Now that you're getting familiar with the time machine, let's " +"look at some more complicated situations..." +msgstr "" + +msgid "" +"Whew, good job! This seems like a *much* better outcome.\n" +"\n" +"Feel free to add more parallel timelines, or make them longer.\n" +"\n" +"If you're ready, our next mission is already waiting..." +msgstr "" + +msgid "" +"Now you can travel between those branches easily (using `git checkout`) - " +"try it!\n" +"\n" +"Your friend is happy that you made it to the birthday party and you also got " +"your concert ticket signed. Yay!" +msgstr "" + +msgid "" +"On second thought, maybe you even prefer the ice cream timeline to the main " +"one? :)" +msgstr "" + +msgid "" +"I wonder if you're more relaxed when you *sleep* in parallel timelines..." +msgstr "" + +msgid "Yum, that sounds like a good breakfast!" +msgstr "" + +msgid "" +"Notice how the other timelines and commits are still there - if anything " +"goes wrong, you can also travel back to them.\n" +"\n" +"It's really hard to actually *destroy* stuff with your time machine." +msgstr "" + +msgid "" +"Feel free to reset the level and try the other strategy! Which one do you " +"like better?" +msgstr "" + +msgid "" +"Well done! :) The only problem is that you now have to walk all the way back " +"home, again..." +msgstr "" + +msgid "Nice stash you got there! :)" +msgstr "" + +msgid "Yay, you got your changes back! :)" +msgstr "" + +msgid "All clear! :)" +msgstr "" + +msgid "Stashed changes are in a new branch! :)" +msgstr "" + +msgid "Nice! You tagged your first commit :)" +msgstr "" + +msgid "Well done :)" +msgstr "" diff --git a/locale/messages.mo b/locale/messages.mo deleted file mode 100644 index a440a58d63cb555e4be7f22382399bf6ff95e0d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8795 zcmds+UyNMWUB_>l(8BPiG!$BBL(dSBwUeFk+HP8BT_;)F8)sdwZFV;f>7U>`GiPT{ zednIZ{j=*$A(aY^S|Qq(mhylQ5)wj4z!Tz+)CZIY5TXbK5(oiOK%zqMfFd3cQW2l; zIrq-Yx(+D<35k*KerN7I=XZYp|6Kp={r7z-;j_v0Uap^dOOlMif4+}Dd_McuB)JHF z4*XW|k3l{93y^=wU-RdE;NOD}gZI8INxlVq1nhw;;QinW;4=6k_}$kA(`}U|03x1B@zY0DNz8|7n z;OD_p;A-v!5;?Cf1YZC@39f^G1%44UJd|C26Z{zX zj`zSDn1hO^Uj`L-zXje4eg(V%{vIehyqn+_Uk`wi^I=eSKLaj-p9H1!9fU zJBVu77}viGe2||X0TrJwgDLns;K#uC;IxwaHuzESGoa|b23`dJ5qur&lQc$P*WerA zE1=eOx>26{LD}~~P<%fEu7RgP$y+!03Ml!$3_cA0JopOuDky)y{6mq>4tNj0wf7mW z$GFgEQOL+kI2_M2Cd=Tr%M>0##PjfxQ^%gFDRw5*4 z8x+Wn%H4`jePnON&^a#YUVi>4m;8*dO^$QPMyI)O%OjsN{5r+;IM*?*%Ut^4uE8!( zfw)NU{d+-uHo2bUx}qOz17B38+OuX@7lq9$GqJ_knzX9yWLhnoG#{D54t-u$MLmp5 zr-j{jzAjB!rIqa`YX`RU6WdMBr^8#xg|rxz-Qtd3$(a2Wjc@v6&WrXv?zCGM_=Lu$*L4liLF`DAIhm2aD#=*TszS%n#Gb`J6qA zt9M-ni_NXD!5`#i=%)Eut<8yKAQ2<&_(cBNeiCk%Q#*9K4)sQX%ht2LN@{AjCSYd4$0(6l1L78k2qiL3b6~4sMeB4boxaHD3xm-`C;v{ew z>>Q=8rz1s{ZbwfwAGVg23xe2u-xWTepv8W2CC$fmI=0CbMRA#IrneNAjqA*G+$y2* z{@JP+b!jk7zul~$ZV1R)DUOTGM}m8ShpyQfVKV zwa0Ukmo4yzAYxcsw(f~%xFfD{7Zy?5F8VcTUHJ(KXNby)FlAbPDvN0sty`TI@?W$zUW%5eP}6Xv_=UosWOx`{v99BV#_RK!+3nFjrKuPRpyq8O6w=v z)Zu}@4er}yn==DLc9ObGzDKx|_h$DcV87Ej_M9w~lWii0j(fya}P3Ce);^82ztL z)xQ7zV|V1ks^rNIndO$OB%>diNlnKheKpK?JJ&OtmX^hfHNY-bfX?7heng!N218!7 zRo2D6JzS0SX|s0ra6yxzw&Fr*{@w?Tz* zB}Zs@`pFGBUR~PVnhyFoqFRNo-|r{SE3dXpH>DtYk*{g@gC2tf6PkPyv6ha>IVn+{ zjR;gCjTu4iZ0RRs(hgcLeMT1~0_cXb+c0fIHb$qpfEqb~wnoe4g`slJ*EhB>>Jgtz zB&t$cQn@O#$@Rj2f@Zt7G3p_r+RIgQee2rg^$R=Z#`@Ow#^o!7r`OzGu!cb&kRqIZWY(UQ?kfnL09>T-K0S7=$cNqQP)|IJ7UZI?eE+jeO*6 zRd@}E6~8aU0g(x4$qxoRY7Yo~E{;uqnR%@XgJLR7Cds#H;;I1tWP%fp&`tgmV{v{T2_@mWjQ5D!vtCKwV&Y1<&eA=2a3p$CTosWc`*C6uQbR_IR*u= z7wu_|d`V>n#wY1eQ>5B&hC*gf{{}S6S}ImBYpkSp>1SgZQ7*BJItr&ph(Z?wf7fa1 z;RiEfFewYyAw8Cge9JT~7RY3ZTeNkDIm8ps16Mfr+~ohG&3L;;w3J>85nRCu!IpSR zKe>kI+T6v6QEZbQV8g`}JxX1xfu_IIYYK%A5>-+(o&mkt8w82e_(ga$^MwuOu&`8F z@oplLppUp_@-(k;h@drBSLx94c;cAVeIYx}N6pR_FC#pP%}0#=^ayfpG|PCy&DG>8 z?!sgCX9GM8)}sT+E|?E>$GoAr0P)+A)6=YG$k)_gJb*rBJmz>jXXfE%lRZIwc;AFH z00q5$BE)e2E2KN7O*ZjW`M`xYISXF35G}JXB5YzVXu}xZalC~fpL=Djmf=)lsH)Mx z9b9zHHZ$hFNXX+gaK>Z;RT5xoUi}r^luZOzd{d>vVisy#Utyi*c`eUWohOa&x)AFG zP_t(497-uia#>ulj77*l3;+y`sD#Mo*Q^vN@X6FQ&S+pPFr<4j+f3V?i+;brAzfZ# zNxVQZ4KxwoRkA(#ZX+5@g>MEAGGQ1a^@Lcv(;atR4r6n{Xq#$BGIDy46fzHtha`{l zqlFPM^lToh2>Q9hx#xP3HFJfEqRwpF*(~b(vgS}*y!wk$eWOs!6J}CIkdS5+pH1!| z+lVD}LjuRL3(UrMLxiXjQQ^zdO*}k>T12JMtFvpjc(*|4+HX{aD#x7yv^9qu7wrGW z@=-8RPqM{31!`-`m)xsCl~B=nx7<{(R0);nf(y!7R*oOKNt2o0h>Il5q=aQ_+2|we zZ4RN5Gr-!}I`lnHwyF`aG$~89J3=a4T-2IC9HHmZx`hEY+b3U8Ge{kcF^%nMknPWI zH<5_+VT`?s*@GJf3&${uPQ6=u5|YXgDPrguVVm-JXJD$lHC%B_C}^a^p)F8#)9ZvH z6^d!78cbD87&vksUXYb^e&n``gsn>{jEY{&5EE4^FCCw|wQb5K*lZju*o;&8M-_Gb4@PJp^LeY3><0&x%V4b^KzA^co&slbcKMvR!0H)R#2 zmcS{Qtn+47gD{)A4D~d@thb!#O38Y)q21-h3&%B@ruPrIx369 z@YofUdu7~#EBzQR4z)`4oM=>v!$TMK+5}uX5L*W8wvdD_fL)3OI+ihS($sRP4Vc#6 zksL<)p9?5tYGvD*_`06y|7p~sjU8PcYgAuVG$SJr(M#GKZs<|6x%-5fcvHi0nyfV) z!|aQ4#w^#6VA^y}nqWTw diff --git a/locale/messages.pot b/locale/text.pot similarity index 53% rename from locale/messages.pot rename to locale/text.pot index 82b3c14..3a74517 100644 --- a/locale/messages.pot +++ b/locale/text.pot @@ -1,84 +1,71 @@ # Translations template for PROJECT. # Copyright (C) 2022 ORGANIZATION # This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2022. +# Automatically generated, 2022. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2022-08-19 16:52+0200\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: it\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Generated-By: Babel 2.10.3\n" +"X-Generator: Poedit 3.1\n" -#: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48 -msgid "label" -msgstr "" - -#: oh-my-git/scenes/card.tscn:125 -msgid "Description" -msgstr "" - -#: oh-my-git/scenes/card.tscn:144 -msgid "0" +msgid "teacher" msgstr "" +#: oh-my-git/scenes/arrow.tscn:35 oh-my-git/scenes/arrow.tscn:48 +#: oh-my-git/scenes/card.tscn:125 oh-my-git/scenes/card.tscn:144 #: oh-my-git/scenes/cards.gd:58 -msgid "YOUR_CARDS" +msgid "These are your cards! Drag them to highlighted areas to play them!" msgstr "" #: oh-my-git/scenes/cards.tscn:34 msgid "Draw new cards" msgstr "" -#: oh-my-git/scenes/cards.tscn:48 -msgid "3" -msgstr "" - -#: oh-my-git/scenes/file_browser.tscn:51 +#: oh-my-git/scenes/cards.tscn:48 oh-my-git/scenes/file_browser.tscn:51 msgid "title" msgstr "" -#: oh-my-git/scenes/file_browser.tscn:64 -msgid "root" -msgstr "" - -#: oh-my-git/scenes/file_browser.tscn:70 -msgid "dir" -msgstr "" - +#: oh-my-git/scenes/file_browser.tscn:64 oh-my-git/scenes/file_browser.tscn:70 #: oh-my-git/scenes/file_browser.tscn:111 oh-my-git/scenes/text_editor.tscn:32 msgid "Save" msgstr "" #: oh-my-git/scenes/file_browser.tscn:126 oh-my-git/scenes/text_editor.tscn:47 -msgid "x" -msgstr "" - #: oh-my-git/scenes/file_browser_item.tscn:118 msgid "filename" msgstr "" #: oh-my-git/scenes/game.gd:3 -msgid "ENGLISH" +msgid "English" msgstr "" #: oh-my-git/scenes/game.gd:3 -msgid "ITALIAN" +msgid "Italian" +msgstr "" + +#: oh-my-git/scenes/level.gd:45 +msgid "" +"Good job, you solved the level!\n" +"Feel free to try a few more things or click 'Next level'." msgstr "" #: oh-my-git/scenes/level.gd:81 -msgid "COMPLETE_GOAL" +msgid "Complete the goal of this level" msgstr "" #: oh-my-git/scenes/level_select.gd:60 -msgid "GOLDEN_BADGE" +msgid "You get a golden badge for each level you solve without using the playing cards! Can you solve them all using the command line?" msgstr "" #: oh-my-git/scenes/level_select.tscn:51 @@ -92,22 +79,15 @@ msgid "To the survey /o/" msgstr "" #: oh-my-git/scenes/level_select.tscn:82 oh-my-git/scenes/main.tscn:214 -msgid "BACK" +msgid "Back" msgstr "" #: oh-my-git/scenes/level_select.tscn:93 oh-my-git/scenes/main.tscn:225 -msgid "RELOAD" -msgstr "" - -#: oh-my-git/scenes/main.tscn:105 -msgid "Level name here!" -msgstr "" - -#: oh-my-git/scenes/main.tscn:124 oh-my-git/scenes/main.tscn:136 -msgid "Level description here!" +msgid "Reload" msgstr "" -#: oh-my-git/scenes/main.tscn:237 +#: oh-my-git/scenes/main.tscn:105 oh-my-git/scenes/main.tscn:124 +#: oh-my-git/scenes/main.tscn:136 oh-my-git/scenes/main.tscn:237 msgid "Cards!" msgstr "" @@ -116,24 +96,18 @@ msgid "Tip!" msgstr "" #: oh-my-git/scenes/main.tscn:275 -msgid "NEXT_LEVEL" +msgid "Next level" msgstr "" #: oh-my-git/scenes/music_button.tscn:12 -msgid "MUSIC" +msgid "Toggle music" msgstr "" #: oh-my-git/scenes/no_git.tscn:33 oh-my-git/scenes/survey.tscn:46 -#: oh-my-git/scenes/title.tscn:25 -msgid "by bleeptrack & blinry" -msgstr "" - -#: oh-my-git/scenes/no_git.tscn:46 oh-my-git/scenes/title.tscn:38 -msgid "Original score by winniehell" -msgstr "" - -#: oh-my-git/scenes/no_git.tscn:65 oh-my-git/scenes/title.tscn:56 -msgid "LEVELS" +#: oh-my-git/scenes/title.tscn:25 oh-my-git/scenes/no_git.tscn:46 +#: oh-my-git/scenes/title.tscn:38 oh-my-git/scenes/no_git.tscn:65 +#: oh-my-git/scenes/title.tscn:56 +msgid "Levels" msgstr "" #: oh-my-git/scenes/no_git.tscn:71 oh-my-git/scenes/title.tscn:62 @@ -141,83 +115,63 @@ msgid "Sandbox" msgstr "" #: oh-my-git/scenes/no_git.tscn:76 -msgid "INSTALL" -msgstr "" - -#: oh-my-git/scenes/no_git.tscn:97 -msgid "GIT_MESSAGE" +msgid "Install" msgstr "" -#: oh-my-git/scenes/node.gd:83 -msgid "DRAG_AROUND" +#: oh-my-git/scenes/no_git.tscn:97 oh-my-git/scenes/node.gd:83 +msgid "You can drag these around with your mouse!" msgstr "" -#: oh-my-git/scenes/node.tscn:55 -msgid "object_id" -msgstr "" - -#: oh-my-git/scenes/notification.gd:5 -msgid "GOT_IT" +#: oh-my-git/scenes/node.tscn:55 oh-my-git/scenes/notification.gd:5 +#: oh-my-git/scenes/notification.tscn:59 +msgid "Got it!" msgstr "" #: oh-my-git/scenes/notification.gd:6 -msgid "INTERESTING" +msgid "Interesting!" msgstr "" #: oh-my-git/scenes/notification.gd:7 -msgid "VERY_USEFULL" +msgid "Very useful!" msgstr "" #: oh-my-git/scenes/notification.gd:8 -msgid "COOL" +msgid "Cool!" msgstr "" #: oh-my-git/scenes/notification.gd:9 -msgid "NICE" +msgid "Nice!" msgstr "" #: oh-my-git/scenes/notification.gd:10 -msgid "THANKS" +msgid "Thanks!" msgstr "" #: oh-my-git/scenes/notification.gd:11 -msgid "WHATEVER" +msgid "Whatever..." msgstr "" #: oh-my-git/scenes/notification.gd:12 -msgid "OKAY" +msgid "Okay!" msgstr "" #: oh-my-git/scenes/notification.gd:13 -msgid "YAY" +msgid "Yay!" msgstr "" #: oh-my-git/scenes/notification.gd:14 -msgid "AWESOME" +msgid "Awesome!" msgstr "" #: oh-my-git/scenes/notification.tscn:37 -msgid "" -"This is a hint! This is a hint! This is a hint! This is a hint! This is a" -" hint! This is a hint! This is a hint! This is a hint! This is a hint!" -msgstr "" - -#: oh-my-git/scenes/notification.tscn:59 -msgid "Got it!" -msgstr "" - -#: oh-my-git/scenes/repository.gd:92 -msgid "INTERACT" -msgstr "" - -#: oh-my-git/scenes/repository.tscn:56 -msgid "Repo name" +msgid "This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint! This is a hint!" msgstr "" -#: oh-my-git/scenes/repository.tscn:67 -msgid "Index:" +#: oh-my-git/scenes/notification.tscn:59 oh-my-git/scenes/repository.gd:92 +msgid "This is the time machine of another person! To interact with it, you need special commands!" msgstr "" +#: oh-my-git/scenes/repository.tscn:56 oh-my-git/scenes/repository.tscn:67 #: oh-my-git/scenes/repository.tscn:78 msgid "Update" msgstr "" @@ -226,11 +180,8 @@ msgstr "" msgid "Hide trees and blobs" msgstr "" -#: oh-my-git/scenes/survey.tscn:34 -msgid "Oh My Git!" -msgstr "" - -#: oh-my-git/scenes/survey.tscn:71 +#: oh-my-git/scenes/survey.tscn:34 oh-my-git/scenes/survey.tscn:71 +#: oh-my-git/scenes/title.tscn:68 msgid "Quit" msgstr "" @@ -242,30 +193,14 @@ msgid "" msgstr "" #: oh-my-git/scenes/terminal.gd:107 -msgid "YOUR_TERMINAL" -msgstr "" - -#: oh-my-git/scenes/terminal.tscn:86 -msgid "git commit --allow-empty -m \"$RANDOM\"" -msgstr "" - -#: oh-my-git/scenes/terminal.tscn:93 -msgid "git checkout HEAD^" +msgid "This is your terminal! All commands are executed here, and you can see their output. You can also type your own commands here!" msgstr "" -#: oh-my-git/scenes/terminal.tscn:100 -msgid "git checkout -b \"$RANDOM\"" -msgstr "" - -#: oh-my-git/scenes/text_editor.tscn:12 +#: oh-my-git/scenes/terminal.tscn:86 oh-my-git/scenes/terminal.tscn:93 +#: oh-my-git/scenes/terminal.tscn:100 oh-my-git/scenes/text_editor.tscn:12 msgid "Text here" msgstr "" -#: oh-my-git/scenes/title.tscn:68 -msgid "QUIT" -msgstr "" - -#: oh-my-git/scenes/title.tscn:74 -msgid "LANGUAGE" +#: oh-my-git/scenes/title.tscn:68 oh-my-git/scenes/title.tscn:74 +msgid "Language" msgstr "" - From ba53de04bd239eaf4d84324ad59911e535e25ab3 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Sat, 20 Aug 2022 12:20:36 +0200 Subject: [PATCH 41/49] change files .po names --- locale/{it_cards.po => it_IT-cards.po} | 0 locale/{it_levels.po => it_IT-levels.po} | 40 ++++++++++++++++++------ locale/{it.po => it_IT-text.po} | 0 3 files changed, 31 insertions(+), 9 deletions(-) rename locale/{it_cards.po => it_IT-cards.po} (100%) rename locale/{it_levels.po => it_IT-levels.po} (95%) rename locale/{it.po => it_IT-text.po} (100%) diff --git a/locale/it_cards.po b/locale/it_IT-cards.po similarity index 100% rename from locale/it_cards.po rename to locale/it_IT-cards.po diff --git a/locale/it_levels.po b/locale/it_IT-levels.po similarity index 95% rename from locale/it_levels.po rename to locale/it_IT-levels.po index 114a86e..36de2ac 100644 --- a/locale/it_levels.po +++ b/locale/it_IT-levels.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: 2022-08-19 16:33+0200\n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2022-08-20 12:13+0200\n" +"Last-Translator: Luca Canali \n" "Language-Team: none\n" "Language: it\n" "MIME-Version: 1.0\n" @@ -70,22 +70,22 @@ msgid "And use `git push` to send it to your teacher!" msgstr "E usa `git push` per inviarlo al tuo insegnante!" msgid "Unexpected Roommates" -msgstr "" +msgstr "Coinquilini inaspettati" msgid "Remove all spider webs." -msgstr "" +msgstr "Rimuovi tutte le ragnatele." msgid "But make sure you keep your bed!" -msgstr "" +msgstr "Ma accertati di lasciare il tuo letto!" msgid "Interior design" -msgstr "" +msgstr "Arredatore" msgid "Add two more pieces of furniture" -msgstr "" +msgstr "Aggiungi altri due mobili" msgid "Make sure the colors match your bed's color." -msgstr "" +msgstr "Assicurati che i colore corrisponda a quello del letto." msgid "Moving through time" msgstr "" @@ -438,6 +438,12 @@ msgid "" "\n" "Remove all the spider webs you can find with the remove card!" msgstr "" +"Il primo giorno nella scuola del viaggio nel tempo! La scuola finisce e " +"rivevi le chiavi della tua stanza.\n" +"Pieno di eccitazione apri la porta per trovare ... ragnatele! Ragnatele " +"ovunque!\n" +"\n" +"Elimina tutte le ragnatele che trovi con la carta cancella!" msgid "" "Now that your room looks tidy, you can start to unpack your stuff. You " @@ -451,6 +457,17 @@ msgid "" "description.\n" "Don't forget to add a color and description to your new furnitures, too!" msgstr "" +"Adesso che la tua camera è riordinata, puoi iniziare a disfare le valige. Ti " +"sei portato due nuovi mobili con te e con un felicità,\n" +"noti che il loro colore si abbina al letto!\n" +"\n" +"Monta i tuoi due mobili giocando la carta touch.\n" +"Quindi dai un nome ai tuoi mobili - puoi scegliere quello che preferisci.\n" +"\n" +"Accertati che il colori corrispondano! Puoi trovare il colore del letto " +"nella sua descrizione.\n" +"Non ti dimenticare anche di aggiungere il colore e la descrizione ai tuoi " +"nuovi mobili!" msgid "" "The yellow boxes are frozen points in time, we call them 'commits'! You can " @@ -910,6 +927,10 @@ msgid "" "\n" " rm *web" msgstr "" +"Nella riga di comando, puoi facilmente cancellare tutti i file -web usando " +"questo comando:\n" +"\n" +" rm *web" msgid "" "To checkout a specific commit, type `git checkout`, then a space, and then " @@ -1030,9 +1051,10 @@ msgstr "" msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" msgstr "" +"Adesso la tua camera è ordinata ed accogliente! E' ora di disfare le valige!" msgid "Don't you immediately feel more at home?" -msgstr "" +msgstr "Non ti senti subito a casa?" msgid "" "Wonderful! Now that you're getting familiar with the time machine, let's " diff --git a/locale/it.po b/locale/it_IT-text.po similarity index 100% rename from locale/it.po rename to locale/it_IT-text.po From 2616c8b9f12bfc6247e77b6a1363079f1d423e3b Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Sun, 21 Aug 2022 09:18:56 +0200 Subject: [PATCH 42/49] Adding renamed file .po --- project.godot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.godot b/project.godot index 0a401a8..fdb8df7 100644 --- a/project.godot +++ b/project.godot @@ -151,7 +151,7 @@ mute={ [locale] -translations=PoolStringArray( "res://locale/it.po", "res://locale/it_cards.po", "res://locale/it_levels.po" ) +translations=PoolStringArray( "res://locale/it_IT-text.po", "res://locale/it_IT-levels.po", "res://locale/it_IT-cards.po" ) locale_filter=[ 0, [ ] ] [network] From 9da07de3a3e8cc33e1451093e7607b367325726b Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 24 Aug 2022 07:06:39 +0200 Subject: [PATCH 43/49] some traductions --- locale/it_IT-levels.po | 45 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/locale/it_IT-levels.po b/locale/it_IT-levels.po index 36de2ac..0de9c41 100644 --- a/locale/it_IT-levels.po +++ b/locale/it_IT-levels.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: 2022-08-20 12:13+0200\n" +"PO-Revision-Date: 2022-08-22 20:29+0200\n" "Last-Translator: Luca Canali \n" "Language-Team: none\n" "Language: it\n" @@ -88,19 +88,19 @@ msgid "Make sure the colors match your bed's color." msgstr "Assicurati che i colore corrisponda a quello del letto." msgid "Moving through time" -msgstr "" +msgstr "Muoversi attraverso il tempo" msgid "Restore sisterly peace." -msgstr "" +msgstr "Ripristina il salvadanaio della sorella" msgid "Make parallel commits" -msgstr "" +msgstr "Crea commit paralleli" msgid "Make sure that the child is happy." -msgstr "" +msgstr "Assicurati che il bambino sia felice." msgid "Make sure that the lion gets something to eat." -msgstr "" +msgstr "Assicurati che il leone abbia qualcosa da mangiare." msgid "Creating branches" msgstr "" @@ -476,6 +476,12 @@ msgid "" "Can you find out what happened here? Then, while on the last commit, edit " "the files to fix the problem, and make a new commit!" msgstr "" +"La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli " +"\"commits\"! Puoi viaggiare tra loro usando la carta \"checkout\"! " +"(Provala!)\n" +"\n" +"Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i " +"files per risolvere il problema ed invia un nuovo commit!" msgid "" "Did you know that creating parallel timelines is perfectly legal and safe? " @@ -484,6 +490,12 @@ msgid "" "Can you find out when things went wrong in this zoo? Then, go back to the " "last good commit and create a parallel universe where everyone is happy!" msgstr "" +"Sai che creare linee temporali parallele è perfettamente legale e sicuro? E' " +"vero!\n" +"\n" +"Puoi trovare cosa c'è di sbagliato in questo zoo? Bene, torna indietro " +"all'ultimo commit buono e creane un universo parallelo dove tutti sono " +"felici!" msgid "" "You were invited to two parties! At one of them, your favorite band is " @@ -938,6 +950,10 @@ msgid "" "\n" "This will insert the commit's unique identifier!" msgstr "" +"Guarda uno specifico commit, digita `git checkout` uno spazio e premi il " +"tasto destro sopra il commit che vuoi!\n" +"\n" +"Questo inserirà l'identificatore unico del commit!" msgid "" "The blue animal represents a concept known as the 'HEAD pointer' in Git: It " @@ -951,6 +967,16 @@ msgid "" "\n" " git checkout HEAD~2" msgstr "" +"L'animale blue rappresenta un concetto conosciuto come \"HEAD pointer\" in " +"Git: Ti mostra qual'è il commit attuale.\n" +"\n" +"Ecco un simpatico trucchetto andare al commit precedente:\n" +"\n" +" git checkout HEAD^\n" +"\n" +"Puoi anche andare indietro di 2 commit digitando, pre esempio:\n" +"\n" +" git checkout HEAD~2" msgid "" "Branches also make it really easy to travel between different places using " @@ -1060,6 +1086,8 @@ msgid "" "Wonderful! Now that you're getting familiar with the time machine, let's " "look at some more complicated situations..." msgstr "" +"Stupendo! Adesso hai più famigliarità con la macchina del tempo, vediamo " +"situazioni più complicate... " msgid "" "Whew, good job! This seems like a *much* better outcome.\n" @@ -1068,6 +1096,11 @@ msgid "" "\n" "If you're ready, our next mission is already waiting..." msgstr "" +"Whew, ottimo lavoro! Questo sembra un risultato molto migliore.\n" +"\n" +"Sentiti libero di aggiungere altre line temporali parallele o allungarle.\n" +"\n" +"Se sei pronto, la prossima missione ci sta aspettando..." msgid "" "Now you can travel between those branches easily (using `git checkout`) - " From 5b28efc48157bac1a54c950b5c9add4951b9ba75 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 24 Aug 2022 13:35:20 +0200 Subject: [PATCH 44/49] Some translations --- locale/it_IT-levels.po | 114 +++++++++++++++++++++++++---------------- 1 file changed, 71 insertions(+), 43 deletions(-) diff --git a/locale/it_IT-levels.po b/locale/it_IT-levels.po index 0de9c41..0f5e4b4 100644 --- a/locale/it_IT-levels.po +++ b/locale/it_IT-levels.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: 2022-08-22 20:29+0200\n" +"PO-Revision-Date: 2022-08-24 12:17+0200\n" "Last-Translator: Luca Canali \n" "Language-Team: none\n" "Language: it\n" @@ -91,7 +91,7 @@ msgid "Moving through time" msgstr "Muoversi attraverso il tempo" msgid "Restore sisterly peace." -msgstr "Ripristina il salvadanaio della sorella" +msgstr "Ripristina il salvadanaio della sorella." msgid "Make parallel commits" msgstr "Crea commit paralleli" @@ -103,147 +103,158 @@ msgid "Make sure that the lion gets something to eat." msgstr "Assicurati che il leone abbia qualcosa da mangiare." msgid "Creating branches" -msgstr "" +msgstr "Creare branch" msgid "Create a branch called 'birthday' that points to the birthday timeline." msgstr "" +"Creare una branch chiamata 'birthday' che punti alla timeline del compleanno." msgid "Create a branch called 'concert' that points to the concert timeline." msgstr "" +"Crare una branch chiamata 'concert' che punti alla timeline del concerto." msgid "Branches grow with you!" -msgstr "" +msgstr "Le branch crescono con te!" msgid "" "Travel directly to the last yellow commit of the birthday timeline, make a " "change to 'you', and make a commit" msgstr "" +"VIaggia direttamente nell'ultimo commit della linea temporale del " +"compleanno, fai un cambiamento in 'you' e crea un commit" msgid "" "Travel to the blue 'concert' branch, make a change to 'you', and a commit." msgstr "" +"Viaggia nella branch blue 'concert', fai un cambiamento in 'you', e un " +"commit." msgid "Deleting branches" -msgstr "" +msgstr "Cancella le branch" msgid "Find the bad branches and delete them. Keep only the best one." -msgstr "" +msgstr "Trova le brach sbagliate e cancellale. Tieni solo la migliore." msgid "Moving branches around" -msgstr "" +msgstr "Sposta le branch in giro" msgid "Did you eat a baguette on the baguette branch?" -msgstr "" +msgstr "Hai mangiato una baguette nella branch 'baguette'?" msgid "Did you drink a coffee on the coffee branch?" -msgstr "" +msgstr "Hai bevuto un caffe nella branch 'coffee'?" msgid "Did you eat a donut on the donut branch?" -msgstr "" +msgstr "Hai mangiato una ciambella nella branch 'donut'?" msgid "Merging timelines" -msgstr "" +msgstr "Unisci le line temporali" msgid "" "Build a situation where you consumed a baguette, a coffee, *and* a donut." msgstr "" +"Crea una condizione dove tu consumi una baguette, un caffe *e* una ciambella." msgid "Be on a merge commit." -msgstr "" +msgstr "Crea (e spostati su) un commit di unione." msgid "Contradictions" -msgstr "" +msgstr "Contradizioni" msgid "Make a breakfast compromise in the 'main' branch." -msgstr "" +msgstr "Fai un compromesso per la colazione nella branch 'main'." msgid "Step by step" -msgstr "" +msgstr "Passo dopo passo" msgid "Pick the timeline that's clearer, and make the alarm go off!" -msgstr "" +msgstr "Scegli la linea temporale piu' chiara e fai suonare l'allarme!" msgid "Add new files to the index" -msgstr "" +msgstr "Aggiungi nuovi file all'indice" msgid "Add the candle." -msgstr "" +msgstr "Aggiungi la candela." msgid "Make a commit." msgstr "Crea un commit." msgid "Update files in the index" -msgstr "" +msgstr "Aggiorna i file nell'indice" msgid "Make a change to the candle." -msgstr "" +msgstr "Fai un cambiamento nella candela." msgid "Resetting files in the index" -msgstr "" +msgstr "Resetta i file nell'indice" msgid "Reset the changes in the green and blue candles!" -msgstr "" +msgstr "Resetta i cambiamenti nelle candele verdi e blue!" msgid "And make a commit!" -msgstr "" +msgstr "E crea un commit!" msgid "Adding changes step by step" -msgstr "" +msgstr "Aggiungi i cambiamenti passo dopo passo" msgid "" "Make changes to all three objects, to form a logical sequence of events!" msgstr "" +"Crea cambiamenti in tutti e tre gli oggetti, da una sequenza logica di " +"eventi!" msgid "Only add one of these changes!" -msgstr "" +msgstr "Aggiungi solo uno di questi cambiamenti!" msgid "And make a commit." -msgstr "" +msgstr "E crea un commit." msgid "Make a second commit that only records a single change." -msgstr "" +msgstr "Crea un secondo commit con solo i record con un singolo cambiamento." msgid "And a third one." -msgstr "" +msgstr "E un terzo." msgid "Friend" -msgstr "" +msgstr "Amici" msgid "Got the second line from your friend" -msgstr "" +msgstr "Ottenuta la seconda linea dal tuo amico" msgid "Got the fourth line from your friend." -msgstr "" +msgstr "Ottenuta la quarta linea dal tuo amico." msgid "The friend got a third line from you" -msgstr "" +msgstr "Il tuo amico ti ha dato la terza linea" msgid "The friend got a fifth line from you" -msgstr "" +msgstr "Il tuo amico ti ha dato la quinta linea" msgid "Problems" -msgstr "" +msgstr "Problemi" msgid "Commit your local changes." -msgstr "" +msgstr "Committa i tuoi combiamenti." msgid "Look at your friend's suggestion, make a compromise, and push it back." msgstr "" +"Guarda i suggerimenti del tuo amico, fai un compromesso, e rimadalo in " +"dietro." msgid "Rebasing" msgstr "" msgid "Order all tree branches into one and move the main branch ref" -msgstr "" +msgstr "Ordina le tre branch in una e muovi il riferimeto alla branch 'main'" msgid "Reordering events" -msgstr "" +msgstr "Riordinare gli eventi" msgid "Reorder the commits to dress yourself in the correct way" -msgstr "" +msgstr "Riordina i commit per vestirti nell'ordine giusto" msgid "Restore a deleted file" -msgstr "" +msgstr "Recupera un file cancellato" msgid "Restore the essay to contain 'important content'" msgstr "" @@ -506,6 +517,13 @@ msgid "" "To make it easier to tell which timeline is which, you can create time " "portals! (We call these 'branches'.)" msgstr "" +"Sei stato invitato a due feste! In una di queste, suona la tua band " +"preferita - e l'altra e' il compleanno del tuo migliore amico. Dove dovresti " +"andare? Non ti preoccupare - sei un agente del tempo in addestramento, tu " +"puoi andare ad entrambe le feste!\n" +"\n" +"Per rendere piu' facile capire quale sequenza temporale e', puoi creare dei " +"portali! ( Che chiamiamo 'branches'.)" msgid "" "Note that there are two options to 'travel to the end of a timeline':\n" @@ -983,6 +1001,9 @@ msgid "" "the command line! As soon as you have a branch called 'birthday', you can " "type `git checkout birthday` to travel to it!" msgstr "" +"Le branch rendono molto facile viaggiare tra luoghi diversi anche usando la " +"linea di comando! Quando hai una branch chiamata 'birthday', puoi digitare " +"`git checkout bithday` per raggiungerlo!" msgid "" "To travel to a branch, type `git checkout name_of_the_branch`.\n" @@ -990,11 +1011,18 @@ msgid "" "And to travel to the last commit, type `git checkout --detach " "name_of_the_branch`." msgstr "" +"Per viaggiare in una branch, digita `git checkout nome_della_branch`.\n" +"\n" +"Per andare all'ultimo commit, digita `git checkout --detach " +"nome_della_branch`." msgid "" "You can use tab completion in the terminal! Start typing a filename, then " "press the tab key to complete its name. This will often save you some time!" msgstr "" +"Puoi usare la tab completition nel terminale! Inizia a digitare il nome del " +"file, quindi permi il tasto tab per completare il suo nome. Questo ti " +"permettera' di risparmiare tempo!" #: CONGRAT msgid "" @@ -1087,7 +1115,7 @@ msgid "" "look at some more complicated situations..." msgstr "" "Stupendo! Adesso hai più famigliarità con la macchina del tempo, vediamo " -"situazioni più complicate... " +"situazioni più complicate..." msgid "" "Whew, good job! This seems like a *much* better outcome.\n" @@ -1146,13 +1174,13 @@ msgid "Yay, you got your changes back! :)" msgstr "" msgid "All clear! :)" -msgstr "" +msgstr "Tutto chiaro! :)" msgid "Stashed changes are in a new branch! :)" msgstr "" msgid "Nice! You tagged your first commit :)" -msgstr "" +msgstr "Bello! Hai taggato il tuo primo commit :)" msgid "Well done :)" -msgstr "" +msgstr "Ben fatto :)" From 8cb71aa5b865fd36716634c8817733b2505d544e Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 31 Aug 2022 08:44:55 +0200 Subject: [PATCH 45/49] Presets upgrade --- export_presets.cfg | 262 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 261 insertions(+), 1 deletion(-) diff --git a/export_presets.cfg b/export_presets.cfg index 49998cc..4084d47 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -45,12 +45,54 @@ application/info="" application/icon="" application/identifier="" application/signature="" +application/app_category="Games" application/short_version="1.0" application/version="1.0" application/copyright="" display/high_res=false -privacy/camera_usage_description="" privacy/microphone_usage_description="" +privacy/camera_usage_description="" +privacy/location_usage_description="" +privacy/address_book_usage_description="" +privacy/calendar_usage_description="" +privacy/photos_library_usage_description="" +privacy/desktop_folder_usage_description="" +privacy/documents_folder_usage_description="" +privacy/downloads_folder_usage_description="" +privacy/network_volumes_usage_description="" +privacy/removable_volumes_usage_description="" +codesign/enable=true +codesign/identity="" +codesign/timestamp=true +codesign/hardened_runtime=true +codesign/replace_existing_signature=true +codesign/entitlements/custom_file="" +codesign/entitlements/allow_jit_code_execution=false +codesign/entitlements/allow_unsigned_executable_memory=false +codesign/entitlements/allow_dyld_environment_variables=false +codesign/entitlements/disable_library_validation=false +codesign/entitlements/audio_input=false +codesign/entitlements/camera=false +codesign/entitlements/location=false +codesign/entitlements/address_book=false +codesign/entitlements/calendars=false +codesign/entitlements/photos_library=false +codesign/entitlements/apple_events=false +codesign/entitlements/debugging=false +codesign/entitlements/app_sandbox/enabled=false +codesign/entitlements/app_sandbox/network_server=false +codesign/entitlements/app_sandbox/network_client=false +codesign/entitlements/app_sandbox/device_usb=false +codesign/entitlements/app_sandbox/device_bluetooth=false +codesign/entitlements/app_sandbox/files_downloads=0 +codesign/entitlements/app_sandbox/files_pictures=0 +codesign/entitlements/app_sandbox/files_music=0 +codesign/entitlements/app_sandbox/files_movies=0 +codesign/custom_options=PoolStringArray( ) +notarization/enable=false +notarization/apple_id_name="" +notarization/apple_id_password="" +notarization/apple_team_id="" texture_format/s3tc=true texture_format/etc=false texture_format/etc2=false @@ -80,6 +122,7 @@ texture_format/etc=false texture_format/etc2=false texture_format/no_bptc_fallbacks=true codesign/enable=false +codesign/identity_type=0 codesign/identity="" codesign/password="" codesign/timestamp=true @@ -87,6 +130,7 @@ codesign/timestamp_server_url="" codesign/digest_algorithm=1 codesign/description="" codesign/custom_options=PoolStringArray( ) +application/modify_resources=true application/icon="" application/file_version="" application/product_version="" @@ -116,7 +160,223 @@ custom_template/release="" variant/export_type=0 vram_texture_compression/for_desktop=true vram_texture_compression/for_mobile=false +html/export_icon=true html/custom_html_shell="" html/head_include="" html/canvas_resize_policy=2 +html/focus_canvas_on_start=true html/experimental_virtual_keyboard=false +progressive_web_app/enabled=false +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=0 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color( 0, 0, 0, 1 ) + +[preset.4] + +name="Android" +platform="Android" +runnable=true +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +script_export_mode=1 +script_encryption_key="" + +[preset.4.options] + +custom_template/debug="" +custom_template/release="" +custom_build/use_custom_build=false +custom_build/export_format=0 +custom_build/min_sdk="" +custom_build/target_sdk="" +architectures/armeabi-v7a=true +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +keystore/debug="" +keystore/debug_user="" +keystore/debug_password="" +keystore/release="" +keystore/release_user="" +keystore/release_password="" +one_click_deploy/clear_previous_install=false +version/code=1 +version/name="1.0" +package/unique_name="org.godotengine.$genname" +package/name="" +package/signed=true +package/classify_as_game=true +package/retain_data_on_uninstall=false +package/exclude_from_recents=false +launcher_icons/main_192x192="" +launcher_icons/adaptive_foreground_432x432="" +launcher_icons/adaptive_background_432x432="" +graphics/opengl_debug=false +xr_features/xr_mode=0 +xr_features/hand_tracking=0 +xr_features/hand_tracking_frequency=0 +xr_features/passthrough=0 +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +user_data_backup/allow=false +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PoolStringArray( ) +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/manage_external_storage=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false From e802402b4868ff8c93d5b74d18510721f8f032e0 Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 31 Aug 2022 08:53:20 +0200 Subject: [PATCH 46/49] organized the local folder into subfolders containing the various localizations as suggested in the post https://github.com/git-learning-game/oh-my-git/pull/146#issuecomment-1230965522 --- locale/{ => it_IT}/it_IT-cards.po | 0 locale/{ => it_IT}/it_IT-levels.po | 0 locale/{ => it_IT}/it_IT-text.po | 0 project.godot | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) rename locale/{ => it_IT}/it_IT-cards.po (100%) rename locale/{ => it_IT}/it_IT-levels.po (100%) rename locale/{ => it_IT}/it_IT-text.po (100%) diff --git a/locale/it_IT-cards.po b/locale/it_IT/it_IT-cards.po similarity index 100% rename from locale/it_IT-cards.po rename to locale/it_IT/it_IT-cards.po diff --git a/locale/it_IT-levels.po b/locale/it_IT/it_IT-levels.po similarity index 100% rename from locale/it_IT-levels.po rename to locale/it_IT/it_IT-levels.po diff --git a/locale/it_IT-text.po b/locale/it_IT/it_IT-text.po similarity index 100% rename from locale/it_IT-text.po rename to locale/it_IT/it_IT-text.po diff --git a/project.godot b/project.godot index fdb8df7..f349d1d 100644 --- a/project.godot +++ b/project.godot @@ -151,7 +151,7 @@ mute={ [locale] -translations=PoolStringArray( "res://locale/it_IT-text.po", "res://locale/it_IT-levels.po", "res://locale/it_IT-cards.po" ) +translations=PoolStringArray( "res://locale/it_IT/it_IT-cards.po", "res://locale/it_IT/it_IT-levels.po", "res://locale/it_IT/it_IT-text.po" ) locale_filter=[ 0, [ ] ] [network] From af776bd3c26b0f9190308dadd8880ad1a8ed171d Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 13 Sep 2022 14:40:40 +0200 Subject: [PATCH 47/49] deleted the .po level files and added dir italian levels in dir levels and made some changes to the scripts --- levels/{ => en}/bisect/bisect | 2 +- levels/{ => en}/bisect/sequence | 0 levels/{ => en}/branches/branch-create | 0 levels/{ => en}/branches/branch-remove | 0 levels/{ => en}/branches/checkout-commit | 2 +- levels/{ => en}/branches/fork | 0 levels/{ => en}/branches/grow | 0 levels/{ => en}/branches/reorder | 0 levels/{ => en}/branches/sequence | 0 levels/{ => en}/changing-the-past/rebase | 0 levels/{ => en}/changing-the-past/reorder | 0 levels/{ => en}/changing-the-past/sequence | 0 levels/{ => en}/files/files-add | 0 levels/{ => en}/files/files-delete | 0 levels/{ => en}/files/sequence | 0 levels/{ => en}/index/add | 0 levels/{ => en}/index/change | 0 levels/{ => en}/index/checkout | 0 levels/{ => en}/index/compare | 0 levels/{ => en}/index/new | 0 levels/{ => en}/index/reset | 0 levels/{ => en}/index/rm | 0 levels/{ => en}/index/sequence | 0 levels/{ => en}/index/steps | 0 levels/{ => en}/intro/cli | 0 levels/{ => en}/intro/commit | 0 levels/{ => en}/intro/copies | 0 levels/{ => en}/intro/init | 2 +- levels/{ => en}/intro/remote | 0 levels/{ => en}/intro/risky | 2 +- levels/{ => en}/intro/sequence | 0 levels/{ => en}/intro/who-are-you | 0 levels/{ => en}/low-level/basics | 0 levels/{ => en}/low-level/blob-create | 0 levels/{ => en}/low-level/blob-remove | 0 levels/{ => en}/low-level/commit-create | 0 levels/{ => en}/low-level/commit-parents | 0 levels/{ => en}/low-level/commit-rhombus | 0 levels/{ => en}/low-level/index-add | 0 levels/{ => en}/low-level/index-remove | 0 levels/{ => en}/low-level/index-update | 0 levels/{ => en}/low-level/puzzle-apocalypse | 0 .../{ => en}/low-level/puzzle-precious-blob | 0 .../low-level/puzzle-trees-all-the-way-down | 0 levels/{ => en}/low-level/ref-create | 0 levels/{ => en}/low-level/ref-move | 0 levels/{ => en}/low-level/ref-remove | 0 levels/{ => en}/low-level/sequence | 0 levels/{ => en}/low-level/symref-create | 0 levels/{ => en}/low-level/symref-no-deref | 0 levels/{ => en}/low-level/tree-create | 0 levels/{ => en}/low-level/tree-nested | 0 levels/{ => en}/low-level/tree-read | 0 levels/{ => en}/low-level/welcome | 0 levels/{ => en}/merge/conflict | 0 levels/{ => en}/merge/merge | 0 levels/{ => en}/merge/merge-abort | 0 levels/{ => en}/merge/sequence | 0 levels/{ => en}/remotes/friend | 0 levels/{ => en}/remotes/problems | 0 levels/{ => en}/remotes/sequence | 0 levels/{ => en}/sandbox/empty | 0 levels/{ => en}/sandbox/remote | 0 levels/{ => en}/sandbox/sequence | 0 levels/{ => en}/sandbox/three-commits | 0 levels/{ => en}/sequence | 0 levels/{ => en}/shit-happens/bad-commit | 0 .../shit-happens/pushed-something-broken | 0 levels/{ => en}/shit-happens/reflog | 0 levels/{ => en}/shit-happens/restore-a-file | 0 .../shit-happens/restore-a-file-from-the-past | 0 levels/{ => en}/shit-happens/sequence | 0 levels/{ => en}/stash/sequence | 0 levels/{ => en}/stash/stash | 0 levels/{ => en}/stash/stash-branch | 0 levels/{ => en}/stash/stash-clear | 0 levels/{ => en}/stash/stash-merge | 0 levels/{ => en}/stash/stash-pop | 0 levels/{ => en}/tags/add-tag | 0 levels/{ => en}/tags/add-tag-later | 0 levels/{ => en}/tags/remote-tag | 0 levels/{ => en}/tags/remove-tag | 0 levels/{ => en}/tags/sequence | 0 levels/{ => en}/unused/checkout | 0 levels/{ => en}/unused/clone | 0 levels/{ => en}/unused/commit | 0 levels/{ => en}/unused/commit-a | 0 levels/{ => en}/unused/fetch | 0 levels/{ => en}/unused/files-move | 0 levels/{ => en}/unused/index-mv | 0 levels/{ => en}/unused/init | 0 levels/{ => en}/unused/pull-push | 0 levels/{ => en}/unused/remotes-add | 0 levels/{ => en}/unused/remotes-delete | 0 levels/{ => en}/unused/restore | 0 levels/{ => en}/unused/split | 0 levels/{ => en}/unused/steps | 0 levels/{ => en}/unused/who-are-you | 0 levels/{ => en}/workflows/gitignore | 0 levels/{ => en}/workflows/pr | 3 +- levels/{ => en}/workflows/sequence | 0 levels/it/bisect/bisect | 43 + levels/it/bisect/sequence | 1 + levels/it/branches/branch-create | 44 + levels/it/branches/branch-remove | 47 + levels/it/branches/checkout-commit | 43 + levels/it/branches/fork | 65 + levels/it/branches/grow | 48 + levels/it/branches/reorder | 89 ++ levels/it/branches/sequence | 6 + levels/it/changing-the-past/rebase | 86 ++ levels/it/changing-the-past/reorder | 77 ++ levels/it/changing-the-past/sequence | 2 + levels/it/files/files-add | 31 + levels/it/files/files-delete | 36 + levels/it/files/sequence | 3 + levels/it/index/#sequence# | 5 + levels/it/index/add | 38 + levels/it/index/change | 31 + levels/it/index/checkout | 25 + levels/it/index/compare | 51 + levels/it/index/new | 28 + levels/it/index/reset | 37 + levels/it/index/rm | 24 + levels/it/index/sequence | 5 + levels/it/index/steps | 53 + levels/it/intro/cli | 27 + levels/it/intro/commit | 32 + levels/it/intro/copies | 42 + levels/it/intro/init | 24 + levels/it/intro/remote | 52 + levels/it/intro/risky | 42 + levels/it/intro/sequence | 6 + levels/it/intro/who-are-you | 38 + levels/it/low-level/basics | 26 + levels/it/low-level/blob-create | 38 + levels/it/low-level/blob-remove | 27 + levels/it/low-level/commit-create | 37 + levels/it/low-level/commit-parents | 31 + levels/it/low-level/commit-rhombus | 30 + levels/it/low-level/index-add | 37 + levels/it/low-level/index-remove | 29 + levels/it/low-level/index-update | 33 + levels/it/low-level/puzzle-apocalypse | 41 + levels/it/low-level/puzzle-precious-blob | 28 + .../low-level/puzzle-trees-all-the-way-down | 34 + levels/it/low-level/ref-create | 42 + levels/it/low-level/ref-move | 41 + levels/it/low-level/ref-remove | 41 + levels/it/low-level/sequence | 18 + levels/it/low-level/symref-create | 21 + levels/it/low-level/symref-no-deref | 46 + levels/it/low-level/tree-create | 35 + levels/it/low-level/tree-nested | 38 + levels/it/low-level/tree-read | 51 + levels/it/low-level/welcome | 33 + levels/it/merge/conflict | 47 + levels/it/merge/merge | 82 ++ levels/it/merge/merge-abort | 54 + levels/it/merge/sequence | 3 + levels/it/remotes/friend | 47 + levels/it/remotes/problems | 33 + levels/it/remotes/sequence | 2 + levels/it/sandbox/empty | 7 + levels/it/sandbox/remote | 22 + levels/it/sandbox/sequence | 3 + levels/it/sandbox/three-commits | 26 + levels/it/sequence | 13 + levels/it/shit-happens/bad-commit | 31 + .../it/shit-happens/pushed-something-broken | 54 + levels/it/shit-happens/reflog | 26 + levels/it/shit-happens/restore-a-file | 22 + .../shit-happens/restore-a-file-from-the-past | 22 + levels/it/shit-happens/sequence | 5 + levels/it/stash/sequence | 5 + levels/it/stash/stash | 45 + levels/it/stash/stash-branch | 47 + levels/it/stash/stash-clear | 57 + levels/it/stash/stash-merge | 53 + levels/it/stash/stash-pop | 46 + levels/it/tags/add-tag | 53 + levels/it/tags/add-tag-later | 50 + levels/it/tags/remote-tag | 58 + levels/it/tags/remove-tag | 53 + levels/it/tags/sequence | 4 + levels/it/unused/checkout | 31 + levels/it/unused/clone | 20 + levels/it/unused/commit | 27 + levels/it/unused/commit-a | 26 + levels/it/unused/fetch | 35 + levels/it/unused/files-move | 27 + levels/it/unused/index-mv | 26 + levels/it/unused/init | 14 + levels/it/unused/pull-push | 51 + levels/it/unused/remotes-add | 33 + levels/it/unused/remotes-delete | 23 + levels/it/unused/restore | 28 + levels/it/unused/split | 26 + levels/it/unused/steps | 23 + levels/it/unused/who-are-you | 23 + levels/it/workflows/gitignore | 18 + levels/it/workflows/pr | 25 + levels/it/workflows/sequence | 1 + locale/it_IT/it_IT-levels.po | 1186 ----------------- locale/levels.pot | 1037 -------------- scenes/Language.gd | 1 + scenes/chapter.gd | 6 +- scenes/game.gd | 3 +- scenes/level.gd | 8 +- scenes/levels.gd | 7 +- 210 files changed, 3381 insertions(+), 2243 deletions(-) rename levels/{ => en}/bisect/bisect (97%) rename levels/{ => en}/bisect/sequence (100%) rename levels/{ => en}/branches/branch-create (100%) rename levels/{ => en}/branches/branch-remove (100%) rename levels/{ => en}/branches/checkout-commit (89%) rename levels/{ => en}/branches/fork (100%) rename levels/{ => en}/branches/grow (100%) rename levels/{ => en}/branches/reorder (100%) rename levels/{ => en}/branches/sequence (100%) rename levels/{ => en}/changing-the-past/rebase (100%) rename levels/{ => en}/changing-the-past/reorder (100%) rename levels/{ => en}/changing-the-past/sequence (100%) rename levels/{ => en}/files/files-add (100%) rename levels/{ => en}/files/files-delete (100%) rename levels/{ => en}/files/sequence (100%) rename levels/{ => en}/index/add (100%) rename levels/{ => en}/index/change (100%) rename levels/{ => en}/index/checkout (100%) rename levels/{ => en}/index/compare (100%) rename levels/{ => en}/index/new (100%) rename levels/{ => en}/index/reset (100%) rename levels/{ => en}/index/rm (100%) rename levels/{ => en}/index/sequence (100%) rename levels/{ => en}/index/steps (100%) rename levels/{ => en}/intro/cli (100%) rename levels/{ => en}/intro/commit (100%) rename levels/{ => en}/intro/copies (100%) rename levels/{ => en}/intro/init (84%) rename levels/{ => en}/intro/remote (100%) rename levels/{ => en}/intro/risky (94%) rename levels/{ => en}/intro/sequence (100%) rename levels/{ => en}/intro/who-are-you (100%) rename levels/{ => en}/low-level/basics (100%) rename levels/{ => en}/low-level/blob-create (100%) rename levels/{ => en}/low-level/blob-remove (100%) rename levels/{ => en}/low-level/commit-create (100%) rename levels/{ => en}/low-level/commit-parents (100%) rename levels/{ => en}/low-level/commit-rhombus (100%) rename levels/{ => en}/low-level/index-add (100%) rename levels/{ => en}/low-level/index-remove (100%) rename levels/{ => en}/low-level/index-update (100%) rename levels/{ => en}/low-level/puzzle-apocalypse (100%) rename levels/{ => en}/low-level/puzzle-precious-blob (100%) rename levels/{ => en}/low-level/puzzle-trees-all-the-way-down (100%) rename levels/{ => en}/low-level/ref-create (100%) rename levels/{ => en}/low-level/ref-move (100%) rename levels/{ => en}/low-level/ref-remove (100%) rename levels/{ => en}/low-level/sequence (100%) rename levels/{ => en}/low-level/symref-create (100%) rename levels/{ => en}/low-level/symref-no-deref (100%) rename levels/{ => en}/low-level/tree-create (100%) rename levels/{ => en}/low-level/tree-nested (100%) rename levels/{ => en}/low-level/tree-read (100%) rename levels/{ => en}/low-level/welcome (100%) rename levels/{ => en}/merge/conflict (100%) rename levels/{ => en}/merge/merge (100%) rename levels/{ => en}/merge/merge-abort (100%) rename levels/{ => en}/merge/sequence (100%) rename levels/{ => en}/remotes/friend (100%) rename levels/{ => en}/remotes/problems (100%) rename levels/{ => en}/remotes/sequence (100%) rename levels/{ => en}/sandbox/empty (100%) rename levels/{ => en}/sandbox/remote (100%) rename levels/{ => en}/sandbox/sequence (100%) rename levels/{ => en}/sandbox/three-commits (100%) rename levels/{ => en}/sequence (100%) rename levels/{ => en}/shit-happens/bad-commit (100%) rename levels/{ => en}/shit-happens/pushed-something-broken (100%) rename levels/{ => en}/shit-happens/reflog (100%) rename levels/{ => en}/shit-happens/restore-a-file (100%) rename levels/{ => en}/shit-happens/restore-a-file-from-the-past (100%) rename levels/{ => en}/shit-happens/sequence (100%) rename levels/{ => en}/stash/sequence (100%) rename levels/{ => en}/stash/stash (100%) rename levels/{ => en}/stash/stash-branch (100%) rename levels/{ => en}/stash/stash-clear (100%) rename levels/{ => en}/stash/stash-merge (100%) rename levels/{ => en}/stash/stash-pop (100%) rename levels/{ => en}/tags/add-tag (100%) rename levels/{ => en}/tags/add-tag-later (100%) rename levels/{ => en}/tags/remote-tag (100%) rename levels/{ => en}/tags/remove-tag (100%) rename levels/{ => en}/tags/sequence (100%) rename levels/{ => en}/unused/checkout (100%) rename levels/{ => en}/unused/clone (100%) rename levels/{ => en}/unused/commit (100%) rename levels/{ => en}/unused/commit-a (100%) rename levels/{ => en}/unused/fetch (100%) rename levels/{ => en}/unused/files-move (100%) rename levels/{ => en}/unused/index-mv (100%) rename levels/{ => en}/unused/init (100%) rename levels/{ => en}/unused/pull-push (100%) rename levels/{ => en}/unused/remotes-add (100%) rename levels/{ => en}/unused/remotes-delete (100%) rename levels/{ => en}/unused/restore (100%) rename levels/{ => en}/unused/split (100%) rename levels/{ => en}/unused/steps (100%) rename levels/{ => en}/unused/who-are-you (100%) rename levels/{ => en}/workflows/gitignore (100%) rename levels/{ => en}/workflows/pr (65%) rename levels/{ => en}/workflows/sequence (100%) create mode 100644 levels/it/bisect/bisect create mode 100644 levels/it/bisect/sequence create mode 100644 levels/it/branches/branch-create create mode 100644 levels/it/branches/branch-remove create mode 100644 levels/it/branches/checkout-commit create mode 100644 levels/it/branches/fork create mode 100644 levels/it/branches/grow create mode 100644 levels/it/branches/reorder create mode 100644 levels/it/branches/sequence create mode 100644 levels/it/changing-the-past/rebase create mode 100644 levels/it/changing-the-past/reorder create mode 100644 levels/it/changing-the-past/sequence create mode 100644 levels/it/files/files-add create mode 100644 levels/it/files/files-delete create mode 100644 levels/it/files/sequence create mode 100644 levels/it/index/#sequence# create mode 100644 levels/it/index/add create mode 100644 levels/it/index/change create mode 100644 levels/it/index/checkout create mode 100644 levels/it/index/compare create mode 100644 levels/it/index/new create mode 100644 levels/it/index/reset create mode 100644 levels/it/index/rm create mode 100644 levels/it/index/sequence create mode 100644 levels/it/index/steps create mode 100644 levels/it/intro/cli create mode 100644 levels/it/intro/commit create mode 100644 levels/it/intro/copies create mode 100644 levels/it/intro/init create mode 100644 levels/it/intro/remote create mode 100644 levels/it/intro/risky create mode 100644 levels/it/intro/sequence create mode 100644 levels/it/intro/who-are-you create mode 100644 levels/it/low-level/basics create mode 100644 levels/it/low-level/blob-create create mode 100644 levels/it/low-level/blob-remove create mode 100644 levels/it/low-level/commit-create create mode 100644 levels/it/low-level/commit-parents create mode 100644 levels/it/low-level/commit-rhombus create mode 100644 levels/it/low-level/index-add create mode 100644 levels/it/low-level/index-remove create mode 100644 levels/it/low-level/index-update create mode 100644 levels/it/low-level/puzzle-apocalypse create mode 100644 levels/it/low-level/puzzle-precious-blob create mode 100644 levels/it/low-level/puzzle-trees-all-the-way-down create mode 100644 levels/it/low-level/ref-create create mode 100644 levels/it/low-level/ref-move create mode 100644 levels/it/low-level/ref-remove create mode 100644 levels/it/low-level/sequence create mode 100644 levels/it/low-level/symref-create create mode 100644 levels/it/low-level/symref-no-deref create mode 100644 levels/it/low-level/tree-create create mode 100644 levels/it/low-level/tree-nested create mode 100644 levels/it/low-level/tree-read create mode 100644 levels/it/low-level/welcome create mode 100644 levels/it/merge/conflict create mode 100644 levels/it/merge/merge create mode 100644 levels/it/merge/merge-abort create mode 100644 levels/it/merge/sequence create mode 100644 levels/it/remotes/friend create mode 100644 levels/it/remotes/problems create mode 100644 levels/it/remotes/sequence create mode 100644 levels/it/sandbox/empty create mode 100644 levels/it/sandbox/remote create mode 100644 levels/it/sandbox/sequence create mode 100644 levels/it/sandbox/three-commits create mode 100644 levels/it/sequence create mode 100644 levels/it/shit-happens/bad-commit create mode 100644 levels/it/shit-happens/pushed-something-broken create mode 100644 levels/it/shit-happens/reflog create mode 100644 levels/it/shit-happens/restore-a-file create mode 100644 levels/it/shit-happens/restore-a-file-from-the-past create mode 100644 levels/it/shit-happens/sequence create mode 100644 levels/it/stash/sequence create mode 100644 levels/it/stash/stash create mode 100644 levels/it/stash/stash-branch create mode 100644 levels/it/stash/stash-clear create mode 100644 levels/it/stash/stash-merge create mode 100644 levels/it/stash/stash-pop create mode 100644 levels/it/tags/add-tag create mode 100644 levels/it/tags/add-tag-later create mode 100644 levels/it/tags/remote-tag create mode 100644 levels/it/tags/remove-tag create mode 100644 levels/it/tags/sequence create mode 100644 levels/it/unused/checkout create mode 100644 levels/it/unused/clone create mode 100644 levels/it/unused/commit create mode 100644 levels/it/unused/commit-a create mode 100644 levels/it/unused/fetch create mode 100644 levels/it/unused/files-move create mode 100644 levels/it/unused/index-mv create mode 100644 levels/it/unused/init create mode 100644 levels/it/unused/pull-push create mode 100644 levels/it/unused/remotes-add create mode 100644 levels/it/unused/remotes-delete create mode 100644 levels/it/unused/restore create mode 100644 levels/it/unused/split create mode 100644 levels/it/unused/steps create mode 100644 levels/it/unused/who-are-you create mode 100644 levels/it/workflows/gitignore create mode 100644 levels/it/workflows/pr create mode 100644 levels/it/workflows/sequence delete mode 100644 locale/it_IT/it_IT-levels.po delete mode 100644 locale/levels.pot diff --git a/levels/bisect/bisect b/levels/en/bisect/bisect similarity index 97% rename from levels/bisect/bisect rename to levels/en/bisect/bisect index cf7bf6a..0b66edb 100644 --- a/levels/bisect/bisect +++ b/levels/en/bisect/bisect @@ -9,7 +9,7 @@ Oh no! You have lost your key at some point during the day! Sure, you could look at every single commit in an attempt to find it - but there's a better way: your time machine has a built-in way to find the point in time where things went wrong quickly! -First, play the "bisect start" card. Then, go to a commit where you don't have the key, and play the "bisect bad" card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the "bisect good" card. +First, play the "bisect start" card. Then, go to a commit where you don't have the key, and play the "bisect bad" card. Likewise, go to a commit early on where you have the key *in your pocket*, and play the "bisect good card". After you've found the last good commit, reset the main branch to it. What happened to the key after you lost it? diff --git a/levels/bisect/sequence b/levels/en/bisect/sequence similarity index 100% rename from levels/bisect/sequence rename to levels/en/bisect/sequence diff --git a/levels/branches/branch-create b/levels/en/branches/branch-create similarity index 100% rename from levels/branches/branch-create rename to levels/en/branches/branch-create diff --git a/levels/branches/branch-remove b/levels/en/branches/branch-remove similarity index 100% rename from levels/branches/branch-remove rename to levels/en/branches/branch-remove diff --git a/levels/branches/checkout-commit b/levels/en/branches/checkout-commit similarity index 89% rename from levels/branches/checkout-commit rename to levels/en/branches/checkout-commit index 258434d..87061d8 100644 --- a/levels/branches/checkout-commit +++ b/levels/en/branches/checkout-commit @@ -3,7 +3,7 @@ cards = checkout commit-auto [description] -The yellow boxes are frozen points in time, we call them 'commits'! You can travel between them using the "checkout" card! (Try it!) +The yellow boxes are frozen points in time, we call them "commits"! You can travel between them using the "checkout" card! (Try it!) Can you find out what happened here? Then, while on the last commit, edit the files to fix the problem, and make a new commit! diff --git a/levels/branches/fork b/levels/en/branches/fork similarity index 100% rename from levels/branches/fork rename to levels/en/branches/fork diff --git a/levels/branches/grow b/levels/en/branches/grow similarity index 100% rename from levels/branches/grow rename to levels/en/branches/grow diff --git a/levels/branches/reorder b/levels/en/branches/reorder similarity index 100% rename from levels/branches/reorder rename to levels/en/branches/reorder diff --git a/levels/branches/sequence b/levels/en/branches/sequence similarity index 100% rename from levels/branches/sequence rename to levels/en/branches/sequence diff --git a/levels/changing-the-past/rebase b/levels/en/changing-the-past/rebase similarity index 100% rename from levels/changing-the-past/rebase rename to levels/en/changing-the-past/rebase diff --git a/levels/changing-the-past/reorder b/levels/en/changing-the-past/reorder similarity index 100% rename from levels/changing-the-past/reorder rename to levels/en/changing-the-past/reorder diff --git a/levels/changing-the-past/sequence b/levels/en/changing-the-past/sequence similarity index 100% rename from levels/changing-the-past/sequence rename to levels/en/changing-the-past/sequence diff --git a/levels/files/files-add b/levels/en/files/files-add similarity index 100% rename from levels/files/files-add rename to levels/en/files/files-add diff --git a/levels/files/files-delete b/levels/en/files/files-delete similarity index 100% rename from levels/files/files-delete rename to levels/en/files/files-delete diff --git a/levels/files/sequence b/levels/en/files/sequence similarity index 100% rename from levels/files/sequence rename to levels/en/files/sequence diff --git a/levels/index/add b/levels/en/index/add similarity index 100% rename from levels/index/add rename to levels/en/index/add diff --git a/levels/index/change b/levels/en/index/change similarity index 100% rename from levels/index/change rename to levels/en/index/change diff --git a/levels/index/checkout b/levels/en/index/checkout similarity index 100% rename from levels/index/checkout rename to levels/en/index/checkout diff --git a/levels/index/compare b/levels/en/index/compare similarity index 100% rename from levels/index/compare rename to levels/en/index/compare diff --git a/levels/index/new b/levels/en/index/new similarity index 100% rename from levels/index/new rename to levels/en/index/new diff --git a/levels/index/reset b/levels/en/index/reset similarity index 100% rename from levels/index/reset rename to levels/en/index/reset diff --git a/levels/index/rm b/levels/en/index/rm similarity index 100% rename from levels/index/rm rename to levels/en/index/rm diff --git a/levels/index/sequence b/levels/en/index/sequence similarity index 100% rename from levels/index/sequence rename to levels/en/index/sequence diff --git a/levels/index/steps b/levels/en/index/steps similarity index 100% rename from levels/index/steps rename to levels/en/index/steps diff --git a/levels/intro/cli b/levels/en/intro/cli similarity index 100% rename from levels/intro/cli rename to levels/en/intro/cli diff --git a/levels/intro/commit b/levels/en/intro/commit similarity index 100% rename from levels/intro/commit rename to levels/en/intro/commit diff --git a/levels/intro/copies b/levels/en/intro/copies similarity index 100% rename from levels/intro/copies rename to levels/en/intro/copies diff --git a/levels/intro/init b/levels/en/intro/init similarity index 84% rename from levels/intro/init rename to levels/en/intro/init index 01e6071..ea0426e 100644 --- a/levels/intro/init +++ b/levels/en/intro/init @@ -5,7 +5,7 @@ cards = init You've been accepted to time travel school! Yay! It's your first day! Your teacher explains: -'To do anything with a time machine, you first need to initialize it!' +"To do anything with a time machine, you first need to initialize it!" Drag that blue card up to play it! diff --git a/levels/intro/remote b/levels/en/intro/remote similarity index 100% rename from levels/intro/remote rename to levels/en/intro/remote diff --git a/levels/intro/risky b/levels/en/intro/risky similarity index 94% rename from levels/intro/risky rename to levels/en/intro/risky index de8560a..a5e7239 100644 --- a/levels/intro/risky +++ b/levels/en/intro/risky @@ -3,7 +3,7 @@ cards = [description] -So you have decided to apply for time travel school, to learn how to use this time machine called 'Git'! +So you have decided to apply for time travel school, to learn how to use this time machine called "Git"! How exciting! diff --git a/levels/intro/sequence b/levels/en/intro/sequence similarity index 100% rename from levels/intro/sequence rename to levels/en/intro/sequence diff --git a/levels/intro/who-are-you b/levels/en/intro/who-are-you similarity index 100% rename from levels/intro/who-are-you rename to levels/en/intro/who-are-you diff --git a/levels/low-level/basics b/levels/en/low-level/basics similarity index 100% rename from levels/low-level/basics rename to levels/en/low-level/basics diff --git a/levels/low-level/blob-create b/levels/en/low-level/blob-create similarity index 100% rename from levels/low-level/blob-create rename to levels/en/low-level/blob-create diff --git a/levels/low-level/blob-remove b/levels/en/low-level/blob-remove similarity index 100% rename from levels/low-level/blob-remove rename to levels/en/low-level/blob-remove diff --git a/levels/low-level/commit-create b/levels/en/low-level/commit-create similarity index 100% rename from levels/low-level/commit-create rename to levels/en/low-level/commit-create diff --git a/levels/low-level/commit-parents b/levels/en/low-level/commit-parents similarity index 100% rename from levels/low-level/commit-parents rename to levels/en/low-level/commit-parents diff --git a/levels/low-level/commit-rhombus b/levels/en/low-level/commit-rhombus similarity index 100% rename from levels/low-level/commit-rhombus rename to levels/en/low-level/commit-rhombus diff --git a/levels/low-level/index-add b/levels/en/low-level/index-add similarity index 100% rename from levels/low-level/index-add rename to levels/en/low-level/index-add diff --git a/levels/low-level/index-remove b/levels/en/low-level/index-remove similarity index 100% rename from levels/low-level/index-remove rename to levels/en/low-level/index-remove diff --git a/levels/low-level/index-update b/levels/en/low-level/index-update similarity index 100% rename from levels/low-level/index-update rename to levels/en/low-level/index-update diff --git a/levels/low-level/puzzle-apocalypse b/levels/en/low-level/puzzle-apocalypse similarity index 100% rename from levels/low-level/puzzle-apocalypse rename to levels/en/low-level/puzzle-apocalypse diff --git a/levels/low-level/puzzle-precious-blob b/levels/en/low-level/puzzle-precious-blob similarity index 100% rename from levels/low-level/puzzle-precious-blob rename to levels/en/low-level/puzzle-precious-blob diff --git a/levels/low-level/puzzle-trees-all-the-way-down b/levels/en/low-level/puzzle-trees-all-the-way-down similarity index 100% rename from levels/low-level/puzzle-trees-all-the-way-down rename to levels/en/low-level/puzzle-trees-all-the-way-down diff --git a/levels/low-level/ref-create b/levels/en/low-level/ref-create similarity index 100% rename from levels/low-level/ref-create rename to levels/en/low-level/ref-create diff --git a/levels/low-level/ref-move b/levels/en/low-level/ref-move similarity index 100% rename from levels/low-level/ref-move rename to levels/en/low-level/ref-move diff --git a/levels/low-level/ref-remove b/levels/en/low-level/ref-remove similarity index 100% rename from levels/low-level/ref-remove rename to levels/en/low-level/ref-remove diff --git a/levels/low-level/sequence b/levels/en/low-level/sequence similarity index 100% rename from levels/low-level/sequence rename to levels/en/low-level/sequence diff --git a/levels/low-level/symref-create b/levels/en/low-level/symref-create similarity index 100% rename from levels/low-level/symref-create rename to levels/en/low-level/symref-create diff --git a/levels/low-level/symref-no-deref b/levels/en/low-level/symref-no-deref similarity index 100% rename from levels/low-level/symref-no-deref rename to levels/en/low-level/symref-no-deref diff --git a/levels/low-level/tree-create b/levels/en/low-level/tree-create similarity index 100% rename from levels/low-level/tree-create rename to levels/en/low-level/tree-create diff --git a/levels/low-level/tree-nested b/levels/en/low-level/tree-nested similarity index 100% rename from levels/low-level/tree-nested rename to levels/en/low-level/tree-nested diff --git a/levels/low-level/tree-read b/levels/en/low-level/tree-read similarity index 100% rename from levels/low-level/tree-read rename to levels/en/low-level/tree-read diff --git a/levels/low-level/welcome b/levels/en/low-level/welcome similarity index 100% rename from levels/low-level/welcome rename to levels/en/low-level/welcome diff --git a/levels/merge/conflict b/levels/en/merge/conflict similarity index 100% rename from levels/merge/conflict rename to levels/en/merge/conflict diff --git a/levels/merge/merge b/levels/en/merge/merge similarity index 100% rename from levels/merge/merge rename to levels/en/merge/merge diff --git a/levels/merge/merge-abort b/levels/en/merge/merge-abort similarity index 100% rename from levels/merge/merge-abort rename to levels/en/merge/merge-abort diff --git a/levels/merge/sequence b/levels/en/merge/sequence similarity index 100% rename from levels/merge/sequence rename to levels/en/merge/sequence diff --git a/levels/remotes/friend b/levels/en/remotes/friend similarity index 100% rename from levels/remotes/friend rename to levels/en/remotes/friend diff --git a/levels/remotes/problems b/levels/en/remotes/problems similarity index 100% rename from levels/remotes/problems rename to levels/en/remotes/problems diff --git a/levels/remotes/sequence b/levels/en/remotes/sequence similarity index 100% rename from levels/remotes/sequence rename to levels/en/remotes/sequence diff --git a/levels/sandbox/empty b/levels/en/sandbox/empty similarity index 100% rename from levels/sandbox/empty rename to levels/en/sandbox/empty diff --git a/levels/sandbox/remote b/levels/en/sandbox/remote similarity index 100% rename from levels/sandbox/remote rename to levels/en/sandbox/remote diff --git a/levels/sandbox/sequence b/levels/en/sandbox/sequence similarity index 100% rename from levels/sandbox/sequence rename to levels/en/sandbox/sequence diff --git a/levels/sandbox/three-commits b/levels/en/sandbox/three-commits similarity index 100% rename from levels/sandbox/three-commits rename to levels/en/sandbox/three-commits diff --git a/levels/sequence b/levels/en/sequence similarity index 100% rename from levels/sequence rename to levels/en/sequence diff --git a/levels/shit-happens/bad-commit b/levels/en/shit-happens/bad-commit similarity index 100% rename from levels/shit-happens/bad-commit rename to levels/en/shit-happens/bad-commit diff --git a/levels/shit-happens/pushed-something-broken b/levels/en/shit-happens/pushed-something-broken similarity index 100% rename from levels/shit-happens/pushed-something-broken rename to levels/en/shit-happens/pushed-something-broken diff --git a/levels/shit-happens/reflog b/levels/en/shit-happens/reflog similarity index 100% rename from levels/shit-happens/reflog rename to levels/en/shit-happens/reflog diff --git a/levels/shit-happens/restore-a-file b/levels/en/shit-happens/restore-a-file similarity index 100% rename from levels/shit-happens/restore-a-file rename to levels/en/shit-happens/restore-a-file diff --git a/levels/shit-happens/restore-a-file-from-the-past b/levels/en/shit-happens/restore-a-file-from-the-past similarity index 100% rename from levels/shit-happens/restore-a-file-from-the-past rename to levels/en/shit-happens/restore-a-file-from-the-past diff --git a/levels/shit-happens/sequence b/levels/en/shit-happens/sequence similarity index 100% rename from levels/shit-happens/sequence rename to levels/en/shit-happens/sequence diff --git a/levels/stash/sequence b/levels/en/stash/sequence similarity index 100% rename from levels/stash/sequence rename to levels/en/stash/sequence diff --git a/levels/stash/stash b/levels/en/stash/stash similarity index 100% rename from levels/stash/stash rename to levels/en/stash/stash diff --git a/levels/stash/stash-branch b/levels/en/stash/stash-branch similarity index 100% rename from levels/stash/stash-branch rename to levels/en/stash/stash-branch diff --git a/levels/stash/stash-clear b/levels/en/stash/stash-clear similarity index 100% rename from levels/stash/stash-clear rename to levels/en/stash/stash-clear diff --git a/levels/stash/stash-merge b/levels/en/stash/stash-merge similarity index 100% rename from levels/stash/stash-merge rename to levels/en/stash/stash-merge diff --git a/levels/stash/stash-pop b/levels/en/stash/stash-pop similarity index 100% rename from levels/stash/stash-pop rename to levels/en/stash/stash-pop diff --git a/levels/tags/add-tag b/levels/en/tags/add-tag similarity index 100% rename from levels/tags/add-tag rename to levels/en/tags/add-tag diff --git a/levels/tags/add-tag-later b/levels/en/tags/add-tag-later similarity index 100% rename from levels/tags/add-tag-later rename to levels/en/tags/add-tag-later diff --git a/levels/tags/remote-tag b/levels/en/tags/remote-tag similarity index 100% rename from levels/tags/remote-tag rename to levels/en/tags/remote-tag diff --git a/levels/tags/remove-tag b/levels/en/tags/remove-tag similarity index 100% rename from levels/tags/remove-tag rename to levels/en/tags/remove-tag diff --git a/levels/tags/sequence b/levels/en/tags/sequence similarity index 100% rename from levels/tags/sequence rename to levels/en/tags/sequence diff --git a/levels/unused/checkout b/levels/en/unused/checkout similarity index 100% rename from levels/unused/checkout rename to levels/en/unused/checkout diff --git a/levels/unused/clone b/levels/en/unused/clone similarity index 100% rename from levels/unused/clone rename to levels/en/unused/clone diff --git a/levels/unused/commit b/levels/en/unused/commit similarity index 100% rename from levels/unused/commit rename to levels/en/unused/commit diff --git a/levels/unused/commit-a b/levels/en/unused/commit-a similarity index 100% rename from levels/unused/commit-a rename to levels/en/unused/commit-a diff --git a/levels/unused/fetch b/levels/en/unused/fetch similarity index 100% rename from levels/unused/fetch rename to levels/en/unused/fetch diff --git a/levels/unused/files-move b/levels/en/unused/files-move similarity index 100% rename from levels/unused/files-move rename to levels/en/unused/files-move diff --git a/levels/unused/index-mv b/levels/en/unused/index-mv similarity index 100% rename from levels/unused/index-mv rename to levels/en/unused/index-mv diff --git a/levels/unused/init b/levels/en/unused/init similarity index 100% rename from levels/unused/init rename to levels/en/unused/init diff --git a/levels/unused/pull-push b/levels/en/unused/pull-push similarity index 100% rename from levels/unused/pull-push rename to levels/en/unused/pull-push diff --git a/levels/unused/remotes-add b/levels/en/unused/remotes-add similarity index 100% rename from levels/unused/remotes-add rename to levels/en/unused/remotes-add diff --git a/levels/unused/remotes-delete b/levels/en/unused/remotes-delete similarity index 100% rename from levels/unused/remotes-delete rename to levels/en/unused/remotes-delete diff --git a/levels/unused/restore b/levels/en/unused/restore similarity index 100% rename from levels/unused/restore rename to levels/en/unused/restore diff --git a/levels/unused/split b/levels/en/unused/split similarity index 100% rename from levels/unused/split rename to levels/en/unused/split diff --git a/levels/unused/steps b/levels/en/unused/steps similarity index 100% rename from levels/unused/steps rename to levels/en/unused/steps diff --git a/levels/unused/who-are-you b/levels/en/unused/who-are-you similarity index 100% rename from levels/unused/who-are-you rename to levels/en/unused/who-are-you diff --git a/levels/workflows/gitignore b/levels/en/workflows/gitignore similarity index 100% rename from levels/workflows/gitignore rename to levels/en/workflows/gitignore diff --git a/levels/workflows/pr b/levels/en/workflows/pr similarity index 65% rename from levels/workflows/pr rename to levels/en/workflows/pr index 2496c1f..1c72510 100644 --- a/levels/workflows/pr +++ b/levels/en/workflows/pr @@ -3,8 +3,7 @@ cards = clone commit-auto reset-hard checkout file-new branch [description] -Your friend has a problem! Clone the repo located in `../friend`, create a branch called "solution", and fix the problem in this branch. When you're ready, make a "Pull Request" by using `git tag pr`. - +Your friend has a problem! Clone the repo, create a branch called "solution", and fix the problem in this branch. When you're ready, make a "Pull Request" by using `git tag pr`. [setup] diff --git a/levels/workflows/sequence b/levels/en/workflows/sequence similarity index 100% rename from levels/workflows/sequence rename to levels/en/workflows/sequence diff --git a/levels/it/bisect/bisect b/levels/it/bisect/bisect new file mode 100644 index 0000000..a80e2e8 --- /dev/null +++ b/levels/it/bisect/bisect @@ -0,0 +1,43 @@ +title = Strada di mattoni gialli +cards = checkout commit-auto reset-hard bisect-start bisect-good bisect-bad + +[description] + +(Perpiacere rimpicciolisci un pochino usando la rotella del mouse! :D) + +Oh no! Hai perso la tua chiave da qualche parte durante il giorno! + +Sicuro, certo potresti guardare in ogni singolo commit nella speranza di trovarlo - ma c'è un modo migliore: la tua macchina del tempo ha un modo integrato per trovare velocemente il punto nel tempo dove le cose sono andate male! + +Per prima cosa, gioca la carta "bisec start". Quindi, vai ad un commit in cui non hai la chiave e gioca la carta "bisect bad". Allo stesso modo vai velocemente in un commit dove hai la chiave *in tascca* e gioca la carta "bisect goofìd". + +Dopo aver trovato l'ultimo commit valido reimposta la branch principale su di esso. Cosa è successo alla chiave dopo che l'hai persa? + +[setup] + +echo "Hai ancora la tua chiave." > you + +for i in {1..30}; do + if test $i -eq 12; then + echo "La tua tasca è vuota." > you + echo "E' per terra." > key + fi + if test $i -eq 13; then + echo "Tiene una chiave nel becco." > bird + rm key + fi + if test $i -eq 14; then + rm bird + fi + git add . + git commit --allow-empty -m "$i" +done + +[win] + +# Trova l'ultimo commit buono +test "$(git log --pretty=%s main | head -1)" -eq 11 + +[congrats] + +Molto bene! :) L'unico problema è che adesso devi tornare a casa camminando, dinuovo... diff --git a/levels/it/bisect/sequence b/levels/it/bisect/sequence new file mode 100644 index 0000000..e8018fe --- /dev/null +++ b/levels/it/bisect/sequence @@ -0,0 +1 @@ +bisect diff --git a/levels/it/branches/branch-create b/levels/it/branches/branch-create new file mode 100644 index 0000000..2544ead --- /dev/null +++ b/levels/it/branches/branch-create @@ -0,0 +1,44 @@ +title = Creare ramificazioni +cards = checkout commit-auto branch branch-delete reset-hard + +[description] + +Vieni invitato a due feste! In una di queste, suona il tuo gruppo preferito e l'altra è la festa del tuo miglio amico. Dove andrai? Non preoccuparti - come agente del viaggio nel tempo, puoi andare ad entrambe le feste! + +Per rendere più facile dire quale sia la linea temporale, puoi creare portali temporali! (Chiamiamoli "rami-branchs") + +[cli] + +Anche viaggiare tra differenti rami temporali è davvero facile usando la linea di comando! Hai un ramo chiamato "birthday", puoi digitare `git checkout birthday` per arrivarci. + +[setup] + +echo "Incarta il regalo di compleanno e prendi il biglietto del concerto." > you +git add . +git commit -m "Preparazione serale" +echo "Vai alla festa di compleanno!" >> you +git add . +git commit -m "Vai al compleanno" + +git checkout HEAD~1 +echo "Vai al concerto!" > you +git add . +git commit -m "Vai al concerto" + +git checkout HEAD~1 + +git branch -D main + +[win] + +# Crea un ramo chiamato 'birthday' questo punta alla linea temporale del compleanno +git show birthday | grep 'birthday' + +# Crea un ramo chiamato 'concert' questo punta alla linea temporale del compleanno +git show concert | grep 'concert' + +[congrats] + +Adesso tu puoi viaggiare tra quie rami facilmente (usando `git checkout`) - Prova! + +Il tuo amico è felice che tu sia andato alla sua festa di compleanno e anche tu sei contento del biglietto del concerto firmato. Yay! diff --git a/levels/it/branches/branch-remove b/levels/it/branches/branch-remove new file mode 100644 index 0000000..00a2d4c --- /dev/null +++ b/levels/it/branches/branch-remove @@ -0,0 +1,47 @@ +title = Cancellare rami +cards = checkout commit-auto reset-hard branch-delete + +[description] + +La vita è piena di pericolim, vero? Anche quando cammini a scuola2, sembra che ci siano molti rischi! + +Questo Lunedì è particolarmente brutto.Sei arrivato a scuola ma ci sono delle line temporali che tu non vuoi tenere in giro + +[setup] + +echo Esci di casa e ti incammini verso la scuola. > you +git add . +git commit -m "Buon giorno!" + +echo Cammini nel lato destro della strada. >> you +git commit -am "Lato destro" + +echo Salti in un tombino nel marciapiede e arrivi in orario a scuola. >> you +git commit -am "Salto" + +git checkout HEAD^ -b friend +echo "All'improvviso cadi in una pozzanghera puzzolente e vieni mangiato da degli alligatori." >> you +git commit -am "Un nuovo amico" + +git checkout HEAD~2 -b music +echo Cammini nel lato sinistro della strada. >> you +git commit -am "Lato sinistro" + +echo Siccome sei in ritardo, inizi a corre ma qualcuno lanci un pianoforte dalla finestra e ti schiacci. >> you +git commit -am "Bei suoni" + +git checkout HEAD^ -b ice-cream +echo Non sei preoccupato e cammini lentamente. Prendi anche un gelato per strada. Arrivi troppo tardi a scuola, il tuo insegnante è arrabbiato e vieni espulso da scuola. >> you +git commit -am "Yum" + +git branch -M main leap +git checkout leap^^ + +[win] + +# Trova i rami cattivi e cancellali. Tieni solo il migliore. +test "$(git show-ref --heads | cut -f2 -d' ')" = "$(echo refs/heads/leap)" + +[congrats] + +Ripensandoci preferisci la linea temporale del gelato? :) diff --git a/levels/it/branches/checkout-commit b/levels/it/branches/checkout-commit new file mode 100644 index 0000000..3d913df --- /dev/null +++ b/levels/it/branches/checkout-commit @@ -0,0 +1,43 @@ +title = Muoversi attraverso il tempo +cards = checkout commit-auto + +[description] + +La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli "commits"! Puoi viaggiare tra loro usando la carta "checkout"! (Provala!) + +Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i files per risolvere il problema ed invia un nuovo commit! + +[cli] + +Guarda uno specifico commit, digita `git checkout` uno spazio e premi il tasto destro sopra il commit che vuoi! + +Questo inserirà l'identificatore unico del commit! + +[setup] + +echo "Questo salvadanaio appartiene alla sorella maggiore. +Contiene 10 monete." > piggy_bank +git add . +git commit -m "L'inizio" + +echo "Una giovane donna con capelli, ricci, marroni." > little_sister +git add . +git commit -m "La sorella piccola è arrivata" + +echo "Ha 10 monete." >> little_sister +echo "Questo salvadanaio appartiene alla sorella maggiore. +E' vuoto." > piggy_bank +git add . +git commit -m "La sorella piccola ha fatto qualcosa" + +git checkout HEAD^^ +git branch -df main + +[win] + +# Ripristina il salvadanaio della sorella. +{ git show HEAD:piggy_bank | grep "10 monete"; } && { git show HEAD:little_sister | grep -v "10 monete"; } && { git rev-parse HEAD^^^; } + +[congrats] + +Stupendo! Adesso hai preso famiglirità con la macchina del tempo, vediamo situazioni più complicate... diff --git a/levels/it/branches/fork b/levels/it/branches/fork new file mode 100644 index 0000000..46b94c6 --- /dev/null +++ b/levels/it/branches/fork @@ -0,0 +1,65 @@ +title = Crea universi paralleli +cards = checkout commit-auto + +[description] + +Sai che creare line temporali parallele è perfettamente legale e sicuro? Vero! + +Puoi scoprire qundo le cose sono andate male in questo zoo? Poi torna all'ultimo momento buono e crea un universo parallelo dove sono tutti felicy! + +[cli] + +L'animale blue rappresenta un concetto conosciuto come "HEAD pointer" in Git: Ti mostra qual'è il commit attuale. + +Ecco un simpatico trucchetto andare al commit precedente: + + git checkout HEAD^ + +Puoi anche andare indietro di 2 commit digitando, pre esempio: + + git checkout HEAD~2 + +[setup] + +mkdir cage +echo "Sembra molto affamato." > cage/lion + +echo "Un ragazzino.. +Ama veramente i gatti!" > child +git add . +git commit -m "L'inizio" + +echo "Tiene in mano un leccalecca." >> child +git commit -am "Il ragazzo compra qualcosa" + +mv child cage +git add . +git commit -m "Il bambino si arrampica da qualche parte" + +git rm cage/child +echo "E' felice. :)" > cage/lion +git add . +git commit -m "Oh no" + +echo "Sta dormendo." > cage/lion +git add . +git commit -m "Ora del pisolino!" + +git checkout --detach +git branch -d main + +[win] + +# Assicurati che il ragazzino sia felice. +git ls-tree --name-only -r HEAD | grep child + +# Assicurati che il leone abbia qualcosa da mangiare. +git show HEAD:cage/lion | grep -v "molto affamato" + +[congrats] + +Whew, ottimo lavoro! Questo sembra un risultato molto migliore. + +Sentiti libero di aggiungere altre line temporali parallele o allungarle. + +Se sei pronto, la prossima missione ci sta aspettando... diff --git a/levels/it/branches/grow b/levels/it/branches/grow new file mode 100644 index 0000000..d560682 --- /dev/null +++ b/levels/it/branches/grow @@ -0,0 +1,48 @@ +title = I rami crescono con tè! +cards = checkout commit-auto branch branch-delete reset-hard + +[description] + +Nota che ci sono due opzioni per "viaggire fino alla fine della linea temporale": + +Primo, puoi direttamente viaggiare al commit, come abbiamo fatto prima. + +e secondo, puoi viaggiare fino all'etichetta del ramo. In questo caso, quando crei un nuovo commit, il ramo cresce con te e punta ancora alla fine della linea temporale! + +[cli] +Per viaggire in un ramo, digita `git checkout name_of_the_branch`. + +e per viaggiare all'ultimo commit, digita `git checkout --detach name_of_the_branch`. + +[setup] + +echo "In carti il regalo di complanno e prendi il biglietto del concerto." > you +git add . +git commit -m "Preparazioni della sera" +echo "Vai alla festa di compleanno!" >> you +git add . +git commit -m "Vai alla festa di compleanno" +git branch birthday + +git checkout HEAD~1 +echo "Vai al concerto!" > you +git add . +git commit -m "Vai al concerto" +git branch concert + +git checkout HEAD~1 + +git branch -D main + +[win] + +# Viaggi direttamente all'ultimo commit giallo della line temporale del compleanno, fai un cambiamento per te e crea un commit +for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do + if test $(git rev-parse $commit^) = $(git rev-parse birthday); then + return 0 + fi +done +return 1 + +# Viaggi fino al ramo, blue, del concerto, fai un cambiamento ed un commit. +git show concert^ | grep "Vai al concerto" diff --git a/levels/it/branches/reorder b/levels/it/branches/reorder new file mode 100644 index 0000000..d8a0212 --- /dev/null +++ b/levels/it/branches/reorder @@ -0,0 +1,89 @@ +title = Muovere i rami +cards = checkout commit-auto merge reset-hard + +[description] + +Uno dei tuoi colleghi ha fatto un casino qui e ha messo le branches nelle line temporali sbagliate! + +Potresti cancellare e ricreare queste branches - ma puoi anche muoverle direttamente in un differente commit usando: + + git checkout + +nel nome della branch e poi usare + + git reset --hard + +nel commit dove vuoi che la branch vada. + +La ciambella è nella branch giusto ma la linea temporale è incompleta - fai *mangiare* la ciambella a quella branch! + +[setup] + +echo "Tu non hai una baguette. + +Non hai un caffe. + +Non hai una ciambella." > you + +git add . +git commit -m "L'inizio" + +git checkout -b coffee +echo "Tu hai una baguette. + +Non hai un caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Compri una ciambella" + +echo "Mangi una baguette. + +Non hai un caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Mangi una baguette" + +git checkout -b baguette main +echo "Non hai una ciambella. + +Hai un caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Compri un pò di caffe" + +echo "Non hai una baguette. + +Hai bevuto caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Bevi il caffe" + +git checkout -b donut main +echo "Non hai una baguette. + +Non hai caffe. + +Hai una ciambella." > you +git add . +git commit -m "Compri una ciambella" + +git checkout --detach main + +[win] + +# Mangi una baguette nella branch delle baguette? +git show baguette:you | grep "Mangi.*baguette" + +# Bevi un caffe nella branch del caffe? +git show coffee:you | grep "Bevi.*coffe" + +# Mangi una ciambella nella branch delle ciambelle? +git show donut:you | grep "Mangi.*ciambella" + +[actions] + +test "$(git rev-parse HEAD^)" = "$(git rev-parse donut)" && hint "Ricordati di controllare l'etichetta branch blue quando vuoi che cresca con la linea temporale." diff --git a/levels/it/branches/sequence b/levels/it/branches/sequence new file mode 100644 index 0000000..2619ea0 --- /dev/null +++ b/levels/it/branches/sequence @@ -0,0 +1,6 @@ +checkout-commit +fork +branch-create +grow +branch-remove +reorder diff --git a/levels/it/changing-the-past/rebase b/levels/it/changing-the-past/rebase new file mode 100644 index 0000000..a704c80 --- /dev/null +++ b/levels/it/changing-the-past/rebase @@ -0,0 +1,86 @@ +title = Rebasing +cards = checkout commit-auto reset-hard rebase + +[description] + +Okay - Salta vuori che risparmiare tempo al mattino utilizzando universi paralleli è contro il regolamento dell'International Time Travel Association. Dovrai svolgere i tuoi compiti in sequenza dopotutto. + +Vedi la carta "rebase"? Quando la trascini su di un commit, copierà dopo di esso tutti gli eventi della linea temporale su cui ti trovi! In questo modo crei una linea temporale chiara e pulita dove visiti tutti e tre i negozzi. + +Nuovamente, vogliamo rendere questa la nostra realtà di base - il ramo "main" dovrebbe puntare a quella linea temporale! + +[setup] + +echo "Non hai una baguette. + +Non hai caffe. + +Non hai una ciambella." > you + +git add . +git commit -m "L'inizio" + +git checkout -b baguette main +echo "Hai una baguette. + +Non hai caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Compri una baguette" + +echo "Mangi una baguette. + +Non hai caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Mangi la baguette" + +git checkout -b coffee main +echo "Non hai una baguette. + +Hai del caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Compri un pò di caffe" + +echo "Non hai una baguette. + +Hai bevuto caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Bevi il caffe" + +git checkout -b donut main +echo "Non hai una baguette + +Non hai caffe. + +Hai una ciamebella." > you +git add . +git commit -m "Compri una ciambella" + +echo "Non hai una baguette. + +Non hai caffe. + +Mangi una ciambella." > you +git add . +git commit -m "Mangi la ciambella" + +git checkout --detach main + + +[win] + +# Ordina le tre ramificazioni in una e muovi il riferimento al ramo principale +{ git show main:you | grep "Mangi.*baguette"; } && { git show main:you | grep "bevuto.*caffe"; } && { git show main:you | grep "Mangi.*ciambella"; } && { test "$(git log main --oneline | wc -l)" -eq 7; } + +[congrats] + +Nota come gli altri commit e linee temporali siano ancora li - se qualcosa va storto, puoi ancora tornare in dietro. + +E' davvero difficile *distruggere* le cose con la tua macchina del tempo. diff --git a/levels/it/changing-the-past/reorder b/levels/it/changing-the-past/reorder new file mode 100644 index 0000000..8bbe21a --- /dev/null +++ b/levels/it/changing-the-past/reorder @@ -0,0 +1,77 @@ +title = Riordinare gli eventi +cards = checkout commit-auto reset-hard rebase-interactive cherry-pick + +[description] + +Oops, guarda c'è qualcosa di incasinato qui. Puoi rimettere gli eventi nel corretto ordine? + +Ci sono due modi per farlo: Puoi trascinare la carta "interactive rebase" sul commit precedente a quello che vuoi cambiare, poi riordinare le linee nel file che si apre e salvarlo. +Oppure puoi reimpostare il tag principale al primo commit, quindi selezionare i singoli commit (cherry-pick) nell'ordine desiderato. Hai carte per entrambe i modi! + +[setup] + +echo "Ti sei appena svegliato. + +Non indossi biancheria intima. + +Non indossi pantaloni. + +Non indossi la maglia. + +Non indossi le scarpe." > you +git add . + +git commit -m "L'inizio" + +echo "Ti sei appena svegliato. + +Non indossi biancheria intima. + +Non indossi pantaloni. + +Non indossi la maglia. + +Indossi le scarpe." > you +git commit -am "Metti le scarpe" + +echo "Ti sei appena svegliato. + +Non indossi biancheria intima. + +Indossi pantaloni. + +Non indossi la maglia. + +Indossi le scarpe." > you +git commit -am "Metti i pantaloni" + +echo "Ti sei appena svegliato. + +Indossi la biancheria intima. + +Indossi pantaloni. + +Non indossi la maglia. + +Indossi le scarpe." > you +git commit -am "Metti biancheria intima" + +echo "Ti sei appena svegliato. + +Indossi biancheria intima. + +Indossi pantaloni. + +Indossi la maglia. + +Indossi le scarpe." > you +git commit -am "Ti metti la maglia" + +[win] + +# Riordina i commit per vestirti nel modo corretto +{ git log main --oneline | perl -0777 -ne'exit(1) if not /scarpe[\s\S]*pantaloni[\s\S]*biancheria/'; } && { test "$(git log main --oneline | wc -l)" -eq 5; } + +[congrats] + +Sentiti libero di resettare il livello e provare l'altra strategia! Qual'è quella che preferisci? diff --git a/levels/it/changing-the-past/sequence b/levels/it/changing-the-past/sequence new file mode 100644 index 0000000..43c5d08 --- /dev/null +++ b/levels/it/changing-the-past/sequence @@ -0,0 +1,2 @@ +rebase +reorder diff --git a/levels/it/files/files-add b/levels/it/files/files-add new file mode 100644 index 0000000..f0149b9 --- /dev/null +++ b/levels/it/files/files-add @@ -0,0 +1,31 @@ +title = Arredatore di interni +cards = file-new file-delete + +[description] + +Ora che la tua stanza sembra in ordine, puoi iniziare a disfare le tue cose. Hai portato con te due mobili nuovi e con un sorriso luminoso, +vedi che i loro colori corrispondono al colore del tuo letto! + +Costruisci i tuoi due mobili usando la carta touch. +Quindi dai il nome ai tuoi mobili - puoi sciegliere quello che tu vuoi. + +Assicurati che i colori siano uguali! Puoi trovare il colore del letto nella descrizione. +Non dimenticare di aggiungere un colore e una descrizione anche ai tuoi nuovi mobile. + +[setup] +echo Un accogliente letto giallo. > bed + +[win] + +# Aggiungi altri due mobili +NUM_FILES="$(ls | wc -l)" +test "$NUM_FILES" -ge 3 + +# Assicurati che i colori corrispondano a quelle del tuo letto +NUM_FILES="$(ls | wc -l)" +YELLOW_FILES="$(grep -li giallo * | wc -l)" +test "$NUM_FILES" -ge 2 && test "$YELLOW_FILES" = "$NUM_FILES" + +[congrats] + +Non ti senti già più a casa? diff --git a/levels/it/files/files-delete b/levels/it/files/files-delete new file mode 100644 index 0000000..9b207dc --- /dev/null +++ b/levels/it/files/files-delete @@ -0,0 +1,36 @@ +title = Coinquilini inaspettati +cards = file-delete + +[description] + +Il primo giorno alla Scuola del viaggio nel tempo sta per finire e tu ricevi le chiavi della tua stanza. +Eccitatissimo apri la porta giusto per vedere... ragnatele! Ragnatele ovunque! + +Cava tutte le ragnatele che puoi trovare con la carta remove! + +[cli] + +Nella line di comando, puoi facilmente eliminare tutti i file che finiscono in "web" usando il comando: + + rm *web + +[setup] + +echo Una piccola ragnatela è accanto alla tua finestra. > tiny_web +echo Una grande ragnatela attaccata sopra al tuo letto. > big_web +echo Un letto accogliente. > bed +echo Una ragnatela spessa è alla destra della tua porta. > thick_web + +[win] + +# Rimuovi tutte le ragnatele. +! ls | grep thick_web && +! ls | grep big_web && +! ls | grep tiny_web + +# Ma assicurati di mantenere il tuo letto! +ls | grep bed + +[congrats] + +Guarda la tua stanza adesso è davvero ordinata ed accogliente! Il momento per disfare le valige! diff --git a/levels/it/files/sequence b/levels/it/files/sequence new file mode 100644 index 0000000..cb24408 --- /dev/null +++ b/levels/it/files/sequence @@ -0,0 +1,3 @@ +files-delete +files-add + diff --git a/levels/it/index/#sequence# b/levels/it/index/#sequence# new file mode 100644 index 0000000..42f7f48 --- /dev/null +++ b/levels/it/index/#sequence# @@ -0,0 +1,5 @@ +compare +new +change +reset +steps diff --git a/levels/it/index/add b/levels/it/index/add new file mode 100644 index 0000000..e627917 --- /dev/null +++ b/levels/it/index/add @@ -0,0 +1,38 @@ +title = Updating files in the index +cards = add commit checkout + +[description] + +So you start working, and make changes to your files! Git lets you choose which of these changes you want to put in the next commit. This is like updating the index version of that file to the new version. + +This allows you to have smaller commits, that describe better what you changed! + +The command for this is the same - `git add`! + +[setup] + +echo a > a +echo b > b +echo c > c +git add . +git commit -m "Initial commit" + +[win] + +# Make changes to all files! +test "$(cat a)" != "a" && +test "$(cat b)" != "b" && +test "$(cat c)" != "c" + +# Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b! + +test "$(git show main:a)" != "a" && +test "$(git show main:b)" != "b" && +test "$(git show main:c)" != "c" && +test "$(git show main^:a)" != "a" && +test "$(git show main^:b)" == "b" && +test "$(git show main^:c)" != "c" + +[congrats] + +Well done! Try tavelling between the commits using `git checkout`, so you can look at their contents again! diff --git a/levels/it/index/change b/levels/it/index/change new file mode 100644 index 0000000..970ffd6 --- /dev/null +++ b/levels/it/index/change @@ -0,0 +1,31 @@ +title = Aggiornare i file nell'indice +cards = add commit + +[description] + +Quando cambiamo i files l'indice non cambia da solo. Dobbiamo usare `git add` per aggiornare l'indice alla nuova versione del file.. + +Proviamoci! + +Le icone nel file manager ti mostrano quando il file attuale (bianco) e la versione nell'indice (blu) differiscono o sono uguali! + +[win] + +Bene! L'indice è anche chiamato "staging area" (area di staging) - E contiene esattamente ciò che finisce nel prossimo commit quando usi `git commit`! + +[setup] + +echo "La candela brucia con una fiamma blu." > candle +git add . +git commit -m "L'inizio" + +[win] + +# Fai una modifica alla candela +test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed + +# Aggiungi la candella. +test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added + +# Fai un commit. +test "$(git diff --name-only HEAD HEAD^)" = "candle" diff --git a/levels/it/index/checkout b/levels/it/index/checkout new file mode 100644 index 0000000..3c01b09 --- /dev/null +++ b/levels/it/index/checkout @@ -0,0 +1,25 @@ +title = Checking out files from the index +cards = add reset-file checkout-file commit + +[description] + +So you've made changes to your files, but you decide that you don't want to keep them! You can use `git checkout` for that! + +What happens if you have already update the index, like in file c? You have to reset the index first! + +[setup] + +echo a > a +echo b > b +echo c > c +git add . +git commit -m "Initial commit" +echo x > a +echo x > b +echo x > c +git add c + +[win] + +# Remove all changes in your local files! +test "$(git diff --name-only | wc -l)" -eq 0 diff --git a/levels/it/index/compare b/levels/it/index/compare new file mode 100644 index 0000000..557b654 --- /dev/null +++ b/levels/it/index/compare @@ -0,0 +1,51 @@ +title = Passo dopo passo +cards = checkout commit-auto + +[description] + +Benvenuto! nella lezione di oggi impareremo come creare commits con più precisione! + +Dai un'occhiata a queste due linee temporali. Hanno lo stesso risultato, ma in una delle due è molto più semplice capire cosa è successo. + +[win] + +# Esatto! Avere ogni cambiamento nel proprio commit rende più facile capire cosa sta succedendo! +git branch --show-current | grep step-by-step + +[setup] + +echo "Una piccola ma pesante palla di vetro." > ball +echo "Un sottile libro che sta in piedi." > book +echo "Una candela brucia con una fiamma blu." > candle +echo "Un sensore di fumo. E' assolutamente silenzioso." > smoke_detector + +git add . +git commit -m "L'inizio" + +git branch -M all-at-once + +echo "La palla adesso tocca il libro." > ball +echo "Il libro è caduto." > book +echo "La candella è stata spenta." > candle + +git commit -am "La fine" + +git checkout HEAD^ + +git checkout -b step-by-step + +echo "La palla adesso tocca il libro." > ball +git commit -am "La palla rotola verso il libro" + +echo "Il libro è caduto." > book +git commit -am "Il libro è caduto" + +echo "La candela è stata spenta." > candle +git commit -am "Il libro ha spento la candela" + +git checkout HEAD~3 + +[win] + +# Prendi la sequenza temporale più chiara e fai suonare il sensore di fumo! +git show step-by-step:smoke_detector | tail -n 1 | grep -v "assolutamente silenzioso" diff --git a/levels/it/index/new b/levels/it/index/new new file mode 100644 index 0000000..4ce39ec --- /dev/null +++ b/levels/it/index/new @@ -0,0 +1,28 @@ +title = Aggiungere nuovi file all'indice +cards = add commit + +[description] + +Finora, quando abbiamo eseguito un commit abbiamo sempre registrato lo stato di tutti gli oggetti, vero? + +Ma Git ti permette di scegliere i cambiamenti che si vogliono mettere in un commit! + +Per sapere come funziona, dobbiamo conoscere l'"indice"! Nell'indice, possiamo preparare ciò che sarà nel prossimo commit. In questo gioco, l'indice è rappresentato da un'aura blu attorno alle icone nel file manager! + +Inizialmente, l'indice è vuoto. Per fare un commit che contenga un nuovo file, dobbiamo aggiungerlo! + +[cli] + +Puoi usare il completamento con la tabulazione nel terminale! Inizia a scrivere il nome di un file e premi il tasto tab per completarlo. Così risparmi tempo! + +[setup] + +echo "La candela brucia con una fiamma blu." > candle + +[win] + +# Aggiungi la candela. +test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added + +# Crea un commit. +test "$(git ls-tree --name-only HEAD)" = "candle" diff --git a/levels/it/index/reset b/levels/it/index/reset new file mode 100644 index 0000000..fd118fd --- /dev/null +++ b/levels/it/index/reset @@ -0,0 +1,37 @@ +title = Resettare i file nell'indice +cards = add reset-file commit + +[description] + +Vedi l'ombra scura dietro le icone? Questa è la versione del file nell'ultimo commit! + +Per esempio, queste candele sono state spente e quella modifica è stata aggiunta! + +Ma è stato un errore! Vuoi solo spegnere al candela rossa nel prossimo commit! + +Se hai già aggiunto un file modificato all'indice ma vuoi ripristinarlo, puoi usare `git reset`! + +[setup] + +echo "Sta bruciando!" > red_candle +echo "Sta bruciando!" > green_candle +echo "Sta bruciando!" > blue_candle +git add . +git commit -m "L'inizio" + +echo "È stata spenta." > red_candle +echo "È stata spenta." > green_candle +echo "È stata spenta." > blue_candle +git add . + +[win] + +# Ripristina i cambiamenti nella candela verde e in quella blu! +git show :green_candle | grep burning && +git show :blue_candle | grep burning && +git show :red_candle | grep -v burning + +# E fai un commit +git show main:green_candle | grep burning && +git show main:blue_candle | grep burning && +git show main:red_candle | grep -v burning diff --git a/levels/it/index/rm b/levels/it/index/rm new file mode 100644 index 0000000..637fd22 --- /dev/null +++ b/levels/it/index/rm @@ -0,0 +1,24 @@ +title = Delete a file in the next commit +cards = add reset-file checkout-file rm file-delete commit + +[description] + +If you want to remove a file in the next commit, you can use `git rm`! This will both delete the file locally, and in the index. + +If a file is modified, you'll need to reset these changes first/reset the files. + +[setup] + +echo a > a +echo x > b +echo x > c +git add . +git commit -m "Initial commit" +echo x > a +echo b > b +git add b + +[win] + +# Make a commit where all files are deleted ¯\_(^_^)_/¯ +test "$(git ls-tree main | wc -l)" -eq 0 diff --git a/levels/it/index/sequence b/levels/it/index/sequence new file mode 100644 index 0000000..42f7f48 --- /dev/null +++ b/levels/it/index/sequence @@ -0,0 +1,5 @@ +compare +new +change +reset +steps diff --git a/levels/it/index/steps b/levels/it/index/steps new file mode 100644 index 0000000..8c13af7 --- /dev/null +++ b/levels/it/index/steps @@ -0,0 +1,53 @@ +title = Aggiungere le modifice una per volta +cards = add reset-file commit + +[description] + +L'indice è veramente utile perché ci permette di essere precisi su quali cambiamenti vogliamo includere in ogni commit! + +[setup] + +echo "Un martello, in equilibrio sul suo manico." > hammer +echo "Una bottiglia contenente un liquido trasparente." > bottle +echo "Un cubetto di zucchero bianco." > sugar_cube + +git add . +git commit -m "L'inizio" + +[win] + +# Fai dei cambiamenti a tutti e tre gli oggetti per creare una sequenza logica di eventi! +test "$(git diff --name-only | wc -l)" -eq 3 || file -f .git/candle-changed && touch .git/candle-changed + +# Aggiungi solo uno dei cambiamenti! +test "$(git diff --cached --name-only | wc -l)" -eq 1 || file -f .git/candle-added && touch .git/candle-added + +# E fai un commit +COUNT=0 +for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do + if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then + COUNT=$((COUNT+1)) + fi +done + +test "$COUNT" -ge 1 + +# Fai un secondo commit che registri solo un singolo cambiamento. +COUNT=0 +for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do + if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then + COUNT=$((COUNT+1)) + fi +done + +test "$COUNT" -ge 2 + +# E aggiungine un terzo. +COUNT=0 +for commit in $(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep 'commit$' | cut -f1 -d' '); do + if test "$(git diff --name-only $commit $commit^ | wc -l)" -eq 1; then + COUNT=$((COUNT+1)) + fi +done + +test "$COUNT" -ge 3 diff --git a/levels/it/intro/cli b/levels/it/intro/cli new file mode 100644 index 0000000..c643fc1 --- /dev/null +++ b/levels/it/intro/cli @@ -0,0 +1,27 @@ +title = La line di comando +cards = + +[description] + +Queste carte da gioco sono state disegnate per essere usate e ricordate facilmente! Ti consigliamo di attenerti a loro se non hai molta esperienza di Git! + +[cli] + +Ma c'è un'altra via per interagire con Git: + +Prova a digitare `git init` nel terminale qui sotto e premere il pulsante Enter! + +[setup] + +rm -rf .git + +[win] + +# Inizializza la macchina del tempo! +test -d .git + +[congrats] + +Perfetto! Al posto di usare le carte da gioco, puoi anche fare tutto dalla line di comando! + +La line di comando e piuttosto potente! A volte, puoi usarla per risolvere le attività più velocemente che con l'interfaccia grafica. diff --git a/levels/it/intro/commit b/levels/it/intro/commit new file mode 100644 index 0000000..1141ae1 --- /dev/null +++ b/levels/it/intro/commit @@ -0,0 +1,32 @@ +title = Il tuo primo commit! +cards = commit-auto + +[description] + +Puoi usare la tua macchina del tempo per scattare istantanee degli oggetti intorno a te! Qui puoi metterlo in pratica! + +(Il tuo insegnante versa un pò di acqua nel bicchiere) + +[cli] +Nuovamente, al posto di usare le carte, puoi scrivere i comandi, che sono stampati sulle carte, nel terminale in basso! + +Questo è totalmente opzionale! Ma questa è una conoscenza super utile nel mondo reale - e ti farà avere un distintivo scintillante! :) + +[setup] + +echo "Il bicchiere è pieno di acqua." > glass + +[win] + +# Crea un'istantanea del bicchiere (un "commit") +git rev-parse HEAD + +# Cambia il contenuto del bicchiere! +! test "$(cat glass)" = "Il bicchiere è pieno di acqua." + +# E crea un secondo "commit"! +git rev-parse HEAD^ && ! test "$(git show main:glass)" = "Il bicchiere è bieno di acqua." + +[congrats] + +Perfetto! Puoi provare a creare altri "commit". Quando ti sentirai a posto, premi su "Next Level". diff --git a/levels/it/intro/copies b/levels/it/intro/copies new file mode 100644 index 0000000..8f8d6ce --- /dev/null +++ b/levels/it/intro/copies @@ -0,0 +1,42 @@ +title = Crea una copia +cards = + +[description] + +Questa volta, stai facendo molte copie di backup - puoi guardarli cliccandoci sopra! + +[congrats] + +Okay, questo è un modo di lavorare. + +Ma sei preoccupato che ti ritroverai con centinaia di copie di questo modulo e sarà difficile tenerne traccia nel tempo. + +Specialmente quando lavori con altre persone, inviare copie avanti ed indietro non sembra l'ideale. + +Fermati, devi provare questa macchina del tempo! + +[setup] + +rm -rf .git + +echo "~ Perchè voglio imparare Git ~ + +(Devo ancora scriverlo.)" >> form.txt + + +echo "~ Perchè volgio imparare Git ~ + +- Così posso annullare gli errori" >> form2.txt + + +echo "~ Perchè volgio imparare Git ~ + +- Così posso annullare gli errori +- Per tracciare i mie progetti attraverso il tempo" >> form2_final.txt + +cp form2_final.txt form2_really_final.txt + +[win] + +# Aggiungi una nuova line al file form2_really_final.txt! +test "$(cat form2_really_final.txt | wc -l )" -ge 5 diff --git a/levels/it/intro/init b/levels/it/intro/init new file mode 100644 index 0000000..260f6e9 --- /dev/null +++ b/levels/it/intro/init @@ -0,0 +1,24 @@ +title = Entra nella machina del tempo +cards = init + +[description] + +Sei stato accettato nella scuola della macchina del tempo! Questo è il tuo primo giorno! Il tuo insegnate ti spiega: + +"Per fare qualsiasi cosa con una macchina del tempo, devi prima inizializzarla!" + +Trascina quella carta blu verso l'alto per usarla! + +[setup] + +rm -rf .git + +[win] + +# Inizializzazione della macchina del tempo +test -d .git + +[congrats] + +Perfetto! Vedi quel piccolo animale che è apparso? Sarà il tuo compagno e ti mostrerà dove ti trovi nel tempo! + diff --git a/levels/it/intro/remote b/levels/it/intro/remote new file mode 100644 index 0000000..c0b582a --- /dev/null +++ b/levels/it/intro/remote @@ -0,0 +1,52 @@ +title = Dai lavoriamo tutti assieme +cards = pull commit-auto push + +[description] + +Aggiungi il tuo nome nella nostra lista di studenti! + +Ho già un secondo "commit" nella mia macchina del tempo - Dai lavoriamo tutti assieme! + +[cli] + +Per tornare in dietro alle vecchie istruzioni, puoi premere la freccia in alto o in basso. In questo modo non devi digitare, nuovamente, le istruzioni. + +[congrats] + +Benvenuto nella scuola del viaggio nel tepo! :) Ci vediamo domani per la tua prima lezione! + +[setup] + +echo "~ Lista degli attuali studenti ~" > students +git add . +git commit -m "Versione iniziale" +git push -u teacher main + +git update-ref -d refs/remotes/teacher/main + +[setup teacher] + +git reset --hard main + +echo " +- Sam +- Alex" >> students + +git add . +git commit -m "Aggiunti due studenti" + +[win] + +# Ottieni il secondo "commit" dal tuo insegnante usando `git pull`. +test "$(git log --oneline teacher/main | wc -l)" -ge 2 + +# Aggiungi il tuo nome alla lista degli studenti. +test "$(cat students |wc -l)" -ge 5 + +# Crea un'istantanea dei risultati. +test "$(git show main:students |wc -l)" -ge 5 + +[win teacher] + +# E usa `git push` per inviarlo al tuo insegnante! +test "$(git show main:students |wc -l)" -ge 5 diff --git a/levels/it/intro/risky b/levels/it/intro/risky new file mode 100644 index 0000000..57a52d1 --- /dev/null +++ b/levels/it/intro/risky @@ -0,0 +1,42 @@ +title = Vivere è pericoloso +cards = + +[description] + +Quindi hai deciso di fare domanda per la scuola di viaggio nel tempo, per usare la macchina del tempo chiamata "Git"! + +Che emozione! + +Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il quale vuoi imparare Git. + +[congrats] + +All'improvviso, il tuo gatto salta sul tavolo, strappa via il modulo, e scappa via! Oh no. Tutto il tuo duro lavoro, andato! + +Devi trovare una buona soluzione. + +(Premi "Prossimo livello" appena sei pronto!) + +[setup] + +rm -rf .git + +echo "~ Perchè voglio imparare Git ~ + +- Così posso cancellare gli errori +- Per seguire il mio progetto attraverso il tempo" >> form.txt + +[actions] + +test "$(cat form.txt | wc -l )" -ge 5 && echo "(E' stato rubato dal tuo gatto.) + + + + + +" > form.txt + +[win] + +# Aggiungi un'altra line a form.txt! +test "$(cat form.txt | wc -l )" -ge 5 diff --git a/levels/it/intro/sequence b/levels/it/intro/sequence new file mode 100644 index 0000000..aa225df --- /dev/null +++ b/levels/it/intro/sequence @@ -0,0 +1,6 @@ +risky +copies +init +cli +commit +remote diff --git a/levels/it/intro/who-are-you b/levels/it/intro/who-are-you new file mode 100644 index 0000000..abb94f3 --- /dev/null +++ b/levels/it/intro/who-are-you @@ -0,0 +1,38 @@ +title = Benvenuto nella scuola del viaggio nel tempo! +cards = config-name commit-auto checkout + +[description] + +Sei ancora confuso da tutto quello che sta succedendo. Il giorno seguente, decidi di iscriverti nella scuola del viaggio nel tempo! + +Il tuo insegnante del viaggio nel tempo ti saluta: "Ciao come va! Vuoi dirci il tuo nome?" + +[setup] + +git config --global user.name "TU" + +echo "~ Chi vuole imparare come si usa la macchina del tempo? ~ + +[ ] Per essere sicuro che il mio gatto non mangi il mio lavoro. +[ ] Così non devo tenere copie di tutti i miei saggi. +[ ] Per collaborare con altri studenti del viaggio nel tempo. +[ ] Altro, perfavore specifica:" > form + +[actions] + +test "$(git config user.name)" != "TU" && cat form | grep -v Signature && echo " +Firma: $(git config user.name)" >> form + +[win] + +# Presentati. +test "$(git config user.name)" != "TU" + +# Compila l'iscrizione e inviala! +git show main:form | grep '\[[xX]\]' + +[congrats] + +"Siamo lieti di averti con noi! + +Git puoi aiutarti a correggere i problemi del passato! Ti aiuta a collaborare con gli studenti del viaggio nel tempo! E' davvero potente e e popolare! Ci vediamo domani per la tua prima lezione!" diff --git a/levels/it/low-level/basics b/levels/it/low-level/basics new file mode 100644 index 0000000..55374b5 --- /dev/null +++ b/levels/it/low-level/basics @@ -0,0 +1,26 @@ +[description] + +For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful: + +- ls +- echo content > file +- cat file +- mkdir dir + +Find the riddle in your current directory and put the answer into the file "answer"! + +[congrats] + +Omnomnom! + +For technical reasons, you can't use `cd` in this prototype yet. But there won't be a lot of interaction with the file system anyways. :) + +[setup] + +mkdir riddle +echo "ppl p" > riddle/consonants +echo "ae ie" > riddle/vowels + +[win] + +cat answer | grep -i "apple \\?pie" diff --git a/levels/it/low-level/blob-create b/levels/it/low-level/blob-create new file mode 100644 index 0000000..86f6254 --- /dev/null +++ b/levels/it/low-level/blob-create @@ -0,0 +1,38 @@ +[description] + +At its core, Git is very simple. It stores "objects", which are basically files identified by an "identifier" (short: ID). + +There are four types of objects: blobs, trees, commits, and tags. The simplest type is a "blob", which is just a piece of text. + +Let's create some blobs! To do that, create a file with the desired content, and then use + + git hash-object -w + +The flag -w means "write", and tells Git to actually write the new blob to the disk. + +Create three new blobs! + +[congrats] + +Tip: You can also use a command like this to create a blob in a single line: + + echo "awesome content" | git hash-object -w --stdin + +Did you already notice that you can drag and drop all objects? :) + +[setup] + +[setup goal] + +echo "Hi" > file1 +echo "Ho" > file2 +echo "Hu" > file3 +git hash-object -w file1 +git hash-object -w file2 +git hash-object -w file3 + +[win] + +BLOB_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep blob | wc -l) + +test "$BLOB_COUNT" -gt 2 diff --git a/levels/it/low-level/blob-remove b/levels/it/low-level/blob-remove new file mode 100644 index 0000000..bbc1b30 --- /dev/null +++ b/levels/it/low-level/blob-remove @@ -0,0 +1,27 @@ +[description] + +There's a simple command to remove all objects that are not referenced by anything: + + git prune + +Remove all blobs in this repository. + +[congrats] + +Generally, `git prune` will be useful if you want to clean up some objects you made. + +Alternatively, you can also click the "Reload" button to restart a level. + +[setup] + +echo "My master password is a1b2c3d4e5" | git hash-object -w --stdin +echo "This blob really should not exist" | git hash-object -w --stdin +echo "This is a virus" | git hash-object -w --stdin + +[setup goal] + +[win] + +OBJECT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | wc -l) + +test "$OBJECT_COUNT" -eq 0 diff --git a/levels/it/low-level/commit-create b/levels/it/low-level/commit-create new file mode 100644 index 0000000..79a8e52 --- /dev/null +++ b/levels/it/low-level/commit-create @@ -0,0 +1,37 @@ +[description] + +So a tree describes a directory structure at a specific point in time. + +It would be nice if we could remember when that state existed, and who authored it, right? + +Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using + + git commit-tree -m "Description of your commit" + +Make a commit from the tree in this repository! + +[setup] + +touch empty_file +git add . +git write-tree + +rm empty_file +git update-index --remove empty_file + +[setup goal] + +touch empty_file +git add . +git write-tree + +rm empty_file +git update-index --remove empty_file + +git commit-tree 3185 -m 'Clever commit message' + +[win] + +COMMIT_COUNT=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | wc -l) + +test "$COMMIT_COUNT" -gt 0 diff --git a/levels/it/low-level/commit-parents b/levels/it/low-level/commit-parents new file mode 100644 index 0000000..a2efb11 --- /dev/null +++ b/levels/it/low-level/commit-parents @@ -0,0 +1,31 @@ +[description] + +When using the commit-tree command, you can optionally specify a parent: + + git commit-tree -m "Description" -p + +Make a string of three commits! + +Hint: You'll need a tree object. What could be the easiest way to obtain one? + +[setup] + +[setup goal] + +git write-tree +FIRST_COMMIT=$(git commit-tree 4b82 -m 'First commit :O') +SECOND_COMMIT=$(git commit-tree 4b82 -p $FIRST_COMMIT -m 'Second commit :D') +THIRD_COMMIT=$(git commit-tree 4b82 -p $SECOND_COMMIT -m 'Third commit \o/') + +[win] + +COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ") + +for COMMIT in $COMMITS; do + echo a commit named $COMMIT + if [ $(git rev-list $COMMIT | wc -l) -ge 3 ]; then + return 0 + fi +done + +return 1 diff --git a/levels/it/low-level/commit-rhombus b/levels/it/low-level/commit-rhombus new file mode 100644 index 0000000..e320ca0 --- /dev/null +++ b/levels/it/low-level/commit-rhombus @@ -0,0 +1,30 @@ +[description] + +A commit can have multiple parents! You can specify the -p option multiple times, like this: + + git commit-tree -m "Description" -p -p + +Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them. + +[setup] + +[setup goal] + +TREE=$(git write-tree) +SOUTH=$(git commit-tree $TREE -m "South") +EAST=$(git commit-tree $TREE -m "East" -p $SOUTH) +WEST=$(git commit-tree $TREE -m "West" -p $SOUTH) +NORTH=$(git commit-tree $TREE -m "Nort" -p $EAST -p $WEST) + +[win] + +COMMITS=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep commit | cut -f1 -d" ") + +for COMMIT in $COMMITS; do + # My first parent's parents has to be the same as my second parent's parent. + if [ "$(git rev-parse --verify -q $COMMIT^1^)" = "$(git rev-parse --verify -q $COMMIT^2^)" ]; then + return 0 + fi +done + +return 1 diff --git a/levels/it/low-level/index-add b/levels/it/low-level/index-add new file mode 100644 index 0000000..633245c --- /dev/null +++ b/levels/it/low-level/index-add @@ -0,0 +1,37 @@ +[description] + +Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name! + +Git has a very powerful concept to store metadata related to blobs: the index! It's a list that relates blobs to filenames and access permissions. + +The most convenient option to add an entry to the index is via an existing file: + + echo "my content" > file + git update-index --add file + +Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like "directory/file"? + +[congrats] + +There's another way to add an entry to the index directly: + + git update-index --add --cacheinfo ,, + +The first three numbers of the mode describe the type of the entry, "100" is a regular file. + +The second three number describe the permissions. Only "644" (non-executable) and "755" (executable) are supported. + +You can insert the hash of an object into the terminal by right-clicking on it! :) + +[setup] + +[setup goal] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +[win] + +test "$(git ls-files | wc -l)" -ge 3 diff --git a/levels/it/low-level/index-remove b/levels/it/low-level/index-remove new file mode 100644 index 0000000..9816126 --- /dev/null +++ b/levels/it/low-level/index-remove @@ -0,0 +1,29 @@ +[description] + +To remove an entry from the index, use a command like this: + + git update-index --force-remove + +Remove all entries from the index! + +[setup] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +[setup goal] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +git update-index --force-remove file1 +git update-index --force-remove file2 +git update-index --force-remove file3 + +[win] + +test "$(git ls-files | wc -l)" -eq 0 diff --git a/levels/it/low-level/index-update b/levels/it/low-level/index-update new file mode 100644 index 0000000..047493d --- /dev/null +++ b/levels/it/low-level/index-update @@ -0,0 +1,33 @@ +[description] + +Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry! + +Put the content you want in a file with a matching name, and then run + + git update-index + +This will create a new blob, and update the hash of the entry to that blob. + +Update an entry in the index! + +[setup] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +[setup goal] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +echo "new content" > file1 +git update-index file1 + +[win] + +# This is not really a good test for the winning condition... +test "$(git ls-files -s | git hash-object --stdin)" != "10c4b28623e7e44e09f5a596450a50ab7ac31fbe" -a "$(git ls-files | wc -l)" -eq 3 diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/it/low-level/puzzle-apocalypse new file mode 100644 index 0000000..119784d --- /dev/null +++ b/levels/it/low-level/puzzle-apocalypse @@ -0,0 +1,41 @@ +[description] + +Delete all objects in this repository using git commands only! + +Useful commands: + + git prune + git reflog expire + +[setup] + +echo foo > foo +BLOB=$(git hash-object -w foo) +echo bar > bar +git add . +git commit -m "Initial commit" +echo blabber >> bar +git commit -a -m "Second commit" +git update-ref refs/important HEAD +git update-ref refs/interesting "$BLOB" + +[setup goal] + +echo foo > foo +BLOB=$(git hash-object -w foo) +echo bar > bar +git add . +git commit -m "Initial commit" +echo blabber >> bar +git commit -a -m "Second commit" +git update-ref refs/important HEAD +git update-ref refs/interesting "$BLOB" + +TREE=$(git mktree) +git read-tree $TREE +rm -rf .git/refs/* +rm -rf .git/objects/* + +[win] + +test "$(git cat-file --batch-check --batch-all-objects | wc -l)" -eq 0 diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/it/low-level/puzzle-precious-blob new file mode 100644 index 0000000..865cfdf --- /dev/null +++ b/levels/it/low-level/puzzle-precious-blob @@ -0,0 +1,28 @@ +[description] + +Create two trees pointing to the same blob! + +[setup] + +[setup goal] + +BLOB=$(echo "I am precious" | git hash-object -w --stdin) +git update-index --add --cacheinfo 100644,$BLOB,a +git write-tree +git update-index --force-remove a +git update-index --add --cacheinfo 100644,$BLOB,b +git write-tree +git update-index --force-remove b + +[win] + +TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") + +ALL_TREE_CHILDREN=$(for TREE in $TREES; do + git cat-file -p $TREE | cut -f1 | cut -f3 -d" " +done) + +NUMBER_OF_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | wc -l) +UNIQUE_CHILDREN=$(echo "$ALL_TREE_CHILDREN" | sort -u | wc -l) + +test "$NUMBER_OF_CHILDREN" -gt "$UNIQUE_CHILDREN" diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/it/low-level/puzzle-trees-all-the-way-down new file mode 100644 index 0000000..bc3e58a --- /dev/null +++ b/levels/it/low-level/puzzle-trees-all-the-way-down @@ -0,0 +1,34 @@ +[description] + +Construct a chain of three trees, which don't point to anything else. + +This is hard! The `git mktree` command might be useful. + +[setup] + +[setup goal] + +git mktree +TREE=$(echo -e "040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\tdir" | git mktree) +echo -e "040000 tree $TREE\tdir" | git mktree + +[win] + +TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") + +for TREE in $TREES; do + if [ "$(git cat-file -p $TREE | wc -l)" -eq 1 ]; then + if [ "$(git cat-file -p $TREE | cut -f1 | grep tree | wc -l)" -eq 1 ]; then + # So the tree has exactly one child, and it is a tree! + TREE2=$(git cat-file -p $TREE | cut -f1 | grep tree | cut -f3 -d" ") + if [ "$(git cat-file -p $TREE2 | wc -l)" -eq 1 ]; then + if [ "$(git cat-file -p $TREE2 | cut -f1 | grep tree | wc -l)" -eq 1 ]; then + # Same for its child! \o/ + return 0 + fi + fi + fi + fi +done + +return 1 diff --git a/levels/it/low-level/ref-create b/levels/it/low-level/ref-create new file mode 100644 index 0000000..1cc4bcf --- /dev/null +++ b/levels/it/low-level/ref-create @@ -0,0 +1,42 @@ +[description] + +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/ + +Make sure to always start a ref's name with "refs/"! That's a convention that helps Git find all refs you create. If you forget the "refs/", you will not see the ref. + +Create refs that point to all objects in this repository! + +[setup] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +[setup goal] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/a $BLOB1 +git update-ref refs/b $BLOB2 +git update-ref refs/c $TREE +git update-ref refs/d $COMMIT + +[win] + +OBJECTS=$(git cat-file --batch-check='%(objectname)' --batch-all-objects | sort) +REF_TARGETS=$(git show-ref -s | sort | uniq) +test "$OBJECTS" = "$REF_TARGETS" diff --git a/levels/it/low-level/ref-move b/levels/it/low-level/ref-move new file mode 100644 index 0000000..e3b29e3 --- /dev/null +++ b/levels/it/low-level/ref-move @@ -0,0 +1,41 @@ +[description] + +You can point refs to a new location using the same command you use to create them: + + git update-ref refs/ + +As an exercise, make all refs in this repository point to the tree object! + +[setup] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/a "$BLOB1" +git update-ref refs/b "$COMMIT" + +[setup goal] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/a "$BLOB1" +git update-ref refs/b "$COMMIT" + +for REF in $(git for-each-ref --format='%(refname)'); do + git update-ref "$REF" "$TREE" +done + +[win] + +test "$(git show-ref -s | sort -u)" = "c7863f72467ed8dd44f4b8ffdb8b57ca7d91dc9e" diff --git a/levels/it/low-level/ref-remove b/levels/it/low-level/ref-remove new file mode 100644 index 0000000..d1fa982 --- /dev/null +++ b/levels/it/low-level/ref-remove @@ -0,0 +1,41 @@ +[description] + +And finally, to delete a ref, use + + git update-ref -d refs/ + +Delete all refs! :P (Well, except for HEAD. HEAD is special.) + +[setup] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/best_blob_ever "$BLOB1" +git update-ref refs/beautiful_commit "$COMMIT" + +[setup goal] + +echo hello > hello +echo world > world +BLOB1=$(git hash-object -w hello) +BLOB2=$(git hash-object -w world) +git add . +TREE=$(git write-tree) +COMMIT=$(git commit-tree $TREE -m "Initial commit") + +git update-ref refs/best_blob_ever "$BLOB1" +git update-ref refs/beautiful_commit "$COMMIT" + +for REF in $(git for-each-ref --format='%(refname)'); do + git update-ref -d "$REF" +done + +[win] + +test "$(git show-ref | wc -l)" -eq 0 diff --git a/levels/it/low-level/sequence b/levels/it/low-level/sequence new file mode 100644 index 0000000..5feb0c8 --- /dev/null +++ b/levels/it/low-level/sequence @@ -0,0 +1,18 @@ +welcome +basics +blob-create +blob-remove +index-add +index-remove +index-update +tree-create +tree-read +tree-nested +commit-create +commit-parents +commit-rhombus +ref-create +ref-move +ref-remove +symref-create +symref-no-deref diff --git a/levels/it/low-level/symref-create b/levels/it/low-level/symref-create new file mode 100644 index 0000000..da933cb --- /dev/null +++ b/levels/it/low-level/symref-create @@ -0,0 +1,21 @@ +[description] + +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 + +Create a symbolic ref called "refs/rainbow"! + +[setup] + +[setup goal] + +BLOB=$(git hash-object -w --stdin) +git update-ref refs/double "$BLOB" +git symbolic-ref refs/rainbow refs/double + +[win] + +git symbolic-ref refs/rainbow diff --git a/levels/it/low-level/symref-no-deref b/levels/it/low-level/symref-no-deref new file mode 100644 index 0000000..458e669 --- /dev/null +++ b/levels/it/low-level/symref-no-deref @@ -0,0 +1,46 @@ +[description] + +When you have a symbolic ref (a ref pointing at another ref), and you decide you want it to be a regular ref again (pointing to an object), you're in for some trouble! :) + +What happens when you try pointing the symbolic ref directly to the blob using `git update-ref`? + +Oops! Turns out that when you reference a symbolic ref, it acts as if you had specified the ref it points to. To de-symbolic-ize it, use the `--no-deref` option directly after `update-ref`! + +Weird, huh? + +[congrats] + +Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs! + +You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :) + +Everything else is just convention and high-level commands that make interacting with the objects more convenient. + +We haven't covered: + +- tag objects (they are the fourth object type - a bit like refs with a description and an author) +- configuration (allows you to specify remote repositories, for example) +- working with local files (which is, uh, arguably pretty important :P) + +Thanks for playing! You're welcome to check out the "puzzle" levels in the dropdown, some of them are more advanced! + +[setup] + +BLOB1=$(echo delicious | git hash-object -w --stdin) +BLOB2=$(echo very | git hash-object -w --stdin) +git update-ref refs/curly "$BLOB1" +git symbolic-ref refs/fries refs/curly + +[setup goal] + +BLOB1=$(echo delicious | git hash-object -w --stdin) +BLOB2=$(echo very | git hash-object -w --stdin) +git update-ref refs/curly "$BLOB1" +git symbolic-ref refs/fries refs/curly + +git update-ref --no-deref refs/fries "$BLOB2" + +[win] + +git symbolic-ref refs/fries && return 1 +test "$(git show-ref -s refs/fries)" = "035e2968dafeea08e46e8fe6743cb8123e8b9aa6" diff --git a/levels/it/low-level/tree-create b/levels/it/low-level/tree-create new file mode 100644 index 0000000..3da3618 --- /dev/null +++ b/levels/it/low-level/tree-create @@ -0,0 +1,35 @@ +[description] + +After carefully building the index we want, it would be nice to save a permanent snapshot of it, right? + +This is what the second type of objects is for: trees! You can convert the index into a tree using + + git write-tree + +Try it! :) + +[congrats] + +Nice! + +Can you make a different tree? Modify the index, then call `git write-tree` again! + +[setup] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +[setup goal] + +echo "file 1" > file1 +echo "file 2" > file2 +echo "file 3" > file3 +git add . + +git write-tree + +[win] + +git cat-file -p 21a638f28022064c1f1df20844278b494d197979 diff --git a/levels/it/low-level/tree-nested b/levels/it/low-level/tree-nested new file mode 100644 index 0000000..c7afce8 --- /dev/null +++ b/levels/it/low-level/tree-nested @@ -0,0 +1,38 @@ +[description] + +Trees can also point to other trees! This way, they can describe nested directory structures. + +When you add a file inside of a directory to the index, and then call `git write-tree`, it will create a nested tree for the directory, and attach the blob to it. + +To solve this level, build a little stick figure, as shown on the left - a tree that points to two blobs, as well to a tree that points to two blobs. + +[setup] + +[setup goal] + +echo "I'm the left arm" > arm1 +echo "I'm the right arm" > arm2 +mkdir hip +echo "I'm the left leg" > hip/leg1 +echo "I'm the right leg" > hip/leg2 +git add . +git write-tree + +[win] + +TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-objects | grep tree | cut -f1 -d" ") + +for OUTER_TREE in $TREES; do + NUMBER_OF_BLOB_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep blob | wc -l) + NUMBER_OF_TREE_CHILDREN=$(git cat-file -p $OUTER_TREE | cut -f2 -d" " | grep tree | wc -l) + + if [ $NUMBER_OF_BLOB_CHILDREN -eq 2 -a $NUMBER_OF_TREE_CHILDREN -eq 1 ]; then + TREE_CHILD=$(git cat-file -p $OUTER_TREE | cut -f1 | grep tree | cut -d" " -f3) + NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD=$(git cat-file -p $TREE_CHILD | cut -f2 -d" " | grep blob | wc -l) + if [ $NUMBER_OF_BLOB_CHILDREN_OF_TREE_CHILD -eq 2 ]; then + return 0 + fi + fi +done + +return 1 diff --git a/levels/it/low-level/tree-read b/levels/it/low-level/tree-read new file mode 100644 index 0000000..ba8c440 --- /dev/null +++ b/levels/it/low-level/tree-read @@ -0,0 +1,51 @@ +[description] + +As soon as you have some tree objects, you can always read them and set the index exactly to their content! Unsurprisingly, the command is called + + git read-tree + +For , you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal! + +Try reading some of the trees in this repository into the index! + +[setup] + +EMPTY_TREE=$(git write-tree) + +echo "file 1" > file1 +echo "file 2" > file2 +git add . +git write-tree + +rm * +echo "file A" > fileA +echo "file B" > fileB +echo "file C" > fileC +git add . +TRIPLE_TREE=$(git write-tree) + +git read-tree "$EMPTY_TREE" + +[setup goal] + +EMPTY_TREE=$(git write-tree) + +echo "file 1" > file1 +echo "file 2" > file2 +git add . +git write-tree + +rm * +echo "file A" > fileA +echo "file B" > fileB +echo "file C" > fileC +git add . +TRIPLE_TREE=$(git write-tree) + +git read-tree "$EMPTY_TREE" + +git read-tree "$TRIPLE_TREE" + +[win] + +test "$(git ls-files | wc -l)" -gt 0 diff --git a/levels/it/low-level/welcome b/levels/it/low-level/welcome new file mode 100644 index 0000000..d669136 --- /dev/null +++ b/levels/it/low-level/welcome @@ -0,0 +1,33 @@ +[description] + +This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3 + +You can interact with the repository labelled "yours" by typing Bash commands in the terminal below! The visualization will show you its internal status. + +Let's get started by initializing an empty Git repository in the current directory by typing: + + git init + +[congrats] + +Well done! + +An empty Git repository is... well, quite empty. The only thing that always exists is a reference called "HEAD" - we'll learn what that is later! + +But first, let's look at some basics! + +(Click "Next Level" as soon as you're ready!) + +[setup] + +rm -rf .git + +[setup goal] + +rm -rf .git + +git init + +[win] + +test -d .git diff --git a/levels/it/merge/conflict b/levels/it/merge/conflict new file mode 100644 index 0000000..645b5ed --- /dev/null +++ b/levels/it/merge/conflict @@ -0,0 +1,47 @@ +title = Contraddizioni +cards = checkout commit-auto merge reset-hard + +[description] + +A volte le linee temporali si contraddicono a vicenda. + +Per esempio, in questo caso, un nostro cliente vuole che queste linee temporali siano unite ma hanno mangiato cose differenti in entrambe le linee temporali. + +Prova ad unirle! Noterai che c'è un conflitto! La macchina del tempo ti lascerà decidere come procedere: puoi modificare l'elemento problematico, ti verranno mostrate le parti che vanno in conflitto. Puoi mantenere una delle due versioni o creare una combinazione di entrambe! Poi rimuovi i marcatori >>>, <<<, e === e crea un nuovo commit per finalizare l'unione! + +La tua linea temporale definitiva è "main". + +[setup] + +echo "Si è appena svegliato. È affamato." > sam +git add . +git commit -m "L'inizio" + +git checkout -b pancakes +echo "Ha fatto colazione con pancakes ai mirtilli e sciroppo d'acero." > sam +git add . +git commit -m "Pancakes!" + +echo " +È al lavoro." >> sam +git commit -am "Va al lavoro" + +git checkout -b muesli main +echo "Ha fatto colazione con muesli all'avena e fragole." > sam +git add . +git commit -m "Muesli!" + +echo " +È al lavoro." >> sam +git commit -am "Va al lavoro" + +git checkout main + +[win] + +# Crea un compromesso tra le due colazioni nel branch "main". +git rev-parse main^ && test "$(git rev-parse main^1^^)" = "$(git rev-parse main^2^^)" + +[congrats] + +Yum, questa sembra una buona colazione! diff --git a/levels/it/merge/merge b/levels/it/merge/merge new file mode 100644 index 0000000..9050cb7 --- /dev/null +++ b/levels/it/merge/merge @@ -0,0 +1,82 @@ +title = Unire le linee temporali +cards = checkout commit-auto merge + +[description] + +Ecco un trucco per domire un pò più a lungo: svolgi tutte le tue attività mattutine in universi paralleli, e poi uniscile! + +[setup] + +echo "Non hai una baguette. + +Non hai caffe. + +Non hai una ciambella." > you + +git add . +git commit -m "L'inizio" + +echo "Hai una baguette. + +Non hai caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Compri una baguette" + +echo "Mangi una baguette. + +Non hai caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Mangi la baguette" + +git checkout HEAD~2 +echo "Non hai una baguette. + +Hai caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Compri un pò di caffe" + +echo "Non hai una baguette. + +Bevi il caffe. + +Non hai una ciambella." > you +git add . +git commit -m "Bevi il caffe" + +git checkout HEAD~2 +echo "Non hai una baguette. + +Non hai caffe. + +Hai una ciambella." > you +git add . +git commit -m "Compri una ciambella" + +echo "Non hai una baguette. + +Non hai caffe. + +Mangi una ciambella." > you +git add . +git commit -m "Mangi la ciambella" + +git checkout --detach +git branch -D main + +[win] + +# Crea una situazione dove consumi una baguette, un caffe e una ciambella. +{ git show HEAD:you | grep "Mangi.*baguette"; } && { git show HEAD:you | grep "Bevi.*caffe"; } && { git show HEAD:you | grep "Mangi.*ciambella"; } + +# Crea (e spostati su) un commit di unione. +test "$(git log --pretty=%P -n 1 HEAD | wc -w)" -ge 2 + +[congrats] + +Mi chiedo se sei più rilassato quando *dormi* in linee temporali parallele... diff --git a/levels/it/merge/merge-abort b/levels/it/merge/merge-abort new file mode 100644 index 0000000..efabb5d --- /dev/null +++ b/levels/it/merge/merge-abort @@ -0,0 +1,54 @@ +title = Interrompere un merge +cards = checkout commit-auto merge merge-abort + +[description] + +Può capitare che tu voglia unire il contenuto di due commit ma si verifica un conflitto che al momento non vuoi risolvere. + +In queste situazioni, puoi interrompere il merge per riprendere successivamente. Usa + git merge --abort +mentre sei nel processo di merge. + +Prova a unire i due commit e interrompi la procedura di merge. + +[setup] + +echo "Un nuovo giorno sta iniziando" > you + +git add . +git commit -m "Start" + +echo "Stai camminando sulla corsia principale." >> you + +git add . +git commit -m "Corsia Principale" + + +git checkout HEAD~1 + +echo "Stai camminando sulla corsia laterale." >> you + +git add . +git commit -m "Corsia laterale" + +git checkout HEAD~1 + +git branch -D main + +[actions] + +if test -f .git/MERGE_HEAD; then + touch .git/secretfile +fi + +[win] + +# Hai provato a fare il merge? +test -f .git/secretfile + +# Hai interrotto il merge? +test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^ + +[congrats] + +Aaah, faremo il merge più tardi... diff --git a/levels/it/merge/sequence b/levels/it/merge/sequence new file mode 100644 index 0000000..2e1aa81 --- /dev/null +++ b/levels/it/merge/sequence @@ -0,0 +1,3 @@ +merge +conflict +merge-abort \ No newline at end of file diff --git a/levels/it/remotes/friend b/levels/it/remotes/friend new file mode 100644 index 0000000..c6f46c8 --- /dev/null +++ b/levels/it/remotes/friend @@ -0,0 +1,47 @@ +title = Amici +cards = pull push commit-auto checkout + +[description] + +Il tuo amico ha aggiunto un'altra linea alla tua tesi! Prendilo, aggiungine un'altra e reinvialo! + +Fate botta e risposta fino a che non ti ritrovi ad avere cinque linee! + +[setup yours] + +echo "Linea 1" > essay +git add . +git commit -m "Una linea" + +git push -u friend main + +[setup friend] + +git checkout main +echo "Linea 2, gnihihi" >> essay +git commit -am "Un'altra linea" + +[actions friend] + +if test "$(git log --oneline | wc -l)" -eq 3; then + git reset --hard main # Necessario perché la directory di lavoro non è aggiornata quando viene inviata all'amico + echo "Linea 4, blurbblubb" >> essay + git commit -am "Linea finale" + hint "Oh bene, Ho aggiunto la quarta linea!" +fi + +[win] + +# Ricevuto la seconda linea dal tuo amico. +git show HEAD:essay | grep gnihihi + +# Ricevuto la quarta linea dal tuo amico. +git show HEAD:essay | grep blurbblubb + +[win friend] + +# L'amico ha ricevuto la terza linea da te. +test "$(git show HEAD:essay | wc -l)" -ge 3 + +# L'amico ha ricevuto la quinta linea da te. +test "$(git show HEAD:essay | wc -l)" -ge 5 diff --git a/levels/it/remotes/problems b/levels/it/remotes/problems new file mode 100644 index 0000000..764a6fc --- /dev/null +++ b/levels/it/remotes/problems @@ -0,0 +1,33 @@ +title = Problemi +cards = checkout add pull push commit-auto merge + +[description] + +Entrambi, tu ed il tuo amico, avete lavorato sullo stesso file e volete sincronizare! + +[setup yours] + +echo "Il capannone delle bici dovrebbe essere ???" > file +git add . +git commit -m "inizio" + +git push -u friend main + +echo "Il capannone delle bici dovrebbe essere verde" > file + +[setup friend] + +git checkout main + +echo "Il capannone delle bici dovrebbe essere blu" > file +git commit -a -m "versione dell'amico" + +[win] + +# Fai il commit delle tue modifiche locali. +test "$(git status -s)" = "" + +[win friend] + +# Quarda il suggerimento dell'amico, trova un compromesso e rimandalo in dietro. +git rev-parse main^ && test "$(git rev-parse main^1^)" = "$(git rev-parse main^2^)" diff --git a/levels/it/remotes/sequence b/levels/it/remotes/sequence new file mode 100644 index 0000000..13c5715 --- /dev/null +++ b/levels/it/remotes/sequence @@ -0,0 +1,2 @@ +friend +problems diff --git a/levels/it/sandbox/empty b/levels/it/sandbox/empty new file mode 100644 index 0000000..1f954a5 --- /dev/null +++ b/levels/it/sandbox/empty @@ -0,0 +1,7 @@ +title = Empty sandbox + +[description] + +This is an empty sandbox you can play around in. + +[setup] diff --git a/levels/it/sandbox/remote b/levels/it/sandbox/remote new file mode 100644 index 0000000..f0ca2c0 --- /dev/null +++ b/levels/it/sandbox/remote @@ -0,0 +1,22 @@ +title = Sandbox with a remote +cards = checkout commit-auto pull fetch push + +[description] + +Here's a sandbox with a remote! Try pulling, fetching, or pushing! + +How can you push tags and branches on a remote? How can you delete them again? + +[setup yours] + +echo "Line 1" > essay +git add . +git commit -m "Initial commit" + +git push -u friend main + +[setup friend] + +git checkout main +echo "Line 2" >> essay +git commit -am "Another line" diff --git a/levels/it/sandbox/sequence b/levels/it/sandbox/sequence new file mode 100644 index 0000000..29aa91f --- /dev/null +++ b/levels/it/sandbox/sequence @@ -0,0 +1,3 @@ +empty +remote +three-commits diff --git a/levels/it/sandbox/three-commits b/levels/it/sandbox/three-commits new file mode 100644 index 0000000..3e5308c --- /dev/null +++ b/levels/it/sandbox/three-commits @@ -0,0 +1,26 @@ +title = Sandbox with three commits +cards = checkout add reset-file checkout-file commit merge rebase + +[setup] + +echo "You wake up." > you +git add . +git commit -m "The beginning" + +echo "You drink coffee." >> you +git commit -am "First things first" + +echo "You hear a knock on the door." >> you +git commit -am "Who's there?" + +git branch not_main + +[description] + +Here's a sandbox you can play around in. + +You can use both the playing cards, as well as the terminal. This is a real Git terminal! Fun things to try: + +- Make a commit that merges three timelines together at once! +- Create and delete some tags! +- Make a timeline that's completely independent of the rest! diff --git a/levels/it/sequence b/levels/it/sequence new file mode 100644 index 0000000..cefcd7a --- /dev/null +++ b/levels/it/sequence @@ -0,0 +1,13 @@ +intro +files +branches +merge +index +remotes +changing-the-past +shit-happens +workflows +bisect +stash +tags +sandbox diff --git a/levels/it/shit-happens/bad-commit b/levels/it/shit-happens/bad-commit new file mode 100644 index 0000000..0febbc2 --- /dev/null +++ b/levels/it/shit-happens/bad-commit @@ -0,0 +1,31 @@ +title = Annullare un cattivo commit +cards = reset commit-a + +[description] + +Oh no, abbiamo fatto un cattivo commit! Come possiamo annullare un commit e tornare ad un punto dove poter riprovare? + +La risposta è usare `git reset [commit]` che fa due cose: + +- Reimposta il riferimento (ref) del ramo corrente al commit che hai specificato. +- Reimposta l'indice a quel commit. + +Non cambia la tua directory di lavoro in nessun modo, il che significa che dopo puoi provare a rifare il commit che desideri. + + +[setup] + +echo "1 2 3 4" > numbers +git add . +git commit -m "commit iniziale" +echo "1 2 3 4 5 6 7 8 9 11" > numbers +git commit -am "Più numerrrrri" + +[win] + +# Nel primo commit il file numbers contiene i numeri da 1 a 10. +test "$(git show main:numbers)" = "1 2 3 4 5 6 7 8 9 10" +# Il messaggio di questo commit è "Più numeri". +git log -1 --oneline | grep "Più numeri" +# Il commit con l'errore si battitura non fa più parte del ramo principale. +git log --oneline | grep -v "rrrrr" diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/it/shit-happens/pushed-something-broken new file mode 100644 index 0000000..cb7f2fb --- /dev/null +++ b/levels/it/shit-happens/pushed-something-broken @@ -0,0 +1,54 @@ +title = Ho fatto il push di qualcosa di rotto +cards = revert push + +[description] + +Stavamo parlando di come annulare un commit e correggerlo. Questo ci aiuta solo quando non lo abbiamo già inviato al server remoto. Quando questo succede e vuoi annullare completamente l'effetto del commit la tua migliore opzione è `git revert` + +[setup] + +echo "questo va bene + +? + +? + +?" > text +git add . +git commit -m bene +echo "questo va bene + +anche questo va bene + +? + +?" > text +git commit -am "anche questo bene" +echo "questo va bene + +anche questo va bene + +questo è veramente sbagliato + +?" > text +git commit -am "veramente sbagliato" +echo "questo va bene + +anche questo va bene + +questo è veramente sbagliato + +questo va nuovamente bene" > text +git commit -am "nuovamente bene" + +git push team main +git branch -u team/main main + +[setup team] + +[win team] + +# Il ramo main del Team non contiene più niente di sbagliato. +! { git show main:text | grep -q "veramente sbagliato"; } +# e la cronologia non è stata modificata. +git show main^:text | grep -q "veramente sbagliato" diff --git a/levels/it/shit-happens/reflog b/levels/it/shit-happens/reflog new file mode 100644 index 0000000..23f7bdc --- /dev/null +++ b/levels/it/shit-happens/reflog @@ -0,0 +1,26 @@ +title = Torna dove eri prima +cards = checkout reflog + +[description] + +Diciamo che stavi guardando qualcosa nel passato e poi sei tornato al ramo principale (main). + +Ma poi ti sei distratto e dopo la pausa pranzo, non riesci a ricordare cosa stavi facendo prima. Come puoi scoprirlo? + +C'è un comodo comando che ti mostra tutti i posti a cui la tua HEAD ha puntato in passato: + + git reflog + +[setup] + +for i in {1..10}; do + git commit --allow-empty -m $i + git branch $i +done +git checkout 3 +git checkout main + +[win] + +# Trova cosa stavi facendo prima e tornaci! +test "$(git rev-parse HEAD)" = "$(git rev-parse 3)" diff --git a/levels/it/shit-happens/restore-a-file b/levels/it/shit-happens/restore-a-file new file mode 100644 index 0000000..16cf0dc --- /dev/null +++ b/levels/it/shit-happens/restore-a-file @@ -0,0 +1,22 @@ +title = Recuperare un file cancellato +cards = checkout + +[description] + +Oops - Hai cancellato il file "essay" dove hai lavorato tutta la notte! + +Stai sereno, Git è qui per aiutare! Puoi usare `git checkout` per recuperare il file! + +[setup] + +echo importante > essay +git add . +git commit -m "Commit iniziale" +echo "contenuto importante" > essay +git commit -am "Ottimizzato essay" +rm essay + +[win] + +# Recupera il file "essay" che contiene "contenuto importante" +test "$(cat essay)" = "contenuto importante" diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/it/shit-happens/restore-a-file-from-the-past new file mode 100644 index 0000000..c15f2a3 --- /dev/null +++ b/levels/it/shit-happens/restore-a-file-from-the-past @@ -0,0 +1,22 @@ +title = Recuperare un file dal passato +cards = checkout checkout-from commit + +[description] + +Questo è un problema simile: preferivi il file "essay" del primissimo commit e vuoi riaverlo indietro! Bene, checkout puo anche recuperare le cose dai vecchi commits. +Così: + + git checkout [commit] [file] + +[setup] + +echo "versione buona" > essay +git add . +git commit -m "commit iniziale" +echo "versione cattiva" > essay +git commit -am "\"Migliorato\" essay" + +[win] + +# Prendi la prima versione di "essay" e crea un nuovo commit con essa. +test "$(git show main:essay)" = "versione buona" diff --git a/levels/it/shit-happens/sequence b/levels/it/shit-happens/sequence new file mode 100644 index 0000000..663d5d9 --- /dev/null +++ b/levels/it/shit-happens/sequence @@ -0,0 +1,5 @@ +restore-a-file +restore-a-file-from-the-past +bad-commit +pushed-something-broken +reflog diff --git a/levels/it/stash/sequence b/levels/it/stash/sequence new file mode 100644 index 0000000..9dd02f7 --- /dev/null +++ b/levels/it/stash/sequence @@ -0,0 +1,5 @@ +stash +stash-pop +stash-clear +stash-branch +stash-merge diff --git a/levels/it/stash/stash b/levels/it/stash/stash new file mode 100644 index 0000000..6a4bc61 --- /dev/null +++ b/levels/it/stash/stash @@ -0,0 +1,45 @@ +title = Stashing +cards = checkout commit-auto merge reset-hard + +[description] + +You will encounter situations in which you are working on your project but you need to +put your current changes aside temporarily. To do so, you can use the stash function. Use + git stash push +to add your current changes to the stash stack. + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Apple Pie:" > recipe + +git add . +git commit -m "creating a recipe" + +echo "- 4 Apples" >> recipe + +git add . +git commit -m "Adding ingredients" + +echo "- 500g Flour" >> recipe + +git checkout main + +[win] + +# Did you stash the current changes? +test "$(git stash list | wc -l)" -ge 1 + +[actions] + + + +[congrats] + +Nice stash you got there! :) diff --git a/levels/it/stash/stash-branch b/levels/it/stash/stash-branch new file mode 100644 index 0000000..e51e4d2 --- /dev/null +++ b/levels/it/stash/stash-branch @@ -0,0 +1,47 @@ +title = Ramo dalla scorta +cards = checkout commit-auto merge reset-hard + +[description] + +Se vuoi matenere tutte le modifiche ma non appartengono al ramo principale, puoi facilemnte creare un nuovo ramo dai cambiamenti dalle modifiche nascoste. Usando + git stash branch +Se vuoi solo usare l'ultimo elemento della scorta puoi lasciare vuota l'opzione . + +Crea un nuovo ramo dalle modifiche nascoste!! + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Torta di mele:" > recipe + +git add . +git commit -m "creata una ricetta" + +echo "- 4 Mele" >> recipe + +git add . +git commit -m "Aggiunto ingredienti" + +echo "- 500g Farina" >> recipe +git stash push + +git checkout main + +[win] + +# Hai creato un nuovo ramo dai cambiamenti nascosti? +test "$(git branch --list| wc -l)" -ge 2 + +[actions] + + + +[congrats] + +I cambiamenti nascosti sono nel nuovo ramo! :) diff --git a/levels/it/stash/stash-clear b/levels/it/stash/stash-clear new file mode 100644 index 0000000..32f82cb --- /dev/null +++ b/levels/it/stash/stash-clear @@ -0,0 +1,57 @@ +title = Pulire la scorta +cards = checkout commit-auto merge reset-hard + +[description] + +Se vuoi controllare la tua scorta, usa il comando + git stash list + +Oh, non vuoi mantenere i tuoi cambiamenti nella scorta? C'è un modo per farlo? Poi vai avanti e pulisci la scorta con + git stash clear +Se vuoi solo scartare un certo elemento dalla scorta, puoi usare + git stash drop + +Pulisci la tua pila di scorta! + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Torta di mele:" > recipe + +git add . +git commit -m "creata una ricetta" + +echo "- 4 Mele" >> recipe + +git add . +git commit -m "Aggiunto ingredienti" + +echo "- 500g Farina" >> recipe +git stash push + +echo "- 200g Zucchero" >> recipe +git stash push + +echo "- Pizzico di sale" >> recipe +git stash push + +git checkout main + +[win] + +# Hai pulito la tua pila di scorta? +test "$(git stash list | wc -l)" -eq 0 + +[actions] + + + +[congrats] + +Pulito tutto! :) diff --git a/levels/it/stash/stash-merge b/levels/it/stash/stash-merge new file mode 100644 index 0000000..a4ed759 --- /dev/null +++ b/levels/it/stash/stash-merge @@ -0,0 +1,53 @@ +title = Unire la scorta spuntata +cards = checkout commit-auto merge reset-hard + +[description] + +Quando vuoi riapplicare i cambiamenti ma hai continuato a lavora nei tuoi file, potresti ricevere un conflitto di unione! Facciamo un pò di pratica con questa situazione. +Fai uscire le modifiche dalla scorta con + git stash pop +e risolvi i conflitti di unione. Invia la soluzione dei cambiamenti e dopo pulisci la scorta. + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Torta di mele:" > recipe + +git add . +git commit -m "creata una ricetta" + +echo "- 4 Mele" >> recipe + +git add . +git commit -m "Aggiunti ingredienti" + +echo "- 500g Farina" >> recipe + +git stash push + +echo "- Pizzico di sale" >> recipe + +git checkout main +git add recipe + +[win] + +# Hai rislto i conflitti ed inviato? +{ git show HEAD | grep "Farina"; } && { git show HEAD | grep "Sale"; } + +# Hai pulito la pila di scorta? +test "$(git stash list | wc -l)" -eq 0 + +[actions] + + + +[congrats] + +Yay, hai riavuto le tue modifiche in dietro! :) diff --git a/levels/it/stash/stash-pop b/levels/it/stash/stash-pop new file mode 100644 index 0000000..cffc30d --- /dev/null +++ b/levels/it/stash/stash-pop @@ -0,0 +1,46 @@ +title = Pop dalla scorta +cards = checkout commit-auto merge reset-hard + +[description] + +Quando hai nascosto le tue modifiche e vuoi riapplicarle nella tua directory di lavoro, puoi usare + git stash pop +Questo rimuoverà i cambiamenti dalla pila di scorta. Se voui anche mantenere le modifiche della pila di scorta usa + git stash apply + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "Torta di mele:" > recipe + +git add . +git commit -m "creata una ricetta" + +echo "- 4 Mele" >> recipe + +git add . +git commit -m "Aggiunto ingredienti" + +echo "- 500g Farina" >> recipe + +git stash push +git checkout main + +[win] + +# Hai pop i cambiamenti dalla pila di scorta? +test "$(git stash list | wc -l)" -eq 0 + +[actions] + + + +[congrats] + +Yay, hai riavuto i tuoi cambiamenti in dietro! :) diff --git a/levels/it/tags/add-tag b/levels/it/tags/add-tag new file mode 100644 index 0000000..2351635 --- /dev/null +++ b/levels/it/tags/add-tag @@ -0,0 +1,53 @@ +title = Creare etichette +cards = checkout commit-auto merge reset-hard + +[description] + +Alcuni dei tuoi commit potrebbero essere commit speciali. Potresti aver raggiunto un traguargo o un nuovo numero di versione. + +Puoi contrassegnare questo commit con un flag spegiale chiamato 'tag'. + +Scrivi + + git tag + +per etichettare il tuo commit. + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "event 1" > elenco-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 1" + +echo "event 2" >> elenco-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 2" + +echo "event 3" >> elenco-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 3" + +git checkout --detach main + +[win] + +# Hai creato un nuovo tag? +test "$(git tag -l | wc -l)" -ge 1 + +[actions] + + + +[congrats] + +Bene! Hai etichettato il tuo primo commit :) diff --git a/levels/it/tags/add-tag-later b/levels/it/tags/add-tag-later new file mode 100644 index 0000000..49e17d4 --- /dev/null +++ b/levels/it/tags/add-tag-later @@ -0,0 +1,50 @@ +title = Etichettare dopo +cards = checkout commit-auto merge reset-hard + +[description] + +Ma cosa succede se ti dimentichi di etichettare il corrente commit? +No c'è problema! Puoi etichettare i vecchi commit tramite + + git tag + +Etichetta il commit "Aggiunta caratteristica 2" con il nome "v1"! + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "event 1" > elenco-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 1" + +echo "event 2" >> elenco-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 2" + +echo "event 3" >> elecno-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 3" + +git checkout --detach main + +[win] + +# Hai creato una nuova etichetta? +test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" + +[actions] + + + +[congrats] + +Motlo bene :) diff --git a/levels/it/tags/remote-tag b/levels/it/tags/remote-tag new file mode 100644 index 0000000..0a68035 --- /dev/null +++ b/levels/it/tags/remote-tag @@ -0,0 +1,58 @@ +title = Etichette remote +cards = pull push commit-auto checkout + +[description] + +Quando lavori con un repositor remoto, le etichette non sono messe o prese automaticamente. + +Puoi inviare un tag con + git push +O tutti i tags con + git push --tags + +Rimuovere i tags nel repository remoto con + git push --delete + +Puoi anche sincronizzare + git fetch --prune --prune-tags + + +Aggiungere un nome di tag "v2" nell'ultimo commit ed inviarlo nel remoto, anche prendere il tag "v1" in quello locale. +[setup yours] + +git checkout main + +git checkout main +echo "Condivisione dello spazzolino" > project-ideas +git add . +git commit -m "Prima idea" + +echo "Il mio telefono è sottosopra? App" >> project-ideas +git commit -am "Un'altra idea" + + + +git push friend main + +git branch -u friend/main main + +[setup friend] + + + +[actions friend] + +git tag v1 HEAD~1 + +[win] +# v1 tag nel tuo repo +test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" + +# v2 tag nel tuo repo +test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" + + +[win friend] + +# v2 tag nel remoto +test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" diff --git a/levels/it/tags/remove-tag b/levels/it/tags/remove-tag new file mode 100644 index 0000000..2d2dfd9 --- /dev/null +++ b/levels/it/tags/remove-tag @@ -0,0 +1,53 @@ +title = Rimuovere etichette +cards = checkout commit-auto merge reset-hard + +[description] + +Hai aggiunto molte ectichette? Non c'è problema! Cancellali con + + git tag -d + +Rimuovi tutti i tag in questo repository! + +--- +tipp1 +--- +tipp2 +--- +tipp3 + +[setup] + +echo "event 1" > elenco-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 1" + +echo "event 2" >> elenco-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 2" + +echo "event 3" >> elenco-caratteristiche + +git add . +git commit -m "Aggiunta caratteristica 3" + +git tag v1 HEAD~2 +git tag v2 HEAD~1 +git tag v3 + +git checkout --detach main + +[win] + +# Hai riosso tutte le etichette? +test "$(git tag -l | wc -l)" -eq 0 + +[actions] + + + +[congrats] + +Molto bene :) diff --git a/levels/it/tags/sequence b/levels/it/tags/sequence new file mode 100644 index 0000000..fd63d9c --- /dev/null +++ b/levels/it/tags/sequence @@ -0,0 +1,4 @@ +add-tag +remove-tag +add-tag-later +remote-tag diff --git a/levels/it/unused/checkout b/levels/it/unused/checkout new file mode 100644 index 0000000..9d9c957 --- /dev/null +++ b/levels/it/unused/checkout @@ -0,0 +1,31 @@ +title = Getting the last version +cards = checkout-file + +[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! :/ + +But Git is here to help! To discard all changes your cat made, and go back to the version in the last commit, use `checkout`! + +[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] + +# Restore the version from the last commit. +cat essay.txt | grep D diff --git a/levels/it/unused/clone b/levels/it/unused/clone new file mode 100644 index 0000000..8459c08 --- /dev/null +++ b/levels/it/unused/clone @@ -0,0 +1,20 @@ +title = Cloning a repo +cards = clone commit-auto pull push + +[description] + +Get your friend's repo using clone, change something, push it back. + +[setup] + +rm -rf .git + +[setup friend] + +echo hi > file +git add . +git commit -m "Initial commit" + +[win friend] + +test "$(git show main:file)" != hi diff --git a/levels/it/unused/commit b/levels/it/unused/commit new file mode 100644 index 0000000..fd84cc9 --- /dev/null +++ b/levels/it/unused/commit @@ -0,0 +1,27 @@ +title = Make a commit \o/ +cards = add reset checkout commit + +[description] + +For practice, make a commit where all files contain an "x"! + +[setup] + +echo a > a +echo x > b +echo x > c +git add . +git commit -m "Initial commit" +echo x > a +echo b > b +git add b +echo c > c + +[win] + +# File a contains "x" in the last main commit. +test "$(git show main:a)" = x +# File b contains "x" in the last main commit. +test "$(git show main:b)" = x +# File c contains "x" in the last main commit. +test "$(git show main:c)" = x diff --git a/levels/it/unused/commit-a b/levels/it/unused/commit-a new file mode 100644 index 0000000..747a009 --- /dev/null +++ b/levels/it/unused/commit-a @@ -0,0 +1,26 @@ +title = Make a commit, but faster! +cards = add reset checkout commit commit-a + +[description] + +There is a time-saving trick, where instead of a plain `git commit`, you can use + + git commit -a + +This will automatically add all changes you made to local files! Very convenient. + +[setup] + +echo a > a +echo b > b +echo c > c +git add . +git commit -m "Initial commit" +echo x > a +echo x > b +echo x > c + +[win] + +# Make a commit where all files contain "x". +test "$(git show main:a)" = x && test "$(git show main:b)" = x && test "$(git show main:c)" = x diff --git a/levels/it/unused/fetch b/levels/it/unused/fetch new file mode 100644 index 0000000..377355a --- /dev/null +++ b/levels/it/unused/fetch @@ -0,0 +1,35 @@ +title = Fetching from remotes +cards = checkout fetch commit-auto + +[description] + +Here, you already have two remotes configured! You can list them using `git remote`. + +Fetch from both, and look at the suggestions. + +Then, make a new commit on top of your original one that introduces a compromise. + +[setup] + +echo "The bikeshed should be ???" > proposal +git add . +git commit -m "What do you think?" + +[setup friend1] + +git pull yours main +echo "The bikeshed should be green" > proposal +git commit -am "Green" + +[setup friend2] + +git pull yours main +echo "The bikeshed should be blue" > proposal +git commit -am "Blue" + +[win] + +# Your proposal is acceptable for friend1. +git show main:proposal | git grep green +# Your proposal is acceptable for friend2. +git show main:proposal | git grep blue diff --git a/levels/it/unused/files-move b/levels/it/unused/files-move new file mode 100644 index 0000000..8f65710 --- /dev/null +++ b/levels/it/unused/files-move @@ -0,0 +1,27 @@ +title = No sleep required +cards = file-new file-delete file-rename + +[description] + +Actually, you decide that you don't need any sleep. + +Because of that, you won't require a bed, and can build some other piece of furniture from the wood! + + +[setup] + +echo A yellow cupboard with lots of drawers. > cupboard +echo A really big yellow shelf. > shelf +echo A comfortable, yellow bed with yellow cushions. > bed + +[win] + +# Rename the bed into something else, and give it a new description! +NUM_FILES="$(ls | wc -l)" +! test -f bed && test "$NUM_FILES" -ge 3 && ! grep -r "yellow bed" . + +[congrats] + +Neat! It even still looks a bit comfortable! + +You head out, eager for your first lesson at time travel school! diff --git a/levels/it/unused/index-mv b/levels/it/unused/index-mv new file mode 100644 index 0000000..9ff7270 --- /dev/null +++ b/levels/it/unused/index-mv @@ -0,0 +1,26 @@ +title = Rename a file in the next commit +cards = add reset-file checkout-file mv commit + +[description] + +Other times, you might want to rename a file in the next commit. Use + + git mv [file] [new name] + +for that. The effect is very similar as if you had created a copy with a new name, and removed the old version. + +[setup] + +echo a > a +echo SPECIAL > b +echo x > c +git add . +git commit -m "Initial commit" +echo x > a +echo b >> b +git add b + +[win] + +# Make a commit where you rename the file b to "x". +test "$(git ls-tree --name-only main)" = "$(echo -e "a\nc\nx")" diff --git a/levels/it/unused/init b/levels/it/unused/init new file mode 100644 index 0000000..c76daa5 --- /dev/null +++ b/levels/it/unused/init @@ -0,0 +1,14 @@ +title = Welcome! +cards = init + +[description] + + +[setup] + +rm -rf .git + +[win] + +# Again, initialize your time machine! +test -d .git diff --git a/levels/it/unused/pull-push b/levels/it/unused/pull-push new file mode 100644 index 0000000..71ce61d --- /dev/null +++ b/levels/it/unused/pull-push @@ -0,0 +1,51 @@ +title = Helping each other +cards = checkout commit-auto reset-hard pull push + +[description] + +The events and timelines you see are always only what your own time machine knows about! + +Of course, time agents don't have to work alone! Here, your sidekick has already prepared a merge for you! You can use the "pull" card to transfer it to your own time machine. + +Then, add another event on top (what does Sam have for dinner?), and `push` the result, to transfer it back to your sidekick! + +You can only ever manipulate things in your own time machine (the one on the bottom). + +[setup yours] + +echo "Just woke up. Is hungry." > sam +git add . +git commit -m "The beginning" + +git checkout -b pancakes +echo "Had blueberry pancakes with maple syrup for breakfast." > sam +git add . +git commit -m "Pancakes!" + +git checkout -b muesli main +echo "Had muesli with oats and strawberries for breakfast." > sam +git add . +git commit -m "Muesli!" + +git checkout main + +git push -u sidekick main pancakes muesli + +[setup sidekick] + +git checkout main +git merge pancakes +git merge muesli + +echo "Had pancakes with strawberries for breakfast." > sam +git add . +git commit -m "Let's make this breakfast compromise" --author="Sidekick " + +[win sidekick] + +# Below main's parent, there is a rhombus: +git rev-parse main^^ && test "$(git rev-parse main^^1^)" = "$(git rev-parse main^^2^)" + +[congrats] + +In reality, in many cases, a lot of time agents work together to build a really good future together! :) diff --git a/levels/it/unused/remotes-add b/levels/it/unused/remotes-add new file mode 100644 index 0000000..db24b7d --- /dev/null +++ b/levels/it/unused/remotes-add @@ -0,0 +1,33 @@ +title = Adding a remote +cards = checkout + +[description] + +Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using + + git remote add [name] [URL] + +where `[name]` is an arbitrary, short name you pick for the remote. + +When you've done that, you can get all commits from that remote using + + git pull friend + +There's a letter for you! + +[setup] + +git remote remove friend + +[setup friend] + +echo "I'm really committed to our friendship! <3" > love_letter +git add . +git commit -m "Write a letter" + +[win] + +# Add a remote that points to ../friend. +git remote -v | grep '../friend' +# Pull from the remote. +git show HEAD:love_letter | grep committed diff --git a/levels/it/unused/remotes-delete b/levels/it/unused/remotes-delete new file mode 100644 index 0000000..c026204 --- /dev/null +++ b/levels/it/unused/remotes-delete @@ -0,0 +1,23 @@ +title = Deleting and renaming a remote +cards = checkout + +[description] + +Here, you already have two remotes configured! You can list them using `git remote`. + +[setup] + +git remote rename friend frend + +[setup friend] + +[setup enemy] + +[win] + +# Rename the remote with the typo (using `git remote rename [old name] [new name]`) +git remote | grep friend +# The remote with the typo is gone. +! grep 'frend' <(git remote) +# Delete the remote you don't want to keep (using `git remote remove [remote]`) +! grep 'enemy' <(git remote) diff --git a/levels/it/unused/restore b/levels/it/unused/restore new file mode 100644 index 0000000..1f9961e --- /dev/null +++ b/levels/it/unused/restore @@ -0,0 +1,28 @@ +title = Looking into the past +cards = checkout-from + +[description] + +You've been working on your essay for a while. But you're not happy with the changes you've made recently. You want to go back to the version called "Best version"! + +No problem, you can use the `checkout` card to restore your essay from an older commit! + +[setup] + +echo "Initial version" > essay.txt +git add . +git commit -m "Initial commit" + +echo "Improved version" > essay.txt +git commit -a -m "Improved version" + +echo "Best version" > essay.txt +git commit -a -m "Best version" + +echo "Less-good version" > essay.txt +git commit -a -m "Less-good version" + +[win] + +# For nostalgic reasons, restore the very first backup you made! +diff essay.txt <(echo "Best version") diff --git a/levels/it/unused/split b/levels/it/unused/split new file mode 100644 index 0000000..274b792 --- /dev/null +++ b/levels/it/unused/split @@ -0,0 +1,26 @@ +title = Split a commit! +cards = checkout commit reset-hard reset add rebase-interactive rebase-continue show + +[description] + +Here, both changes happened in one commit! Split them to be in two commits instead. + +[setup] + +echo something > file1 +echo something else > file2 +git add . +git commit -m "Initial commit" + +echo this should happen first >> file1 +echo and this should happen after that >> file2 +git commit -am "Both together" + +echo this is some other change >> file1 +echo this is some other change >> file2 +git commit -am "Something else" + +[win] + +test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M file2" && +test "$(git diff-tree --no-commit-id --name-status -r main~2)" = "M file1" diff --git a/levels/it/unused/steps b/levels/it/unused/steps new file mode 100644 index 0000000..cb84861 --- /dev/null +++ b/levels/it/unused/steps @@ -0,0 +1,23 @@ +title = One step after another +cards = checkout commit reset-hard add + +[description] + +Sometimes, you might want to record the order in which things changed, instead of making a single commit. + +What happened here? Make two commits from the changes (using the "add" card), in an order that makes sense! + +[setup] + +echo something > file1 +echo something else > file2 +git add . +git commit -m "Initial commit" + +echo this should happen first >> file1 +echo and this should happen after that >> file2 + +[win] + +test "$(git diff-tree --no-commit-id --name-status -r main)" = "M file2" && +test "$(git diff-tree --no-commit-id --name-status -r main^)" = "M file1" diff --git a/levels/it/unused/who-are-you b/levels/it/unused/who-are-you new file mode 100644 index 0000000..f06137c --- /dev/null +++ b/levels/it/unused/who-are-you @@ -0,0 +1,23 @@ +title = Nice to meet you! +cards = config-name config-email + +[description] + +Introduce yourself using + + git config --global user.name Firstname + git config --global user.email "your@mail.com" + +[setup] + +[actions] + +test "$(git config user.name)" != "You" && hint "Hey $(git config user.name), nice to meet you!" + +[win] + +# Have a name configured. +test "$(git config user.name)" != "You" + +# Have an email address configured. +test "$(git config user.email)" != "you@time.agency" diff --git a/levels/it/workflows/gitignore b/levels/it/workflows/gitignore new file mode 100644 index 0000000..dc55243 --- /dev/null +++ b/levels/it/workflows/gitignore @@ -0,0 +1,18 @@ +title = Ignoring files + +[description] + +That chicken is running around a lot, and changing often. We don't want to have it in our commits. + +Add it to the file .gitignore, and try using `git add .`! + +[setup] + +touch .gitignore +echo important > important +git add important +git commit -m "Initial commit" + +[actions] + +echo "$RANDOM" > chicken diff --git a/levels/it/workflows/pr b/levels/it/workflows/pr new file mode 100644 index 0000000..98fa95f --- /dev/null +++ b/levels/it/workflows/pr @@ -0,0 +1,25 @@ +title = Clonare un repo +cards = clone commit-auto reset-hard checkout file-new branch + +[description] + +Il tuo amico ha un problema! Clona il repo, crea una branch chiamata "solution" e aggiusta il problema in qulla branch. Quando sei pronto crea una "Pull Request" usando `git tag pr`. + +[setup] + +rm -rf .git + +[setup friend] + +echo "2 + 3 = " > file +git add . +git commit -m "Commit iniziale" + +[actions friend] + +git ls-remote yours | grep pr && git fetch yours && git merge yours/solution +git show main:file | grep 5 && hint "Grazie!" + +[win friend] + +git show main:file | grep 5 diff --git a/levels/it/workflows/sequence b/levels/it/workflows/sequence new file mode 100644 index 0000000..1be11a8 --- /dev/null +++ b/levels/it/workflows/sequence @@ -0,0 +1 @@ +pr diff --git a/locale/it_IT/it_IT-levels.po b/locale/it_IT/it_IT-levels.po deleted file mode 100644 index 0f5e4b4..0000000 --- a/locale/it_IT/it_IT-levels.po +++ /dev/null @@ -1,1186 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2022 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# Automatically generated, 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: 2022-08-24 12:17+0200\n" -"Last-Translator: Luca Canali \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Generated-By: Babel 2.10.3\n" -"X-Generator: Poedit 3.1\n" - -#: TITLE -msgid "Living dangerously" -msgstr "Vivere pericolosamente" - -#: Command -msgid "Add another line to form.txt!" -msgstr "Aggiungi un'ulteriore linea a form.txt!" - -msgid "Making backups" -msgstr "Fare backups" - -msgid "Add another line to form2_really_final.txt!" -msgstr "Aggiungi un'ulteriore linea a form2_really_final.txt!" - -msgid "Enter the time machine" -msgstr "Entra nella macchina del tempo" - -msgid "Initialize the time machine!" -msgstr "Inizializza la macchina del tempo!" - -msgid "The command line" -msgstr "La linea di comando" - -msgid "Your first commit" -msgstr "Il tuo primo commit" - -msgid "Make a snapshot of the glass (a 'commit')" -msgstr "Crea un'istantanea di glass (un 'commit')" - -msgid "Change the contents of the glass!" -msgstr "Cambia il contenuto di glass!" - -msgid "And make a second commit!" -msgstr "E crea un secondo commit!" - -msgid "Working together" -msgstr "Lavoriamo assieme" - -msgid "Get the second commit from your teacher using `git pull`." -msgstr "Recupera il secondo commit dal tuo insegnante usando `git pull`." - -msgid "Add your name to the list of students" -msgstr "Aggiungi il tuo nome alla lista degli studenti" - -msgid "Commit your result." -msgstr "Conferma il risultato." - -msgid "And use `git push` to send it to your teacher!" -msgstr "E usa `git push` per inviarlo al tuo insegnante!" - -msgid "Unexpected Roommates" -msgstr "Coinquilini inaspettati" - -msgid "Remove all spider webs." -msgstr "Rimuovi tutte le ragnatele." - -msgid "But make sure you keep your bed!" -msgstr "Ma accertati di lasciare il tuo letto!" - -msgid "Interior design" -msgstr "Arredatore" - -msgid "Add two more pieces of furniture" -msgstr "Aggiungi altri due mobili" - -msgid "Make sure the colors match your bed's color." -msgstr "Assicurati che i colore corrisponda a quello del letto." - -msgid "Moving through time" -msgstr "Muoversi attraverso il tempo" - -msgid "Restore sisterly peace." -msgstr "Ripristina il salvadanaio della sorella." - -msgid "Make parallel commits" -msgstr "Crea commit paralleli" - -msgid "Make sure that the child is happy." -msgstr "Assicurati che il bambino sia felice." - -msgid "Make sure that the lion gets something to eat." -msgstr "Assicurati che il leone abbia qualcosa da mangiare." - -msgid "Creating branches" -msgstr "Creare branch" - -msgid "Create a branch called 'birthday' that points to the birthday timeline." -msgstr "" -"Creare una branch chiamata 'birthday' che punti alla timeline del compleanno." - -msgid "Create a branch called 'concert' that points to the concert timeline." -msgstr "" -"Crare una branch chiamata 'concert' che punti alla timeline del concerto." - -msgid "Branches grow with you!" -msgstr "Le branch crescono con te!" - -msgid "" -"Travel directly to the last yellow commit of the birthday timeline, make a " -"change to 'you', and make a commit" -msgstr "" -"VIaggia direttamente nell'ultimo commit della linea temporale del " -"compleanno, fai un cambiamento in 'you' e crea un commit" - -msgid "" -"Travel to the blue 'concert' branch, make a change to 'you', and a commit." -msgstr "" -"Viaggia nella branch blue 'concert', fai un cambiamento in 'you', e un " -"commit." - -msgid "Deleting branches" -msgstr "Cancella le branch" - -msgid "Find the bad branches and delete them. Keep only the best one." -msgstr "Trova le brach sbagliate e cancellale. Tieni solo la migliore." - -msgid "Moving branches around" -msgstr "Sposta le branch in giro" - -msgid "Did you eat a baguette on the baguette branch?" -msgstr "Hai mangiato una baguette nella branch 'baguette'?" - -msgid "Did you drink a coffee on the coffee branch?" -msgstr "Hai bevuto un caffe nella branch 'coffee'?" - -msgid "Did you eat a donut on the donut branch?" -msgstr "Hai mangiato una ciambella nella branch 'donut'?" - -msgid "Merging timelines" -msgstr "Unisci le line temporali" - -msgid "" -"Build a situation where you consumed a baguette, a coffee, *and* a donut." -msgstr "" -"Crea una condizione dove tu consumi una baguette, un caffe *e* una ciambella." - -msgid "Be on a merge commit." -msgstr "Crea (e spostati su) un commit di unione." - -msgid "Contradictions" -msgstr "Contradizioni" - -msgid "Make a breakfast compromise in the 'main' branch." -msgstr "Fai un compromesso per la colazione nella branch 'main'." - -msgid "Step by step" -msgstr "Passo dopo passo" - -msgid "Pick the timeline that's clearer, and make the alarm go off!" -msgstr "Scegli la linea temporale piu' chiara e fai suonare l'allarme!" - -msgid "Add new files to the index" -msgstr "Aggiungi nuovi file all'indice" - -msgid "Add the candle." -msgstr "Aggiungi la candela." - -msgid "Make a commit." -msgstr "Crea un commit." - -msgid "Update files in the index" -msgstr "Aggiorna i file nell'indice" - -msgid "Make a change to the candle." -msgstr "Fai un cambiamento nella candela." - -msgid "Resetting files in the index" -msgstr "Resetta i file nell'indice" - -msgid "Reset the changes in the green and blue candles!" -msgstr "Resetta i cambiamenti nelle candele verdi e blue!" - -msgid "And make a commit!" -msgstr "E crea un commit!" - -msgid "Adding changes step by step" -msgstr "Aggiungi i cambiamenti passo dopo passo" - -msgid "" -"Make changes to all three objects, to form a logical sequence of events!" -msgstr "" -"Crea cambiamenti in tutti e tre gli oggetti, da una sequenza logica di " -"eventi!" - -msgid "Only add one of these changes!" -msgstr "Aggiungi solo uno di questi cambiamenti!" - -msgid "And make a commit." -msgstr "E crea un commit." - -msgid "Make a second commit that only records a single change." -msgstr "Crea un secondo commit con solo i record con un singolo cambiamento." - -msgid "And a third one." -msgstr "E un terzo." - -msgid "Friend" -msgstr "Amici" - -msgid "Got the second line from your friend" -msgstr "Ottenuta la seconda linea dal tuo amico" - -msgid "Got the fourth line from your friend." -msgstr "Ottenuta la quarta linea dal tuo amico." - -msgid "The friend got a third line from you" -msgstr "Il tuo amico ti ha dato la terza linea" - -msgid "The friend got a fifth line from you" -msgstr "Il tuo amico ti ha dato la quinta linea" - -msgid "Problems" -msgstr "Problemi" - -msgid "Commit your local changes." -msgstr "Committa i tuoi combiamenti." - -msgid "Look at your friend's suggestion, make a compromise, and push it back." -msgstr "" -"Guarda i suggerimenti del tuo amico, fai un compromesso, e rimadalo in " -"dietro." - -msgid "Rebasing" -msgstr "" - -msgid "Order all tree branches into one and move the main branch ref" -msgstr "Ordina le tre branch in una e muovi il riferimeto alla branch 'main'" - -msgid "Reordering events" -msgstr "Riordinare gli eventi" - -msgid "Reorder the commits to dress yourself in the correct way" -msgstr "Riordina i commit per vestirti nell'ordine giusto" - -msgid "Restore a deleted file" -msgstr "Recupera un file cancellato" - -msgid "Restore the essay to contain 'important content'" -msgstr "" - -msgid "Restore a file from the past" -msgstr "" - -msgid "Get the first version of your essay, and make a new commit with it." -msgstr "" - -msgid "Undo a bad commit" -msgstr "" - -msgid "" -"In the last main commit, the numbers file contains the numbers from 1 to 10." -msgstr "" - -msgid "The commit message of that commit is 'More numbers'." -msgstr "" - -msgid "The commit with the typo is not part of the main branch anymore." -msgstr "" - -msgid "I pushed something broken" -msgstr "" - -msgid "The team's main branch no longer contains the bad thing." -msgstr "" - -msgid "And the history has not been modified." -msgstr "" - -msgid "Go back to where you were before" -msgstr "" - -msgid "Find out where you've been before, and go back there!" -msgstr "" - -msgid "Cloning a repo" -msgstr "" - -msgid "Yellow brick road" -msgstr "" - -msgid "Find the last good commit" -msgstr "" - -msgid "Stashing" -msgstr "" - -msgid "Did you stash the current changes?" -msgstr "" - -msgid "Pop from Stash" -msgstr "" - -msgid "Did you pop the changes from the stash stack?" -msgstr "" - -msgid "Clear the Stash" -msgstr "" - -msgid "Did you clear your stash stack?" -msgstr "" - -msgid "Branch from stash" -msgstr "" - -msgid "Did you create a new branch from the stashed changes?" -msgstr "" - -msgid "Merging popped stash" -msgstr "" - -msgid "Did you resolve the confict and commit?" -msgstr "" - -msgid "Did you clear stash stack?" -msgstr "" - -msgid "Creating tags" -msgstr "" - -msgid "Did you create a new tag?" -msgstr "" - -msgid "Removing tags" -msgstr "" - -msgid "Did you remove all tags?" -msgstr "" - -msgid "Tagging later" -msgstr "" - -msgid "Remote Tags" -msgstr "" - -msgid "v1 tag in your repo" -msgstr "" - -msgid "v2 tag in your repo" -msgstr "" - -msgid "v2 tag in the remote" -msgstr "" - -msgid "Empty sandbox" -msgstr "" - -msgid "Sandbox with a remote" -msgstr "" - -msgid "Sandbox with three commits" -msgstr "" - -#: DESCRIPTION -msgid "" -"So you have decided to apply for time travel school, to learn how to use " -"this time machine called 'Git'!\n" -"\n" -"How exciting!\n" -"\n" -"You're almost done with the paperwork! You just need to fill in one more " -"reason why you want to learn Git." -msgstr "" -"Bene hai deciso di fare domanda per la scuola di viaggio nel tempo, per " -"usare questa macchina del tempo chiamata 'Git'!\n" -"\n" -"Che emozione!\n" -"\n" -"Hai quasi concluso le scartoffie! Devi solamente inserire un motivo per il " -"quale vuoi imparare Git." - -msgid "" -"This time, you're making a lot of backup copies - you can look at them by " -"clicking on them!" -msgstr "" -"Questa volta hai fatto molti copie di backup - le puoi guardare cliccandoci " -"sopra!" - -msgid "" -"You've been accepted to time travel school! Yay! It's your first day! Your " -"teacher explains:\n" -"\n" -"'To do anything with a time machine, you first need to initialize it!'\n" -"\n" -"Drag that blue card up to play it!" -msgstr "" -"Sei stato accettato nella scuola della macchina del tempo! Yay! E' il tuo " -"primo giorno! Il tuo insegnante spiega;\n" -"\n" -"'Prima di fare qualsiasi altra cosa con la macchina del tempo, e' necessario " -"che la inizializzi!'\n" -"\n" -"Trascina verso l'alto la carta blue per usarla!" - -msgid "" -"These playing cards are designed to be easy to use and to remember! We'd " -"suggest sticking to them if you don't have a lot of experience with Git!" -msgstr "" -"Queste carte da gioco sono state disegnate per essere facili da utilizzare e " -"ricordare! Ti consigliamo di usarle se non hai molta esperienza con Git!" - -msgid "" -"You can use your time machine to make snapshots of objects around you! Here, " -"let's practice this!\n" -"\n" -"(Your teacher pours some water into a glass.)" -msgstr "" -"Puoi usare la tua macchina del tempo per creare delle istantanee degli " -"oggetti che ti circondano! Ecco, facciamo questo!\n" -"\n" -"(Il tuo insegnante versa dell'acqua nel bicchiere.)" - -msgid "" -"Let's add your name to our list of students!\n" -"\n" -"I already have a second commit of it in my time machine - let's work " -"together!" -msgstr "" -"Aggiungiamo il tuo nome nella nostra lista di studenti!\n" -"\n" -"Io ne ho gia' un secondo commit nella mia macchina del tempo - lavoriamo " -"assieme!" - -msgid "" -"The first day at Time Travel School comes to an end and you receive the key " -"to your room.\n" -"Full of excitement you open the door just to find... spider webs! Spider " -"webs everywhere!\n" -"\n" -"Remove all the spider webs you can find with the remove card!" -msgstr "" -"Il primo giorno nella scuola del viaggio nel tempo! La scuola finisce e " -"rivevi le chiavi della tua stanza.\n" -"Pieno di eccitazione apri la porta per trovare ... ragnatele! Ragnatele " -"ovunque!\n" -"\n" -"Elimina tutte le ragnatele che trovi con la carta cancella!" - -msgid "" -"Now that your room looks tidy, you can start to unpack your stuff. You " -"brought two new pieces of furniture with you and with a bright smile,\n" -"you see that their colors match the color of your bed!\n" -"\n" -"Build up your two pieces of furniture by playing the touch card.\n" -"Then name your furniture - you can choose whatever you like.\n" -"\n" -"Make sure the colors match! You can find the bed's color in its " -"description.\n" -"Don't forget to add a color and description to your new furnitures, too!" -msgstr "" -"Adesso che la tua camera è riordinata, puoi iniziare a disfare le valige. Ti " -"sei portato due nuovi mobili con te e con un felicità,\n" -"noti che il loro colore si abbina al letto!\n" -"\n" -"Monta i tuoi due mobili giocando la carta touch.\n" -"Quindi dai un nome ai tuoi mobili - puoi scegliere quello che preferisci.\n" -"\n" -"Accertati che il colori corrispondano! Puoi trovare il colore del letto " -"nella sua descrizione.\n" -"Non ti dimenticare anche di aggiungere il colore e la descrizione ai tuoi " -"nuovi mobili!" - -msgid "" -"The yellow boxes are frozen points in time, we call them 'commits'! You can " -"travel between them using the 'checkout' card! (Try it!)\n" -"\n" -"Can you find out what happened here? Then, while on the last commit, edit " -"the files to fix the problem, and make a new commit!" -msgstr "" -"La scatole gialle sono un punto fisso nel tempo, possiamo chiamarli " -"\"commits\"! Puoi viaggiare tra loro usando la carta \"checkout\"! " -"(Provala!)\n" -"\n" -"Puoi scoprire cosa è successo qui? Quindi, durante ultimo commit, modifica i " -"files per risolvere il problema ed invia un nuovo commit!" - -msgid "" -"Did you know that creating parallel timelines is perfectly legal and safe? " -"It's true!\n" -"\n" -"Can you find out when things went wrong in this zoo? Then, go back to the " -"last good commit and create a parallel universe where everyone is happy!" -msgstr "" -"Sai che creare linee temporali parallele è perfettamente legale e sicuro? E' " -"vero!\n" -"\n" -"Puoi trovare cosa c'è di sbagliato in questo zoo? Bene, torna indietro " -"all'ultimo commit buono e creane un universo parallelo dove tutti sono " -"felici!" - -msgid "" -"You were invited to two parties! At one of them, your favorite band is " -"playing - and the other one is your best friend's birthday party. Where " -"should you go? No worries - as a time travel agent in training, you can go " -"to both parties!\n" -"\n" -"To make it easier to tell which timeline is which, you can create time " -"portals! (We call these 'branches'.)" -msgstr "" -"Sei stato invitato a due feste! In una di queste, suona la tua band " -"preferita - e l'altra e' il compleanno del tuo migliore amico. Dove dovresti " -"andare? Non ti preoccupare - sei un agente del tempo in addestramento, tu " -"puoi andare ad entrambe le feste!\n" -"\n" -"Per rendere piu' facile capire quale sequenza temporale e', puoi creare dei " -"portali! ( Che chiamiamo 'branches'.)" - -msgid "" -"Note that there are two options to 'travel to the end of a timeline':\n" -"\n" -"First, you can directly travel to the commit, like we've done it before.\n" -"\n" -"And second, you can travel to the branch label. In this case, when you make " -"a new commit, the branch will grow with you, and still point at the end of " -"the timeline!" -msgstr "" - -msgid "" -"Life is full of dangers, right? Even when walking to school, it seems like " -"there's a lot of risks!\n" -"\n" -"This Monday is especially bad. You made it to school, but there's some " -"timelines you definitely don't want to keep around." -msgstr "" - -msgid "" -"One of your colleagues messed up here, and put the branches in the wrong " -"timelines!\n" -"\n" -"You could delete and re-create these branches - but you can also directly " -"move them to different commits, by using\n" -"\n" -" git checkout\n" -"\n" -"on the branch names, and then using\n" -"\n" -" git reset --hard\n" -"\n" -"on the commit where you want the branch to be.\n" -"\n" -"The donut branch is in the right place, but the timeline is still incomplete " -"- make you actually *eat* the donut in that branch!" -msgstr "" - -msgid "" -"Here's a trick so that you can sleep a bit longer: just do all your morning " -"activities in parallel universes, and then at the end, merge them together!" -msgstr "" - -msgid "" -"Sometimes, timelines will contradict each other.\n" -"\n" -"For example, in this case, one of our clients wants these timelines merged, " -"but they ate different things for breakfast in both timelines.\n" -"\n" -"Try to merge them together! You'll notice that there will be a conflict! The " -"time machine will leave it up to you how to proceed: you can edit the " -"problematic item, it will show you the conflicting sections. You can keep " -"either of the two versions - or create a combination of them! Remove the " -">>>, <<<, and === markers, and make a new commit to finalize the merge!\n" -"\n" -"Let your finalized timeline be the 'main' one." -msgstr "" - -msgid "" -"Welcome to today's lesson! We're going to learn how to make commits with " -"more precision!\n" -"\n" -"Have a look at these two timelines. They have exactly the same outcome. But " -"one of them makes it much easier to figure out what happened." -msgstr "" - -msgid "" -"So far, when we made a commit, we've always recorded the current status of " -"all objects, right?\n" -"\n" -"But Git allows you to pick which changes you want to put in a commit!\n" -"\n" -"To learn how that works, we need to learn about the 'index'! In the index, " -"we can prepare what will be in the next commit. In this game, the index is " -"represented by a blue aura around icons in the file browser!\n" -"\n" -"Initially, the index is empty. To make a commit that contains a new file, we " -"need to add it!" -msgstr "" - -msgid "" -"When we change files, the index won't change on its own. We have to use `git " -"add` to update the index to the changed version of the file.\n" -"\n" -"Let's try that!\n" -"\n" -"The icons in the file browser show you when the actual file (white) and the " -"version in the index (blue) are different, and when they are the same!" -msgstr "" - -msgid "" -"See the dark shadow behind the icons? That's the version of the file in the " -"last commit!\n" -"\n" -"For example, these candles have been blown out, and that change has been " -"added.\n" -"\n" -"But you decide that this was a mistake! You only want to blow out the red " -"candle in the next commit!\n" -"\n" -"If you already have updated the index to a changed file, but want to reset " -"it, you can use `git reset`!" -msgstr "" - -msgid "" -"The index is really useful, because it allows us to be precise about which " -"changes we want to include in each commit!" -msgstr "" - -msgid "" -"Your friend added another line to your essay! Get it, add a third one and " -"send it to them!\n" -"\n" -"Take turns until you have five lines!" -msgstr "" - -msgid "" -"Both you and your friend have been working on the file, and want to sync up!" -msgstr "" - -msgid "" -"Okay - turns out that saving time in the morning by utilizing parallel " -"universes is against the regulations of the International Time Travel " -"Association. You'll have to do your tasks in sequence after all.\n" -"\n" -"See the 'rebase' card? When you drag it to a commit, it will copy the events " -"in your current timeline after the specified one! This way, make a clean, " -"linear timeline where you visit all three shops.\n" -"\n" -"Again, we want to make that our base reality - the 'main' branch should " -"point to that timeline!" -msgstr "" - -msgid "" -"Oops, looks like there's something messed up here. Can you put the events " -"back into their correct order?\n" -"\n" -"There are two ways to do this: You can drag the 'interactive rebase' card to " -"the commit before the one you want to change, then reorder the lines in the " -"file that opens, and save it.\n" -"\n" -"Or you can reset the main tag to the very first commit, and then cherry-pick " -"single commits in the order you want. You have cards for both approaches!" -msgstr "" - -msgid "" -"Oops - you deleted the 'essay' file, which you worked on all night!\n" -"\n" -"Luckily, Git is here to help! You can use `git checkout` to restore the file!" -msgstr "" - -msgid "" -"Here's a similar problem: you really liked the essay from the very first " -"commit, and want to have it back! Well, checkout can also restore things " -"from older commits, Here's how:\n" -"\n" -" git checkout [commit] [file]" -msgstr "" - -msgid "" -"Oh no, we made a bad commit! How can we undo making the commit, and go back " -"to a point where we can try again?\n" -"\n" -"The answer is using `git reset [commit]`, which does two things:\n" -"\n" -"- It resets the current branch ref to the commit you specify.\n" -"- And it resets the index to that commit.\n" -"\n" -"It does not change your working directory in any way, which means that after " -"that, you can try making the commit you want again." -msgstr "" - -msgid "" -"We were talking about how to undo a commit, and fix it. This only helps when " -"you haven't already pushed it to a remote. When that has happened, and you " -"want to undo the effects of the commit completely, your best option is `git " -"revert`" -msgstr "" - -msgid "" -"Say you were looking at something in the past, and then switched back to the " -"main branch.\n" -"\n" -"But then, you got reaaally distracted, and after your lunch break, you can't " -"remember on which commit in the past you were before. How can you find out?\n" -"\n" -"There's a convenient command that shows you all the places your HEAD did " -"point to in the past:\n" -"\n" -" git reflog" -msgstr "" - -msgid "" -"Your friend has a problem! Clone the repo, create a branch called " -"'solution', and fix the problem in this branch. When you're ready, make a " -"'Pull Request' by using `git tag pr`." -msgstr "" - -msgid "" -"(Please zoom out a bit using your mouse wheel! :D)\n" -"\n" -"Oh no! You have lost your key at some point during the day!\n" -"\n" -"Sure, you could look at every single commit in an attempt to find it - but " -"there's a better way: your time machine has a built-in way to find the point " -"in time where things went wrong quickly!\n" -"\n" -"First, play the 'bisect start' card. Then, go to a commit where you don't " -"have the key, and play the 'bisect bad' card. Likewise, go to a commit early " -"on where you have the key *in your pocket*, and play the 'bisect good " -"card'.\n" -"\n" -"After you've found the last good commit, reset the main branch to it. What " -"happened to the key after you lost it?" -msgstr "" - -msgid "" -"You will encounter situations in which you are working on your project but " -"you need to\n" -"put your current changes aside temporarily. To do so, you can use the stash " -"function. Use\n" -" git stash push \n" -"to add your current changes to the stash stack.\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"When you stashed your changes and you want to apply them back to your " -"current working directory, you can use\n" -" git stash pop\n" -"This will remove the changes from the stash stack. If you also want to keep " -"the changes on the stash stack, use\n" -" git stash apply\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"If you want to inspect your stash stack, use the command\n" -" git stash list\n" -" \n" -"Oh, you don't want to keep your stashed changes? There are way too many? " -"Then go ahead and clear the stack with\n" -" git stash clear\n" -"If you only want to discard a certain stash entry, you can use\n" -" git stash drop \n" -" \n" -"Clear your stash stack!\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"If you want to keep your changes but they don't belong to the main branch, " -"you can easily\n" -"create a new branch from your stashed changes. Just use\n" -" git stash branch \n" -"If you just want to use the latest stash entry, you can leave the " -"option empty.\n" -"\n" -"Create a new branch from the stashed changes!\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"When you want to reapply your changes but you already continued working on " -"your file, you might get\n" -"a merge conflict! Let's practise this situation.\n" -"Pop the changes from the stash with\n" -" git stash pop\n" -"and resolve the merge conflict. Commit the resolved changes and clear the " -"stash stack afterwards.\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"Some of your commits may be special commits. Maybe you reached a milestone " -"or a new version number.\n" -"\n" -"You can mark these commits with a special flag called 'tag'.\n" -"\n" -"Write \n" -"\n" -" git tag \n" -" \n" -"to tag your commit.\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"You added way too many tags? No prob! Delete them with\n" -"\n" -" git tag -d \n" -" \n" -"Remove all tags in this repo!\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"But what happens if you forgot to tag your current commit?\n" -"No Prob! You can also tag older commits via\n" -"\n" -" git tag \n" -" \n" -"Tag the commit 'Adding feature 2' with the name 'v1'!\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"When you work with remote repositories, tags are not pushed or pulled " -"automatically.\n" -"\n" -"You can push a tag with\n" -" git push \n" -"Or all tags with:\n" -" git push --tags\n" -" \n" -"Deleting tags on your remote works with: \n" -" git push --delete \n" -" \n" -"You can also sync \n" -" git fetch --prune --prune-tags\n" -"\n" -"\n" -"Add a tag named 'v2' to the last commit and push it to the remote. Also pull " -"the v1 tag to your local repository." -msgstr "" - -msgid "This is an empty sandbox you can play around in." -msgstr "" - -msgid "" -"Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n" -"\n" -"How can you push tags and branches on a remote? How can you delete them " -"again?" -msgstr "" - -msgid "" -"Here's a sandbox you can play around in.\n" -"\n" -"You can use both the playing cards, as well as the terminal. This is a real " -"Git terminal! Fun things to try:\n" -"\n" -"- Make a commit that merges three timelines together at once!\n" -"- Create and delete some tags!\n" -"- Make a timeline that's completely independent of the rest!" -msgstr "" - -#: HITS -msgid "" -"But there's another way to interact with Git:\n" -"\n" -"Try typing `git init` into the black terminal below, and pressing the enter " -"key!" -msgstr "" -"Ma c'e' un'altro modo per interagire con Git:\n" -"\n" -"Prova a scrivere `git init` nel terminale sotto, per poi premere il tasto " -"invio!" - -msgid "" -"Again, instead of using the card, you can also type the commands which are " -"printed on it into the black terminal below!\n" -"\n" -"This is totally optional! But this will be a super useful skill in the real " -"world - and it will give you a sparkling golden badge! :)" -msgstr "" -"Nuovamente, al posto di usare la carta, puoi anche digitare, nel terminale " -"sotto, i comandi che trovi stampato sulla carta!\n" -"\n" -"Questo e' completamente opzionale! Ma questa sara' una skill veramente utile " -"nel mondo reale - e ti dara' un distintivo scintillante! :)" - -msgid "" -"To go back to old commands, you can press arrow up and down. That way, you " -"don't have to type in long commands twice." -msgstr "" -"Per scorrere i vecchi comandi, puoi premere la freccia su e giu. In questo " -"modo, non dovrai digitare nuovamente i comandi." - -msgid "" -"On the command line, you can easily delete all files ending in -web using " -"this command:\n" -"\n" -" rm *web" -msgstr "" -"Nella riga di comando, puoi facilmente cancellare tutti i file -web usando " -"questo comando:\n" -"\n" -" rm *web" - -msgid "" -"To checkout a specific commit, type `git checkout`, then a space, and then " -"right click on the commit you want!\n" -"\n" -"This will insert the commit's unique identifier!" -msgstr "" -"Guarda uno specifico commit, digita `git checkout` uno spazio e premi il " -"tasto destro sopra il commit che vuoi!\n" -"\n" -"Questo inserirà l'identificatore unico del commit!" - -msgid "" -"The blue animal represents a concept known as the 'HEAD pointer' in Git: It " -"shows you which commit is the current one.\n" -"\n" -"Here's a cool trick to go to the previous commit: \n" -"\n" -" git checkout HEAD^\n" -"\n" -"You can also go back two commits by typing, for example: \n" -"\n" -" git checkout HEAD~2" -msgstr "" -"L'animale blue rappresenta un concetto conosciuto come \"HEAD pointer\" in " -"Git: Ti mostra qual'è il commit attuale.\n" -"\n" -"Ecco un simpatico trucchetto andare al commit precedente:\n" -"\n" -" git checkout HEAD^\n" -"\n" -"Puoi anche andare indietro di 2 commit digitando, pre esempio:\n" -"\n" -" git checkout HEAD~2" - -msgid "" -"Branches also make it really easy to travel between different places using " -"the command line! As soon as you have a branch called 'birthday', you can " -"type `git checkout birthday` to travel to it!" -msgstr "" -"Le branch rendono molto facile viaggiare tra luoghi diversi anche usando la " -"linea di comando! Quando hai una branch chiamata 'birthday', puoi digitare " -"`git checkout bithday` per raggiungerlo!" - -msgid "" -"To travel to a branch, type `git checkout name_of_the_branch`.\n" -"\n" -"And to travel to the last commit, type `git checkout --detach " -"name_of_the_branch`." -msgstr "" -"Per viaggiare in una branch, digita `git checkout nome_della_branch`.\n" -"\n" -"Per andare all'ultimo commit, digita `git checkout --detach " -"nome_della_branch`." - -msgid "" -"You can use tab completion in the terminal! Start typing a filename, then " -"press the tab key to complete its name. This will often save you some time!" -msgstr "" -"Puoi usare la tab completition nel terminale! Inizia a digitare il nome del " -"file, quindi permi il tasto tab per completare il suo nome. Questo ti " -"permettera' di risparmiare tempo!" - -#: CONGRAT -msgid "" -"Good job, you solved the level!\n" -"\n" -"Feel free to try a few more things or click 'Next level'." -msgstr "" -"Ottimo lavoro, hai risolto il livello!\n" -" Sentiti libero di provare qualche altra cosa o clicca su 'Prossimo livello'." - -msgid "" -"Suddenly, your cat jumps on the table, snatches away the form, and runs " -"away! Oh no. All your hard work, gone!\n" -"\n" -"You clearly need a better solution.\n" -"\n" -"(Click 'Next Level' as soon as you're ready!)" -msgstr "" -"All'improvviso il tuo gatto salta sul tavolo, strappa via il modulo e scappa " -"via!Oh no. Tutto il tuo duro lavoro, andato!\n" -"\n" -"Devi trovare una buona soluzione\n" -"\n" -"(Clicca 'Prossimo livello' appena sei pronto!)" - -msgid "" -"Okay, this kind of works.\n" -"\n" -"But you're a bit worried that you'll end up with hundreds of copies of this " -"form, and it will be hard to keep track of all of them.\n" -"\n" -"And especially when working with other people, sending copies back and forth " -"doesn't seem ideal.\n" -"\n" -"You can't wait to try these time machines!" -msgstr "" -"Ok, questo cosa può funzionare.\n" -"\n" -"Ma sei un pochino preoccupato che alla fine ti troverai con un centinaio di " -"copie di questo form, ed e' difficile tenerne traccia di tutto loro.\n" -"\n" -"Specialmente quando lavorerai con altre persone, inviare copie avanti ed " -"indietro non sembra l'ideale.\n" -"\n" -"Non vedi l'ora di provare questa macchina del tempo!" - -msgid "" -"Nice! See that little owl squirrel that appeared? It will be your companion, " -"and always show you where you are in time!" -msgstr "" -"Bene! Vedi quel piccolo animale che e' apparso? Sara' il tuo compagno e ti " -"mostrera' dove ti trovi nel tempo!" - -msgid "" -"Cool! Instead of using the playing cards, you can also do everything via the " -"command line!\n" -"\n" -"The command line is pretty powerful! Often, you can use it to solve tasks " -"faster compared to using a graphical interface." -msgstr "" -"Bello! Al posto di usare le carte, puoi anche fare tutto tramite la linea di " -"comando!\n" -"\n" -"La linea di comando e' molto potente! A volte, puoi usarla per svolgere " -"alcuni compiti piu' velocemente in confronto all'uso dell'interfaccia " -"grafica." - -msgid "" -"Nice! You can try making some additional commits. When you feel comfortable, " -"click on 'Next Level'." -msgstr "" -"Bene! Puoi provare a creare altri commit aggiuntivi. Quando ti senti a tuo " -"agio, clicca su 'Prossimo livello'." - -msgid "" -"Welcome to time travel school! :) I'll see you for your first class tomorrow!" -msgstr "" -"Benvenuto nella scuola del viaggio nel tempo! :) Ci vediamo domani per la " -"tua prima lezione!" - -msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" -msgstr "" -"Adesso la tua camera è ordinata ed accogliente! E' ora di disfare le valige!" - -msgid "Don't you immediately feel more at home?" -msgstr "Non ti senti subito a casa?" - -msgid "" -"Wonderful! Now that you're getting familiar with the time machine, let's " -"look at some more complicated situations..." -msgstr "" -"Stupendo! Adesso hai più famigliarità con la macchina del tempo, vediamo " -"situazioni più complicate..." - -msgid "" -"Whew, good job! This seems like a *much* better outcome.\n" -"\n" -"Feel free to add more parallel timelines, or make them longer.\n" -"\n" -"If you're ready, our next mission is already waiting..." -msgstr "" -"Whew, ottimo lavoro! Questo sembra un risultato molto migliore.\n" -"\n" -"Sentiti libero di aggiungere altre line temporali parallele o allungarle.\n" -"\n" -"Se sei pronto, la prossima missione ci sta aspettando..." - -msgid "" -"Now you can travel between those branches easily (using `git checkout`) - " -"try it!\n" -"\n" -"Your friend is happy that you made it to the birthday party and you also got " -"your concert ticket signed. Yay!" -msgstr "" - -msgid "" -"On second thought, maybe you even prefer the ice cream timeline to the main " -"one? :)" -msgstr "" - -msgid "" -"I wonder if you're more relaxed when you *sleep* in parallel timelines..." -msgstr "" - -msgid "Yum, that sounds like a good breakfast!" -msgstr "" - -msgid "" -"Notice how the other timelines and commits are still there - if anything " -"goes wrong, you can also travel back to them.\n" -"\n" -"It's really hard to actually *destroy* stuff with your time machine." -msgstr "" - -msgid "" -"Feel free to reset the level and try the other strategy! Which one do you " -"like better?" -msgstr "" - -msgid "" -"Well done! :) The only problem is that you now have to walk all the way back " -"home, again..." -msgstr "" - -msgid "Nice stash you got there! :)" -msgstr "" - -msgid "Yay, you got your changes back! :)" -msgstr "" - -msgid "All clear! :)" -msgstr "Tutto chiaro! :)" - -msgid "Stashed changes are in a new branch! :)" -msgstr "" - -msgid "Nice! You tagged your first commit :)" -msgstr "Bello! Hai taggato il tuo primo commit :)" - -msgid "Well done :)" -msgstr "Ben fatto :)" diff --git a/locale/levels.pot b/locale/levels.pot deleted file mode 100644 index eeced88..0000000 --- a/locale/levels.pot +++ /dev/null @@ -1,1037 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2022 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# Automatically generated, 2022. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2022-08-18 10:39+0200\n" -"PO-Revision-Date: 2022-08-19 16:53+0200\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Generated-By: Babel 2.10.3\n" -"X-Generator: Poedit 3.1\n" - -#: TITLE -msgid "Living dangerously" -msgstr "" - -#: Command -msgid "Add another line to form.txt!" -msgstr "" - -msgid "Making backups" -msgstr "" - -msgid "Add another line to form2_really_final.txt!" -msgstr "" - -msgid "Enter the time machine" -msgstr "" - -msgid "Initialize the time machine!" -msgstr "" - -msgid "The command line" -msgstr "" - -msgid "Your first commit" -msgstr "" - -msgid "Make a snapshot of the glass (a 'commit')" -msgstr "" - -msgid "Change the contents of the glass!" -msgstr "" - -msgid "And make a second commit!" -msgstr "" - -msgid "Working together" -msgstr "" - -msgid "Get the second commit from your teacher using `git pull`." -msgstr "" - -msgid "Add your name to the list of students" -msgstr "" - -msgid "Commit your result." -msgstr "" - -msgid "And use `git push` to send it to your teacher!" -msgstr "" - -msgid "Unexpected Roommates" -msgstr "" - -msgid "Remove all spider webs." -msgstr "" - -msgid "But make sure you keep your bed!" -msgstr "" - -msgid "Interior design" -msgstr "" - -msgid "Add two more pieces of furniture" -msgstr "" - -msgid "Make sure the colors match your bed's color." -msgstr "" - -msgid "Moving through time" -msgstr "" - -msgid "Restore sisterly peace." -msgstr "" - -msgid "Make parallel commits" -msgstr "" - -msgid "Make sure that the child is happy." -msgstr "" - -msgid "Make sure that the lion gets something to eat." -msgstr "" - -msgid "Creating branches" -msgstr "" - -msgid "Create a branch called 'birthday' that points to the birthday timeline." -msgstr "" - -msgid "Create a branch called 'concert' that points to the concert timeline." -msgstr "" - -msgid "Branches grow with you!" -msgstr "" - -msgid "" -"Travel directly to the last yellow commit of the birthday timeline, make a " -"change to 'you', and make a commit" -msgstr "" - -msgid "" -"Travel to the blue 'concert' branch, make a change to 'you', and a commit." -msgstr "" - -msgid "Deleting branches" -msgstr "" - -msgid "Find the bad branches and delete them. Keep only the best one." -msgstr "" - -msgid "Moving branches around" -msgstr "" - -msgid "Did you eat a baguette on the baguette branch?" -msgstr "" - -msgid "Did you drink a coffee on the coffee branch?" -msgstr "" - -msgid "Did you eat a donut on the donut branch?" -msgstr "" - -msgid "Merging timelines" -msgstr "" - -msgid "" -"Build a situation where you consumed a baguette, a coffee, *and* a donut." -msgstr "" - -msgid "Be on a merge commit." -msgstr "" - -msgid "Contradictions" -msgstr "" - -msgid "Make a breakfast compromise in the 'main' branch." -msgstr "" - -msgid "Step by step" -msgstr "" - -msgid "Pick the timeline that's clearer, and make the alarm go off!" -msgstr "" - -msgid "Add new files to the index" -msgstr "" - -msgid "Add the candle." -msgstr "" - -msgid "Make a commit." -msgstr "" - -msgid "Update files in the index" -msgstr "" - -msgid "Make a change to the candle." -msgstr "" - -msgid "Resetting files in the index" -msgstr "" - -msgid "Reset the changes in the green and blue candles!" -msgstr "" - -msgid "And make a commit!" -msgstr "" - -msgid "Adding changes step by step" -msgstr "" - -msgid "" -"Make changes to all three objects, to form a logical sequence of events!" -msgstr "" - -msgid "Only add one of these changes!" -msgstr "" - -msgid "And make a commit." -msgstr "" - -msgid "Make a second commit that only records a single change." -msgstr "" - -msgid "And a third one." -msgstr "" - -msgid "Friend" -msgstr "" - -msgid "Got the second line from your friend" -msgstr "" - -msgid "Got the fourth line from your friend." -msgstr "" - -msgid "The friend got a third line from you" -msgstr "" - -msgid "The friend got a fifth line from you" -msgstr "" - -msgid "Problems" -msgstr "" - -msgid "Commit your local changes." -msgstr "" - -msgid "Look at your friend's suggestion, make a compromise, and push it back." -msgstr "" - -msgid "Rebasing" -msgstr "" - -msgid "Order all tree branches into one and move the main branch ref" -msgstr "" - -msgid "Reordering events" -msgstr "" - -msgid "Reorder the commits to dress yourself in the correct way" -msgstr "" - -msgid "Restore a deleted file" -msgstr "" - -msgid "Restore the essay to contain 'important content'" -msgstr "" - -msgid "Restore a file from the past" -msgstr "" - -msgid "Get the first version of your essay, and make a new commit with it." -msgstr "" - -msgid "Undo a bad commit" -msgstr "" - -msgid "" -"In the last main commit, the numbers file contains the numbers from 1 to 10." -msgstr "" - -msgid "The commit message of that commit is 'More numbers'." -msgstr "" - -msgid "The commit with the typo is not part of the main branch anymore." -msgstr "" - -msgid "I pushed something broken" -msgstr "" - -msgid "The team's main branch no longer contains the bad thing." -msgstr "" - -msgid "And the history has not been modified." -msgstr "" - -msgid "Go back to where you were before" -msgstr "" - -msgid "Find out where you've been before, and go back there!" -msgstr "" - -msgid "Cloning a repo" -msgstr "" - -msgid "Yellow brick road" -msgstr "" - -msgid "Find the last good commit" -msgstr "" - -msgid "Stashing" -msgstr "" - -msgid "Did you stash the current changes?" -msgstr "" - -msgid "Pop from Stash" -msgstr "" - -msgid "Did you pop the changes from the stash stack?" -msgstr "" - -msgid "Clear the Stash" -msgstr "" - -msgid "Did you clear your stash stack?" -msgstr "" - -msgid "Branch from stash" -msgstr "" - -msgid "Did you create a new branch from the stashed changes?" -msgstr "" - -msgid "Merging popped stash" -msgstr "" - -msgid "Did you resolve the confict and commit?" -msgstr "" - -msgid "Did you clear stash stack?" -msgstr "" - -msgid "Creating tags" -msgstr "" - -msgid "Did you create a new tag?" -msgstr "" - -msgid "Removing tags" -msgstr "" - -msgid "Did you remove all tags?" -msgstr "" - -msgid "Tagging later" -msgstr "" - -msgid "Remote Tags" -msgstr "" - -msgid "v1 tag in your repo" -msgstr "" - -msgid "v2 tag in your repo" -msgstr "" - -msgid "v2 tag in the remote" -msgstr "" - -msgid "Empty sandbox" -msgstr "" - -msgid "Sandbox with a remote" -msgstr "" - -msgid "Sandbox with three commits" -msgstr "" - -#: DESCRIPTION -msgid "" -"So you have decided to apply for time travel school, to learn how to use " -"this time machine called 'Git'!\n" -"\n" -"How exciting!\n" -"\n" -"You're almost done with the paperwork! You just need to fill in one more " -"reason why you want to learn Git." -msgstr "" - -msgid "" -"This time, you're making a lot of backup copies - you can look at them by " -"clicking on them!" -msgstr "" - -msgid "" -"You've been accepted to time travel school! Yay! It's your first day! Your " -"teacher explains:\n" -"\n" -"'To do anything with a time machine, you first need to initialize it!'\n" -"\n" -"Drag that blue card up to play it!" -msgstr "" - -msgid "" -"These playing cards are designed to be easy to use and to remember! We'd " -"suggest sticking to them if you don't have a lot of experience with Git!" -msgstr "" - -msgid "" -"You can use your time machine to make snapshots of objects around you! Here, " -"let's practice this!\n" -"\n" -"(Your teacher pours some water into a glass.)" -msgstr "" - -msgid "" -"Let's add your name to our list of students!\n" -"\n" -"I already have a second commit of it in my time machine - let's work " -"together!" -msgstr "" - -msgid "" -"The first day at Time Travel School comes to an end and you receive the key " -"to your room.\n" -"Full of excitement you open the door just to find... spider webs! Spider " -"webs everywhere!\n" -"\n" -"Remove all the spider webs you can find with the remove card!" -msgstr "" - -msgid "" -"Now that your room looks tidy, you can start to unpack your stuff. You " -"brought two new pieces of furniture with you and with a bright smile,\n" -"you see that their colors match the color of your bed!\n" -"\n" -"Build up your two pieces of furniture by playing the touch card.\n" -"Then name your furniture - you can choose whatever you like.\n" -"\n" -"Make sure the colors match! You can find the bed's color in its " -"description.\n" -"Don't forget to add a color and description to your new furnitures, too!" -msgstr "" - -msgid "" -"The yellow boxes are frozen points in time, we call them 'commits'! You can " -"travel between them using the 'checkout' card! (Try it!)\n" -"\n" -"Can you find out what happened here? Then, while on the last commit, edit " -"the files to fix the problem, and make a new commit!" -msgstr "" - -msgid "" -"Did you know that creating parallel timelines is perfectly legal and safe? " -"It's true!\n" -"\n" -"Can you find out when things went wrong in this zoo? Then, go back to the " -"last good commit and create a parallel universe where everyone is happy!" -msgstr "" - -msgid "" -"You were invited to two parties! At one of them, your favorite band is " -"playing - and the other one is your best friend's birthday party. Where " -"should you go? No worries - as a time travel agent in training, you can go " -"to both parties!\n" -"\n" -"To make it easier to tell which timeline is which, you can create time " -"portals! (We call these 'branches'.)" -msgstr "" - -msgid "" -"Note that there are two options to 'travel to the end of a timeline':\n" -"\n" -"First, you can directly travel to the commit, like we've done it before.\n" -"\n" -"And second, you can travel to the branch label. In this case, when you make " -"a new commit, the branch will grow with you, and still point at the end of " -"the timeline!" -msgstr "" - -msgid "" -"Life is full of dangers, right? Even when walking to school, it seems like " -"there's a lot of risks!\n" -"\n" -"This Monday is especially bad. You made it to school, but there's some " -"timelines you definitely don't want to keep around." -msgstr "" - -msgid "" -"One of your colleagues messed up here, and put the branches in the wrong " -"timelines!\n" -"\n" -"You could delete and re-create these branches - but you can also directly " -"move them to different commits, by using\n" -"\n" -" git checkout\n" -"\n" -"on the branch names, and then using\n" -"\n" -" git reset --hard\n" -"\n" -"on the commit where you want the branch to be.\n" -"\n" -"The donut branch is in the right place, but the timeline is still incomplete " -"- make you actually *eat* the donut in that branch!" -msgstr "" - -msgid "" -"Here's a trick so that you can sleep a bit longer: just do all your morning " -"activities in parallel universes, and then at the end, merge them together!" -msgstr "" - -msgid "" -"Sometimes, timelines will contradict each other.\n" -"\n" -"For example, in this case, one of our clients wants these timelines merged, " -"but they ate different things for breakfast in both timelines.\n" -"\n" -"Try to merge them together! You'll notice that there will be a conflict! The " -"time machine will leave it up to you how to proceed: you can edit the " -"problematic item, it will show you the conflicting sections. You can keep " -"either of the two versions - or create a combination of them! Remove the " -">>>, <<<, and === markers, and make a new commit to finalize the merge!\n" -"\n" -"Let your finalized timeline be the 'main' one." -msgstr "" - -msgid "" -"Welcome to today's lesson! We're going to learn how to make commits with " -"more precision!\n" -"\n" -"Have a look at these two timelines. They have exactly the same outcome. But " -"one of them makes it much easier to figure out what happened." -msgstr "" - -msgid "" -"So far, when we made a commit, we've always recorded the current status of " -"all objects, right?\n" -"\n" -"But Git allows you to pick which changes you want to put in a commit!\n" -"\n" -"To learn how that works, we need to learn about the 'index'! In the index, " -"we can prepare what will be in the next commit. In this game, the index is " -"represented by a blue aura around icons in the file browser!\n" -"\n" -"Initially, the index is empty. To make a commit that contains a new file, we " -"need to add it!" -msgstr "" - -msgid "" -"When we change files, the index won't change on its own. We have to use `git " -"add` to update the index to the changed version of the file.\n" -"\n" -"Let's try that!\n" -"\n" -"The icons in the file browser show you when the actual file (white) and the " -"version in the index (blue) are different, and when they are the same!" -msgstr "" - -msgid "" -"See the dark shadow behind the icons? That's the version of the file in the " -"last commit!\n" -"\n" -"For example, these candles have been blown out, and that change has been " -"added.\n" -"\n" -"But you decide that this was a mistake! You only want to blow out the red " -"candle in the next commit!\n" -"\n" -"If you already have updated the index to a changed file, but want to reset " -"it, you can use `git reset`!" -msgstr "" - -msgid "" -"The index is really useful, because it allows us to be precise about which " -"changes we want to include in each commit!" -msgstr "" - -msgid "" -"Your friend added another line to your essay! Get it, add a third one and " -"send it to them!\n" -"\n" -"Take turns until you have five lines!" -msgstr "" - -msgid "" -"Both you and your friend have been working on the file, and want to sync up!" -msgstr "" - -msgid "" -"Okay - turns out that saving time in the morning by utilizing parallel " -"universes is against the regulations of the International Time Travel " -"Association. You'll have to do your tasks in sequence after all.\n" -"\n" -"See the 'rebase' card? When you drag it to a commit, it will copy the events " -"in your current timeline after the specified one! This way, make a clean, " -"linear timeline where you visit all three shops.\n" -"\n" -"Again, we want to make that our base reality - the 'main' branch should " -"point to that timeline!" -msgstr "" - -msgid "" -"Oops, looks like there's something messed up here. Can you put the events " -"back into their correct order?\n" -"\n" -"There are two ways to do this: You can drag the 'interactive rebase' card to " -"the commit before the one you want to change, then reorder the lines in the " -"file that opens, and save it.\n" -"\n" -"Or you can reset the main tag to the very first commit, and then cherry-pick " -"single commits in the order you want. You have cards for both approaches!" -msgstr "" - -msgid "" -"Oops - you deleted the 'essay' file, which you worked on all night!\n" -"\n" -"Luckily, Git is here to help! You can use `git checkout` to restore the file!" -msgstr "" - -msgid "" -"Here's a similar problem: you really liked the essay from the very first " -"commit, and want to have it back! Well, checkout can also restore things " -"from older commits, Here's how:\n" -"\n" -" git checkout [commit] [file]" -msgstr "" - -msgid "" -"Oh no, we made a bad commit! How can we undo making the commit, and go back " -"to a point where we can try again?\n" -"\n" -"The answer is using `git reset [commit]`, which does two things:\n" -"\n" -"- It resets the current branch ref to the commit you specify.\n" -"- And it resets the index to that commit.\n" -"\n" -"It does not change your working directory in any way, which means that after " -"that, you can try making the commit you want again." -msgstr "" - -msgid "" -"We were talking about how to undo a commit, and fix it. This only helps when " -"you haven't already pushed it to a remote. When that has happened, and you " -"want to undo the effects of the commit completely, your best option is `git " -"revert`" -msgstr "" - -msgid "" -"Say you were looking at something in the past, and then switched back to the " -"main branch.\n" -"\n" -"But then, you got reaaally distracted, and after your lunch break, you can't " -"remember on which commit in the past you were before. How can you find out?\n" -"\n" -"There's a convenient command that shows you all the places your HEAD did " -"point to in the past:\n" -"\n" -" git reflog" -msgstr "" - -msgid "" -"Your friend has a problem! Clone the repo, create a branch called " -"'solution', and fix the problem in this branch. When you're ready, make a " -"'Pull Request' by using `git tag pr`." -msgstr "" - -msgid "" -"(Please zoom out a bit using your mouse wheel! :D)\n" -"\n" -"Oh no! You have lost your key at some point during the day!\n" -"\n" -"Sure, you could look at every single commit in an attempt to find it - but " -"there's a better way: your time machine has a built-in way to find the point " -"in time where things went wrong quickly!\n" -"\n" -"First, play the 'bisect start' card. Then, go to a commit where you don't " -"have the key, and play the 'bisect bad' card. Likewise, go to a commit early " -"on where you have the key *in your pocket*, and play the 'bisect good " -"card'.\n" -"\n" -"After you've found the last good commit, reset the main branch to it. What " -"happened to the key after you lost it?" -msgstr "" - -msgid "" -"You will encounter situations in which you are working on your project but " -"you need to\n" -"put your current changes aside temporarily. To do so, you can use the stash " -"function. Use\n" -" git stash push \n" -"to add your current changes to the stash stack.\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"When you stashed your changes and you want to apply them back to your " -"current working directory, you can use\n" -" git stash pop\n" -"This will remove the changes from the stash stack. If you also want to keep " -"the changes on the stash stack, use\n" -" git stash apply\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"If you want to inspect your stash stack, use the command\n" -" git stash list\n" -" \n" -"Oh, you don't want to keep your stashed changes? There are way too many? " -"Then go ahead and clear the stack with\n" -" git stash clear\n" -"If you only want to discard a certain stash entry, you can use\n" -" git stash drop \n" -" \n" -"Clear your stash stack!\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"If you want to keep your changes but they don't belong to the main branch, " -"you can easily\n" -"create a new branch from your stashed changes. Just use\n" -" git stash branch \n" -"If you just want to use the latest stash entry, you can leave the " -"option empty.\n" -"\n" -"Create a new branch from the stashed changes!\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"When you want to reapply your changes but you already continued working on " -"your file, you might get\n" -"a merge conflict! Let's practise this situation.\n" -"Pop the changes from the stash with\n" -" git stash pop\n" -"and resolve the merge conflict. Commit the resolved changes and clear the " -"stash stack afterwards.\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"Some of your commits may be special commits. Maybe you reached a milestone " -"or a new version number.\n" -"\n" -"You can mark these commits with a special flag called 'tag'.\n" -"\n" -"Write \n" -"\n" -" git tag \n" -" \n" -"to tag your commit.\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"You added way too many tags? No prob! Delete them with\n" -"\n" -" git tag -d \n" -" \n" -"Remove all tags in this repo!\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"But what happens if you forgot to tag your current commit?\n" -"No Prob! You can also tag older commits via\n" -"\n" -" git tag \n" -" \n" -"Tag the commit 'Adding feature 2' with the name 'v1'!\n" -"\n" -"---\n" -"tipp1\n" -"---\n" -"tipp2\n" -"---\n" -"tipp3" -msgstr "" - -msgid "" -"When you work with remote repositories, tags are not pushed or pulled " -"automatically.\n" -"\n" -"You can push a tag with\n" -" git push \n" -"Or all tags with:\n" -" git push --tags\n" -" \n" -"Deleting tags on your remote works with: \n" -" git push --delete \n" -" \n" -"You can also sync \n" -" git fetch --prune --prune-tags\n" -"\n" -"\n" -"Add a tag named 'v2' to the last commit and push it to the remote. Also pull " -"the v1 tag to your local repository." -msgstr "" - -msgid "This is an empty sandbox you can play around in." -msgstr "" - -msgid "" -"Here's a sandbox with a remote! Try pulling, fetching, or pushing!\n" -"\n" -"How can you push tags and branches on a remote? How can you delete them " -"again?" -msgstr "" - -msgid "" -"Here's a sandbox you can play around in.\n" -"\n" -"You can use both the playing cards, as well as the terminal. This is a real " -"Git terminal! Fun things to try:\n" -"\n" -"- Make a commit that merges three timelines together at once!\n" -"- Create and delete some tags!\n" -"- Make a timeline that's completely independent of the rest!" -msgstr "" - -#: HITS -msgid "" -"But there's another way to interact with Git:\n" -"\n" -"Try typing `git init` into the black terminal below, and pressing the enter " -"key!" -msgstr "" - -msgid "" -"Again, instead of using the card, you can also type the commands which are " -"printed on it into the black terminal below!\n" -"\n" -"This is totally optional! But this will be a super useful skill in the real " -"world - and it will give you a sparkling golden badge! :)" -msgstr "" - -msgid "" -"To go back to old commands, you can press arrow up and down. That way, you " -"don't have to type in long commands twice." -msgstr "" - -msgid "" -"On the command line, you can easily delete all files ending in -web using " -"this command:\n" -"\n" -" rm *web" -msgstr "" - -msgid "" -"To checkout a specific commit, type `git checkout`, then a space, and then " -"right click on the commit you want!\n" -"\n" -"This will insert the commit's unique identifier!" -msgstr "" - -msgid "" -"The blue animal represents a concept known as the 'HEAD pointer' in Git: It " -"shows you which commit is the current one.\n" -"\n" -"Here's a cool trick to go to the previous commit: \n" -"\n" -" git checkout HEAD^\n" -"\n" -"You can also go back two commits by typing, for example: \n" -"\n" -" git checkout HEAD~2" -msgstr "" - -msgid "" -"Branches also make it really easy to travel between different places using " -"the command line! As soon as you have a branch called 'birthday', you can " -"type `git checkout birthday` to travel to it!" -msgstr "" - -msgid "" -"To travel to a branch, type `git checkout name_of_the_branch`.\n" -"\n" -"And to travel to the last commit, type `git checkout --detach " -"name_of_the_branch`." -msgstr "" - -msgid "" -"You can use tab completion in the terminal! Start typing a filename, then " -"press the tab key to complete its name. This will often save you some time!" -msgstr "" - -#: CONGRAT -msgid "" -"Good job, you solved the level!\n" -"\n" -"Feel free to try a few more things or click 'Next level'." -msgstr "" - -msgid "" -"Suddenly, your cat jumps on the table, snatches away the form, and runs " -"away! Oh no. All your hard work, gone!\n" -"\n" -"You clearly need a better solution.\n" -"\n" -"(Click 'Next Level' as soon as you're ready!)" -msgstr "" - -msgid "" -"Okay, this kind of works.\n" -"\n" -"But you're a bit worried that you'll end up with hundreds of copies of this " -"form, and it will be hard to keep track of all of them.\n" -"\n" -"And especially when working with other people, sending copies back and forth " -"doesn't seem ideal.\n" -"\n" -"You can't wait to try these time machines!" -msgstr "" - -msgid "" -"Nice! See that little owl squirrel that appeared? It will be your companion, " -"and always show you where you are in time!" -msgstr "" - -msgid "" -"Cool! Instead of using the playing cards, you can also do everything via the " -"command line!\n" -"\n" -"The command line is pretty powerful! Often, you can use it to solve tasks " -"faster compared to using a graphical interface." -msgstr "" - -msgid "" -"Nice! You can try making some additional commits. When you feel comfortable, " -"click on 'Next Level'." -msgstr "" - -msgid "" -"Welcome to time travel school! :) I'll see you for your first class tomorrow!" -msgstr "" - -msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" -msgstr "" - -msgid "Don't you immediately feel more at home?" -msgstr "" - -msgid "" -"Wonderful! Now that you're getting familiar with the time machine, let's " -"look at some more complicated situations..." -msgstr "" - -msgid "" -"Whew, good job! This seems like a *much* better outcome.\n" -"\n" -"Feel free to add more parallel timelines, or make them longer.\n" -"\n" -"If you're ready, our next mission is already waiting..." -msgstr "" - -msgid "" -"Now you can travel between those branches easily (using `git checkout`) - " -"try it!\n" -"\n" -"Your friend is happy that you made it to the birthday party and you also got " -"your concert ticket signed. Yay!" -msgstr "" - -msgid "" -"On second thought, maybe you even prefer the ice cream timeline to the main " -"one? :)" -msgstr "" - -msgid "" -"I wonder if you're more relaxed when you *sleep* in parallel timelines..." -msgstr "" - -msgid "Yum, that sounds like a good breakfast!" -msgstr "" - -msgid "" -"Notice how the other timelines and commits are still there - if anything " -"goes wrong, you can also travel back to them.\n" -"\n" -"It's really hard to actually *destroy* stuff with your time machine." -msgstr "" - -msgid "" -"Feel free to reset the level and try the other strategy! Which one do you " -"like better?" -msgstr "" - -msgid "" -"Well done! :) The only problem is that you now have to walk all the way back " -"home, again..." -msgstr "" - -msgid "Nice stash you got there! :)" -msgstr "" - -msgid "Yay, you got your changes back! :)" -msgstr "" - -msgid "All clear! :)" -msgstr "" - -msgid "Stashed changes are in a new branch! :)" -msgstr "" - -msgid "Nice! You tagged your first commit :)" -msgstr "" - -msgid "Well done :)" -msgstr "" diff --git a/scenes/Language.gd b/scenes/Language.gd index 35d96b3..7c0ec82 100644 --- a/scenes/Language.gd +++ b/scenes/Language.gd @@ -29,6 +29,7 @@ func _on_item_pressed(id): var value = tr(game.languages[key]) if value == lang: game.os_lang = key + game.levels_dir = "res://levels/" + key check_current_items() TranslationServer.set_locale(game.os_lang) diff --git a/scenes/chapter.gd b/scenes/chapter.gd index 9f2abc2..856f59b 100644 --- a/scenes/chapter.gd +++ b/scenes/chapter.gd @@ -13,7 +13,7 @@ func load(path): var level_names = [] var dir = Directory.new() - dir.open("res://levels/%s" % slug) + dir.open(game.levels_dir + "/%s" % slug) dir.list_dir_begin() while true: @@ -28,7 +28,7 @@ func load(path): var final_level_sequence = [] - var level_sequence = Array(helpers.read_file("res://levels/%s/sequence" % slug, "").split("\n")) + var level_sequence = Array(helpers.read_file(game.levels_dir + "/%s/sequence" % slug, "").split("\n")) for level in level_sequence: if level == "": @@ -42,7 +42,7 @@ func load(path): for l in final_level_sequence: var level = Level.new() - level.load("res://levels/%s/%s" % [slug, l]) + level.load(game.levels_dir + "/%s/%s" % [slug, l]) levels.push_back(level) func _to_string(): diff --git a/scenes/game.gd b/scenes/game.gd index a336900..cf84db2 100644 --- a/scenes/game.gd +++ b/scenes/game.gd @@ -1,7 +1,8 @@ extends Node var languages = {"en": tr("English"), "it": tr("Italian")} # Localizations allowed -var os_lang = OS.get_locale_language() # Variable for game localization +var os_lang = OS.get_locale_language() # Variable for game localization (it, en, ecc...) +var levels_dir = "res://levels/" + os_lang var tmp_prefix = OS.get_user_data_dir() + "/tmp/" var global_shell diff --git a/scenes/level.gd b/scenes/level.gd index 743430f..bb9ba30 100644 --- a/scenes/level.gd +++ b/scenes/level.gd @@ -20,9 +20,8 @@ func load(path): # This is a new-style level. var config = helpers.parse(path) - title = tr(config.get("title", slug)) # Title of Levels + title = config.get("title", slug) description = config.get("description", "(no description)") - description = tr(description.replace("\"", "\'")) # Descriptions how to make the level # Surround all lines indented with four spaces with [code] tags. var monospace_regex = RegEx.new() @@ -31,11 +30,9 @@ func load(path): description = description.split("---") var cli_hints = config.get("cli", "") - cli_hints = tr(cli_hints.replace("\"", "\'")) # suggestions to work strong # Also do this substitution in the CLI hints. cli_hints = monospace_regex.sub(cli_hints, "\n [code][color=#bbbb5d]$1[/color][/code]", true) - # Also replace `code` with [code] tags. var monospace_inline_regex = RegEx.new() monospace_inline_regex.compile("`([^`]+)`") @@ -46,8 +43,6 @@ func load(path): description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]" congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.") - congrats = congrats.replace("\"", "\'") - congrats = tr(congrats) # Congratulations when the level is finish cards = Array(config.get("cards", "").split(" ")) if cards == [""]: cards = [] @@ -87,7 +82,6 @@ func load(path): for line in Array(config[k].split("\n")): if line.length() > 0 and line[0] == "#": desc = line.substr(1).strip_edges(true, true) - desc = desc.replace("\"", "\'") else: if not repos[repo].win_conditions.has(desc): repos[repo].win_conditions[desc] = "" diff --git a/scenes/levels.gd b/scenes/levels.gd index 0efb4dd..518e9fd 100644 --- a/scenes/levels.gd +++ b/scenes/levels.gd @@ -3,13 +3,14 @@ extends Node var chapters func _ready(): + print(game.os_lang) reload() func reload(): chapters = [] var dir = Directory.new() - dir.open("res://levels/") + dir.open(game.levels_dir) dir.list_dir_begin() var chapter_names = [] @@ -26,7 +27,7 @@ func reload(): var final_chapter_sequence = [] - var chapter_sequence = Array(helpers.read_file("res://levels/sequence", "").split("\n")) + var chapter_sequence = Array(helpers.read_file(game.levels_dir + "/sequence", "").split("\n")) for chapter in chapter_sequence: if chapter == "": @@ -40,5 +41,5 @@ func reload(): for c in final_chapter_sequence: var chapter = Chapter.new() - chapter.load("res://levels/%s" % c) + chapter.load(game.levels_dir + "/%s" % c) chapters.push_back(chapter) From 9caaddc06efa54d3a9493a1589b272f681ffa4be Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Tue, 13 Sep 2022 17:44:51 +0200 Subject: [PATCH 48/49] Some adjustaments --- project.godot | 2 +- scenes/levels.gd | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/project.godot b/project.godot index f349d1d..fa90c90 100644 --- a/project.godot +++ b/project.godot @@ -151,7 +151,7 @@ mute={ [locale] -translations=PoolStringArray( "res://locale/it_IT/it_IT-cards.po", "res://locale/it_IT/it_IT-levels.po", "res://locale/it_IT/it_IT-text.po" ) +translations=PoolStringArray( "res://locale/it_IT/it_IT-cards.po", "res://locale/it_IT/it_IT-text.po" ) locale_filter=[ 0, [ ] ] [network] diff --git a/scenes/levels.gd b/scenes/levels.gd index 518e9fd..6fff54f 100644 --- a/scenes/levels.gd +++ b/scenes/levels.gd @@ -3,7 +3,6 @@ extends Node var chapters func _ready(): - print(game.os_lang) reload() func reload(): From b12d0e778f50f30de58aab8a890f32de010f5d6e Mon Sep 17 00:00:00 2001 From: Luca Canali Date: Wed, 5 Oct 2022 11:33:21 +0200 Subject: [PATCH 49/49] first commit for the new structure of directories of levels like as @schokotets suggestion --- levels/{en/bisect => bisect/en}/bisect | 0 levels/{it/bisect => bisect/it}/bisect | 0 levels/{en => }/bisect/sequence | 0 .../{en/branches => branches/en}/branch-create | 0 .../{en/branches => branches/en}/branch-remove | 0 .../branches => branches/en}/checkout-commit | 0 levels/{en/branches => branches/en}/fork | 0 levels/{en/branches => branches/en}/grow | 0 levels/{en/branches => branches/en}/reorder | 0 .../{it/branches => branches/it}/branch-create | 0 .../{it/branches => branches/it}/branch-remove | 0 .../branches => branches/it}/checkout-commit | 0 levels/{it/branches => branches/it}/fork | 0 levels/{it/branches => branches/it}/grow | 0 levels/{it/branches => branches/it}/reorder | 0 levels/{en => }/branches/sequence | 0 .../en}/rebase | 0 .../en}/reorder | 0 .../it}/rebase | 0 .../it}/reorder | 0 levels/{en => }/changing-the-past/sequence | 0 levels/{en/files => files/en}/files-add | 0 levels/{en/files => files/en}/files-delete | 0 levels/{it/files => files/it}/files-add | 0 levels/{it/files => files/it}/files-delete | 0 levels/{en => }/files/sequence | 0 levels/{en/index => index/en}/add | 0 levels/{en/index => index/en}/change | 0 levels/{en/index => index/en}/checkout | 0 levels/{en/index => index/en}/compare | 0 levels/{en/index => index/en}/new | 0 levels/{en/index => index/en}/reset | 0 levels/{en/index => index/en}/rm | 0 levels/{en/index => index/en}/steps | 0 levels/{it/index => index/it}/add | 0 levels/{it/index => index/it}/change | 0 levels/{it/index => index/it}/checkout | 0 levels/{it/index => index/it}/compare | 0 levels/{it/index => index/it}/new | 0 levels/{it/index => index/it}/reset | 0 levels/{it/index => index/it}/rm | 0 levels/{it/index => index/it}/steps | 0 levels/{en => }/index/sequence | 0 levels/{en/intro => intro/en}/cli | 0 levels/{en/intro => intro/en}/commit | 0 levels/{en/intro => intro/en}/copies | 0 levels/{en/intro => intro/en}/init | 0 levels/{en/intro => intro/en}/remote | 0 levels/{en/intro => intro/en}/risky | 0 levels/{en/intro => intro/en}/who-are-you | 0 levels/{it/intro => intro/it}/cli | 0 levels/{it/intro => intro/it}/commit | 0 levels/{it/intro => intro/it}/copies | 0 levels/{it/intro => intro/it}/init | 0 levels/{it/intro => intro/it}/remote | 0 levels/{it/intro => intro/it}/risky | 0 levels/{it/intro => intro/it}/who-are-you | 0 levels/{en => }/intro/sequence | 0 levels/it/bisect/sequence | 1 - levels/it/branches/sequence | 6 ------ levels/it/changing-the-past/sequence | 2 -- levels/it/files/sequence | 3 --- levels/it/index/#sequence# | 5 ----- levels/it/index/sequence | 5 ----- levels/it/intro/sequence | 6 ------ levels/it/low-level/sequence | 18 ------------------ levels/it/merge/sequence | 3 --- levels/it/remotes/sequence | 2 -- levels/it/sandbox/sequence | 3 --- levels/it/sequence | 13 ------------- levels/it/shit-happens/sequence | 5 ----- levels/it/stash/sequence | 5 ----- levels/it/tags/sequence | 4 ---- levels/it/workflows/sequence | 1 - levels/{en/low-level => low-level/en}/basics | 0 .../{en/low-level => low-level/en}/blob-create | 0 .../{en/low-level => low-level/en}/blob-remove | 0 .../low-level => low-level/en}/commit-create | 0 .../low-level => low-level/en}/commit-parents | 0 .../low-level => low-level/en}/commit-rhombus | 0 .../{en/low-level => low-level/en}/index-add | 0 .../low-level => low-level/en}/index-remove | 0 .../low-level => low-level/en}/index-update | 0 .../en}/puzzle-apocalypse | 0 .../en}/puzzle-precious-blob | 0 .../en}/puzzle-trees-all-the-way-down | 0 .../{en/low-level => low-level/en}/ref-create | 0 levels/{en/low-level => low-level/en}/ref-move | 0 .../{en/low-level => low-level/en}/ref-remove | 0 .../low-level => low-level/en}/symref-create | 0 .../low-level => low-level/en}/symref-no-deref | 0 .../{en/low-level => low-level/en}/tree-create | 0 .../{en/low-level => low-level/en}/tree-nested | 0 .../{en/low-level => low-level/en}/tree-read | 0 levels/{en/low-level => low-level/en}/welcome | 0 levels/{it/low-level => low-level/it}/basics | 0 .../{it/low-level => low-level/it}/blob-create | 0 .../{it/low-level => low-level/it}/blob-remove | 0 .../low-level => low-level/it}/commit-create | 0 .../low-level => low-level/it}/commit-parents | 0 .../low-level => low-level/it}/commit-rhombus | 0 .../{it/low-level => low-level/it}/index-add | 0 .../low-level => low-level/it}/index-remove | 0 .../low-level => low-level/it}/index-update | 0 .../it}/puzzle-apocalypse | 0 .../it}/puzzle-precious-blob | 0 .../it}/puzzle-trees-all-the-way-down | 0 .../{it/low-level => low-level/it}/ref-create | 0 levels/{it/low-level => low-level/it}/ref-move | 0 .../{it/low-level => low-level/it}/ref-remove | 0 .../low-level => low-level/it}/symref-create | 0 .../low-level => low-level/it}/symref-no-deref | 0 .../{it/low-level => low-level/it}/tree-create | 0 .../{it/low-level => low-level/it}/tree-nested | 0 .../{it/low-level => low-level/it}/tree-read | 0 levels/{it/low-level => low-level/it}/welcome | 0 levels/{en => }/low-level/sequence | 0 levels/{en/merge => merge/en}/conflict | 0 levels/{en/merge => merge/en}/merge | 0 levels/{en/merge => merge/en}/merge-abort | 0 levels/{it/merge => merge/it}/conflict | 0 levels/{it/merge => merge/it}/merge | 0 levels/{it/merge => merge/it}/merge-abort | 0 levels/{en => }/merge/sequence | 0 levels/{en/remotes => remotes/en}/friend | 0 levels/{en/remotes => remotes/en}/problems | 0 levels/{it/remotes => remotes/it}/friend | 0 levels/{it/remotes => remotes/it}/problems | 0 levels/{en => }/remotes/sequence | 0 levels/{en/sandbox => sandbox/en}/empty | 0 levels/{en/sandbox => sandbox/en}/remote | 0 .../{en/sandbox => sandbox/en}/three-commits | 0 levels/{it/sandbox => sandbox/it}/empty | 0 levels/{it/sandbox => sandbox/it}/remote | 0 .../{it/sandbox => sandbox/it}/three-commits | 0 levels/{en => }/sandbox/sequence | 0 levels/{en => }/sequence | 0 .../en}/bad-commit | 0 .../en}/pushed-something-broken | 0 .../shit-happens => shit-happens/en}/reflog | 0 .../en}/restore-a-file | 0 .../en}/restore-a-file-from-the-past | 0 .../it}/bad-commit | 0 .../it}/pushed-something-broken | 0 .../shit-happens => shit-happens/it}/reflog | 0 .../it}/restore-a-file | 0 .../it}/restore-a-file-from-the-past | 0 levels/{en => }/shit-happens/sequence | 0 levels/{en/stash => stash/en}/stash | 0 levels/{en/stash => stash/en}/stash-branch | 0 levels/{en/stash => stash/en}/stash-clear | 0 levels/{en/stash => stash/en}/stash-merge | 0 levels/{en/stash => stash/en}/stash-pop | 0 levels/{it/stash => stash/it}/stash | 0 levels/{it/stash => stash/it}/stash-branch | 0 levels/{it/stash => stash/it}/stash-clear | 0 levels/{it/stash => stash/it}/stash-merge | 0 levels/{it/stash => stash/it}/stash-pop | 0 levels/{en => }/stash/sequence | 0 levels/{en/tags => tags/en}/add-tag | 0 levels/{en/tags => tags/en}/add-tag-later | 0 levels/{en/tags => tags/en}/remote-tag | 0 levels/{en/tags => tags/en}/remove-tag | 0 levels/{it/tags => tags/it}/add-tag | 0 levels/{it/tags => tags/it}/add-tag-later | 0 levels/{it/tags => tags/it}/remote-tag | 0 levels/{it/tags => tags/it}/remove-tag | 0 levels/{en => }/tags/sequence | 0 levels/{en/unused => unused/en}/checkout | 0 levels/{en/unused => unused/en}/clone | 0 levels/{en/unused => unused/en}/commit | 0 levels/{en/unused => unused/en}/commit-a | 0 levels/{en/unused => unused/en}/fetch | 0 levels/{en/unused => unused/en}/files-move | 0 levels/{en/unused => unused/en}/index-mv | 0 levels/{en/unused => unused/en}/init | 0 levels/{en/unused => unused/en}/pull-push | 0 levels/{en/unused => unused/en}/remotes-add | 0 levels/{en/unused => unused/en}/remotes-delete | 0 levels/{en/unused => unused/en}/restore | 0 levels/{en/unused => unused/en}/split | 0 levels/{en/unused => unused/en}/steps | 0 levels/{en/unused => unused/en}/who-are-you | 0 levels/{it/unused => unused/it}/checkout | 0 levels/{it/unused => unused/it}/clone | 0 levels/{it/unused => unused/it}/commit | 0 levels/{it/unused => unused/it}/commit-a | 0 levels/{it/unused => unused/it}/fetch | 0 levels/{it/unused => unused/it}/files-move | 0 levels/{it/unused => unused/it}/index-mv | 0 levels/{it/unused => unused/it}/init | 0 levels/{it/unused => unused/it}/pull-push | 0 levels/{it/unused => unused/it}/remotes-add | 0 levels/{it/unused => unused/it}/remotes-delete | 0 levels/{it/unused => unused/it}/restore | 0 levels/{it/unused => unused/it}/split | 0 levels/{it/unused => unused/it}/steps | 0 levels/{it/unused => unused/it}/who-are-you | 0 .../{en/workflows => workflows/en}/gitignore | 0 levels/{en/workflows => workflows/en}/pr | 0 .../{it/workflows => workflows/it}/gitignore | 0 levels/{it/workflows => workflows/it}/pr | 0 levels/{en => }/workflows/sequence | 0 scenes/Language.gd | 2 +- scenes/chapter.gd | 14 +++++++++----- scenes/game.gd | 2 +- scenes/levels.gd | 5 +++-- 207 files changed, 14 insertions(+), 91 deletions(-) rename levels/{en/bisect => bisect/en}/bisect (100%) rename levels/{it/bisect => bisect/it}/bisect (100%) rename levels/{en => }/bisect/sequence (100%) rename levels/{en/branches => branches/en}/branch-create (100%) rename levels/{en/branches => branches/en}/branch-remove (100%) rename levels/{en/branches => branches/en}/checkout-commit (100%) rename levels/{en/branches => branches/en}/fork (100%) rename levels/{en/branches => branches/en}/grow (100%) rename levels/{en/branches => branches/en}/reorder (100%) rename levels/{it/branches => branches/it}/branch-create (100%) rename levels/{it/branches => branches/it}/branch-remove (100%) rename levels/{it/branches => branches/it}/checkout-commit (100%) rename levels/{it/branches => branches/it}/fork (100%) rename levels/{it/branches => branches/it}/grow (100%) rename levels/{it/branches => branches/it}/reorder (100%) rename levels/{en => }/branches/sequence (100%) rename levels/{en/changing-the-past => changing-the-past/en}/rebase (100%) rename levels/{en/changing-the-past => changing-the-past/en}/reorder (100%) rename levels/{it/changing-the-past => changing-the-past/it}/rebase (100%) rename levels/{it/changing-the-past => changing-the-past/it}/reorder (100%) rename levels/{en => }/changing-the-past/sequence (100%) rename levels/{en/files => files/en}/files-add (100%) rename levels/{en/files => files/en}/files-delete (100%) rename levels/{it/files => files/it}/files-add (100%) rename levels/{it/files => files/it}/files-delete (100%) rename levels/{en => }/files/sequence (100%) rename levels/{en/index => index/en}/add (100%) rename levels/{en/index => index/en}/change (100%) rename levels/{en/index => index/en}/checkout (100%) rename levels/{en/index => index/en}/compare (100%) rename levels/{en/index => index/en}/new (100%) rename levels/{en/index => index/en}/reset (100%) rename levels/{en/index => index/en}/rm (100%) rename levels/{en/index => index/en}/steps (100%) rename levels/{it/index => index/it}/add (100%) rename levels/{it/index => index/it}/change (100%) rename levels/{it/index => index/it}/checkout (100%) rename levels/{it/index => index/it}/compare (100%) rename levels/{it/index => index/it}/new (100%) rename levels/{it/index => index/it}/reset (100%) rename levels/{it/index => index/it}/rm (100%) rename levels/{it/index => index/it}/steps (100%) rename levels/{en => }/index/sequence (100%) rename levels/{en/intro => intro/en}/cli (100%) rename levels/{en/intro => intro/en}/commit (100%) rename levels/{en/intro => intro/en}/copies (100%) rename levels/{en/intro => intro/en}/init (100%) rename levels/{en/intro => intro/en}/remote (100%) rename levels/{en/intro => intro/en}/risky (100%) rename levels/{en/intro => intro/en}/who-are-you (100%) rename levels/{it/intro => intro/it}/cli (100%) rename levels/{it/intro => intro/it}/commit (100%) rename levels/{it/intro => intro/it}/copies (100%) rename levels/{it/intro => intro/it}/init (100%) rename levels/{it/intro => intro/it}/remote (100%) rename levels/{it/intro => intro/it}/risky (100%) rename levels/{it/intro => intro/it}/who-are-you (100%) rename levels/{en => }/intro/sequence (100%) delete mode 100644 levels/it/bisect/sequence delete mode 100644 levels/it/branches/sequence delete mode 100644 levels/it/changing-the-past/sequence delete mode 100644 levels/it/files/sequence delete mode 100644 levels/it/index/#sequence# delete mode 100644 levels/it/index/sequence delete mode 100644 levels/it/intro/sequence delete mode 100644 levels/it/low-level/sequence delete mode 100644 levels/it/merge/sequence delete mode 100644 levels/it/remotes/sequence delete mode 100644 levels/it/sandbox/sequence delete mode 100644 levels/it/sequence delete mode 100644 levels/it/shit-happens/sequence delete mode 100644 levels/it/stash/sequence delete mode 100644 levels/it/tags/sequence delete mode 100644 levels/it/workflows/sequence rename levels/{en/low-level => low-level/en}/basics (100%) rename levels/{en/low-level => low-level/en}/blob-create (100%) rename levels/{en/low-level => low-level/en}/blob-remove (100%) rename levels/{en/low-level => low-level/en}/commit-create (100%) rename levels/{en/low-level => low-level/en}/commit-parents (100%) rename levels/{en/low-level => low-level/en}/commit-rhombus (100%) rename levels/{en/low-level => low-level/en}/index-add (100%) rename levels/{en/low-level => low-level/en}/index-remove (100%) rename levels/{en/low-level => low-level/en}/index-update (100%) rename levels/{en/low-level => low-level/en}/puzzle-apocalypse (100%) rename levels/{en/low-level => low-level/en}/puzzle-precious-blob (100%) rename levels/{en/low-level => low-level/en}/puzzle-trees-all-the-way-down (100%) rename levels/{en/low-level => low-level/en}/ref-create (100%) rename levels/{en/low-level => low-level/en}/ref-move (100%) rename levels/{en/low-level => low-level/en}/ref-remove (100%) rename levels/{en/low-level => low-level/en}/symref-create (100%) rename levels/{en/low-level => low-level/en}/symref-no-deref (100%) rename levels/{en/low-level => low-level/en}/tree-create (100%) rename levels/{en/low-level => low-level/en}/tree-nested (100%) rename levels/{en/low-level => low-level/en}/tree-read (100%) rename levels/{en/low-level => low-level/en}/welcome (100%) rename levels/{it/low-level => low-level/it}/basics (100%) rename levels/{it/low-level => low-level/it}/blob-create (100%) rename levels/{it/low-level => low-level/it}/blob-remove (100%) rename levels/{it/low-level => low-level/it}/commit-create (100%) rename levels/{it/low-level => low-level/it}/commit-parents (100%) rename levels/{it/low-level => low-level/it}/commit-rhombus (100%) rename levels/{it/low-level => low-level/it}/index-add (100%) rename levels/{it/low-level => low-level/it}/index-remove (100%) rename levels/{it/low-level => low-level/it}/index-update (100%) rename levels/{it/low-level => low-level/it}/puzzle-apocalypse (100%) rename levels/{it/low-level => low-level/it}/puzzle-precious-blob (100%) rename levels/{it/low-level => low-level/it}/puzzle-trees-all-the-way-down (100%) rename levels/{it/low-level => low-level/it}/ref-create (100%) rename levels/{it/low-level => low-level/it}/ref-move (100%) rename levels/{it/low-level => low-level/it}/ref-remove (100%) rename levels/{it/low-level => low-level/it}/symref-create (100%) rename levels/{it/low-level => low-level/it}/symref-no-deref (100%) rename levels/{it/low-level => low-level/it}/tree-create (100%) rename levels/{it/low-level => low-level/it}/tree-nested (100%) rename levels/{it/low-level => low-level/it}/tree-read (100%) rename levels/{it/low-level => low-level/it}/welcome (100%) rename levels/{en => }/low-level/sequence (100%) rename levels/{en/merge => merge/en}/conflict (100%) rename levels/{en/merge => merge/en}/merge (100%) rename levels/{en/merge => merge/en}/merge-abort (100%) rename levels/{it/merge => merge/it}/conflict (100%) rename levels/{it/merge => merge/it}/merge (100%) rename levels/{it/merge => merge/it}/merge-abort (100%) rename levels/{en => }/merge/sequence (100%) rename levels/{en/remotes => remotes/en}/friend (100%) rename levels/{en/remotes => remotes/en}/problems (100%) rename levels/{it/remotes => remotes/it}/friend (100%) rename levels/{it/remotes => remotes/it}/problems (100%) rename levels/{en => }/remotes/sequence (100%) rename levels/{en/sandbox => sandbox/en}/empty (100%) rename levels/{en/sandbox => sandbox/en}/remote (100%) rename levels/{en/sandbox => sandbox/en}/three-commits (100%) rename levels/{it/sandbox => sandbox/it}/empty (100%) rename levels/{it/sandbox => sandbox/it}/remote (100%) rename levels/{it/sandbox => sandbox/it}/three-commits (100%) rename levels/{en => }/sandbox/sequence (100%) rename levels/{en => }/sequence (100%) rename levels/{en/shit-happens => shit-happens/en}/bad-commit (100%) rename levels/{en/shit-happens => shit-happens/en}/pushed-something-broken (100%) rename levels/{en/shit-happens => shit-happens/en}/reflog (100%) rename levels/{en/shit-happens => shit-happens/en}/restore-a-file (100%) rename levels/{en/shit-happens => shit-happens/en}/restore-a-file-from-the-past (100%) rename levels/{it/shit-happens => shit-happens/it}/bad-commit (100%) rename levels/{it/shit-happens => shit-happens/it}/pushed-something-broken (100%) rename levels/{it/shit-happens => shit-happens/it}/reflog (100%) rename levels/{it/shit-happens => shit-happens/it}/restore-a-file (100%) rename levels/{it/shit-happens => shit-happens/it}/restore-a-file-from-the-past (100%) rename levels/{en => }/shit-happens/sequence (100%) rename levels/{en/stash => stash/en}/stash (100%) rename levels/{en/stash => stash/en}/stash-branch (100%) rename levels/{en/stash => stash/en}/stash-clear (100%) rename levels/{en/stash => stash/en}/stash-merge (100%) rename levels/{en/stash => stash/en}/stash-pop (100%) rename levels/{it/stash => stash/it}/stash (100%) rename levels/{it/stash => stash/it}/stash-branch (100%) rename levels/{it/stash => stash/it}/stash-clear (100%) rename levels/{it/stash => stash/it}/stash-merge (100%) rename levels/{it/stash => stash/it}/stash-pop (100%) rename levels/{en => }/stash/sequence (100%) rename levels/{en/tags => tags/en}/add-tag (100%) rename levels/{en/tags => tags/en}/add-tag-later (100%) rename levels/{en/tags => tags/en}/remote-tag (100%) rename levels/{en/tags => tags/en}/remove-tag (100%) rename levels/{it/tags => tags/it}/add-tag (100%) rename levels/{it/tags => tags/it}/add-tag-later (100%) rename levels/{it/tags => tags/it}/remote-tag (100%) rename levels/{it/tags => tags/it}/remove-tag (100%) rename levels/{en => }/tags/sequence (100%) rename levels/{en/unused => unused/en}/checkout (100%) rename levels/{en/unused => unused/en}/clone (100%) rename levels/{en/unused => unused/en}/commit (100%) rename levels/{en/unused => unused/en}/commit-a (100%) rename levels/{en/unused => unused/en}/fetch (100%) rename levels/{en/unused => unused/en}/files-move (100%) rename levels/{en/unused => unused/en}/index-mv (100%) rename levels/{en/unused => unused/en}/init (100%) rename levels/{en/unused => unused/en}/pull-push (100%) rename levels/{en/unused => unused/en}/remotes-add (100%) rename levels/{en/unused => unused/en}/remotes-delete (100%) rename levels/{en/unused => unused/en}/restore (100%) rename levels/{en/unused => unused/en}/split (100%) rename levels/{en/unused => unused/en}/steps (100%) rename levels/{en/unused => unused/en}/who-are-you (100%) rename levels/{it/unused => unused/it}/checkout (100%) rename levels/{it/unused => unused/it}/clone (100%) rename levels/{it/unused => unused/it}/commit (100%) rename levels/{it/unused => unused/it}/commit-a (100%) rename levels/{it/unused => unused/it}/fetch (100%) rename levels/{it/unused => unused/it}/files-move (100%) rename levels/{it/unused => unused/it}/index-mv (100%) rename levels/{it/unused => unused/it}/init (100%) rename levels/{it/unused => unused/it}/pull-push (100%) rename levels/{it/unused => unused/it}/remotes-add (100%) rename levels/{it/unused => unused/it}/remotes-delete (100%) rename levels/{it/unused => unused/it}/restore (100%) rename levels/{it/unused => unused/it}/split (100%) rename levels/{it/unused => unused/it}/steps (100%) rename levels/{it/unused => unused/it}/who-are-you (100%) rename levels/{en/workflows => workflows/en}/gitignore (100%) rename levels/{en/workflows => workflows/en}/pr (100%) rename levels/{it/workflows => workflows/it}/gitignore (100%) rename levels/{it/workflows => workflows/it}/pr (100%) rename levels/{en => }/workflows/sequence (100%) diff --git a/levels/en/bisect/bisect b/levels/bisect/en/bisect similarity index 100% rename from levels/en/bisect/bisect rename to levels/bisect/en/bisect diff --git a/levels/it/bisect/bisect b/levels/bisect/it/bisect similarity index 100% rename from levels/it/bisect/bisect rename to levels/bisect/it/bisect diff --git a/levels/en/bisect/sequence b/levels/bisect/sequence similarity index 100% rename from levels/en/bisect/sequence rename to levels/bisect/sequence diff --git a/levels/en/branches/branch-create b/levels/branches/en/branch-create similarity index 100% rename from levels/en/branches/branch-create rename to levels/branches/en/branch-create diff --git a/levels/en/branches/branch-remove b/levels/branches/en/branch-remove similarity index 100% rename from levels/en/branches/branch-remove rename to levels/branches/en/branch-remove diff --git a/levels/en/branches/checkout-commit b/levels/branches/en/checkout-commit similarity index 100% rename from levels/en/branches/checkout-commit rename to levels/branches/en/checkout-commit diff --git a/levels/en/branches/fork b/levels/branches/en/fork similarity index 100% rename from levels/en/branches/fork rename to levels/branches/en/fork diff --git a/levels/en/branches/grow b/levels/branches/en/grow similarity index 100% rename from levels/en/branches/grow rename to levels/branches/en/grow diff --git a/levels/en/branches/reorder b/levels/branches/en/reorder similarity index 100% rename from levels/en/branches/reorder rename to levels/branches/en/reorder diff --git a/levels/it/branches/branch-create b/levels/branches/it/branch-create similarity index 100% rename from levels/it/branches/branch-create rename to levels/branches/it/branch-create diff --git a/levels/it/branches/branch-remove b/levels/branches/it/branch-remove similarity index 100% rename from levels/it/branches/branch-remove rename to levels/branches/it/branch-remove diff --git a/levels/it/branches/checkout-commit b/levels/branches/it/checkout-commit similarity index 100% rename from levels/it/branches/checkout-commit rename to levels/branches/it/checkout-commit diff --git a/levels/it/branches/fork b/levels/branches/it/fork similarity index 100% rename from levels/it/branches/fork rename to levels/branches/it/fork diff --git a/levels/it/branches/grow b/levels/branches/it/grow similarity index 100% rename from levels/it/branches/grow rename to levels/branches/it/grow diff --git a/levels/it/branches/reorder b/levels/branches/it/reorder similarity index 100% rename from levels/it/branches/reorder rename to levels/branches/it/reorder diff --git a/levels/en/branches/sequence b/levels/branches/sequence similarity index 100% rename from levels/en/branches/sequence rename to levels/branches/sequence diff --git a/levels/en/changing-the-past/rebase b/levels/changing-the-past/en/rebase similarity index 100% rename from levels/en/changing-the-past/rebase rename to levels/changing-the-past/en/rebase diff --git a/levels/en/changing-the-past/reorder b/levels/changing-the-past/en/reorder similarity index 100% rename from levels/en/changing-the-past/reorder rename to levels/changing-the-past/en/reorder diff --git a/levels/it/changing-the-past/rebase b/levels/changing-the-past/it/rebase similarity index 100% rename from levels/it/changing-the-past/rebase rename to levels/changing-the-past/it/rebase diff --git a/levels/it/changing-the-past/reorder b/levels/changing-the-past/it/reorder similarity index 100% rename from levels/it/changing-the-past/reorder rename to levels/changing-the-past/it/reorder diff --git a/levels/en/changing-the-past/sequence b/levels/changing-the-past/sequence similarity index 100% rename from levels/en/changing-the-past/sequence rename to levels/changing-the-past/sequence diff --git a/levels/en/files/files-add b/levels/files/en/files-add similarity index 100% rename from levels/en/files/files-add rename to levels/files/en/files-add diff --git a/levels/en/files/files-delete b/levels/files/en/files-delete similarity index 100% rename from levels/en/files/files-delete rename to levels/files/en/files-delete diff --git a/levels/it/files/files-add b/levels/files/it/files-add similarity index 100% rename from levels/it/files/files-add rename to levels/files/it/files-add diff --git a/levels/it/files/files-delete b/levels/files/it/files-delete similarity index 100% rename from levels/it/files/files-delete rename to levels/files/it/files-delete diff --git a/levels/en/files/sequence b/levels/files/sequence similarity index 100% rename from levels/en/files/sequence rename to levels/files/sequence diff --git a/levels/en/index/add b/levels/index/en/add similarity index 100% rename from levels/en/index/add rename to levels/index/en/add diff --git a/levels/en/index/change b/levels/index/en/change similarity index 100% rename from levels/en/index/change rename to levels/index/en/change diff --git a/levels/en/index/checkout b/levels/index/en/checkout similarity index 100% rename from levels/en/index/checkout rename to levels/index/en/checkout diff --git a/levels/en/index/compare b/levels/index/en/compare similarity index 100% rename from levels/en/index/compare rename to levels/index/en/compare diff --git a/levels/en/index/new b/levels/index/en/new similarity index 100% rename from levels/en/index/new rename to levels/index/en/new diff --git a/levels/en/index/reset b/levels/index/en/reset similarity index 100% rename from levels/en/index/reset rename to levels/index/en/reset diff --git a/levels/en/index/rm b/levels/index/en/rm similarity index 100% rename from levels/en/index/rm rename to levels/index/en/rm diff --git a/levels/en/index/steps b/levels/index/en/steps similarity index 100% rename from levels/en/index/steps rename to levels/index/en/steps diff --git a/levels/it/index/add b/levels/index/it/add similarity index 100% rename from levels/it/index/add rename to levels/index/it/add diff --git a/levels/it/index/change b/levels/index/it/change similarity index 100% rename from levels/it/index/change rename to levels/index/it/change diff --git a/levels/it/index/checkout b/levels/index/it/checkout similarity index 100% rename from levels/it/index/checkout rename to levels/index/it/checkout diff --git a/levels/it/index/compare b/levels/index/it/compare similarity index 100% rename from levels/it/index/compare rename to levels/index/it/compare diff --git a/levels/it/index/new b/levels/index/it/new similarity index 100% rename from levels/it/index/new rename to levels/index/it/new diff --git a/levels/it/index/reset b/levels/index/it/reset similarity index 100% rename from levels/it/index/reset rename to levels/index/it/reset diff --git a/levels/it/index/rm b/levels/index/it/rm similarity index 100% rename from levels/it/index/rm rename to levels/index/it/rm diff --git a/levels/it/index/steps b/levels/index/it/steps similarity index 100% rename from levels/it/index/steps rename to levels/index/it/steps diff --git a/levels/en/index/sequence b/levels/index/sequence similarity index 100% rename from levels/en/index/sequence rename to levels/index/sequence diff --git a/levels/en/intro/cli b/levels/intro/en/cli similarity index 100% rename from levels/en/intro/cli rename to levels/intro/en/cli diff --git a/levels/en/intro/commit b/levels/intro/en/commit similarity index 100% rename from levels/en/intro/commit rename to levels/intro/en/commit diff --git a/levels/en/intro/copies b/levels/intro/en/copies similarity index 100% rename from levels/en/intro/copies rename to levels/intro/en/copies diff --git a/levels/en/intro/init b/levels/intro/en/init similarity index 100% rename from levels/en/intro/init rename to levels/intro/en/init diff --git a/levels/en/intro/remote b/levels/intro/en/remote similarity index 100% rename from levels/en/intro/remote rename to levels/intro/en/remote diff --git a/levels/en/intro/risky b/levels/intro/en/risky similarity index 100% rename from levels/en/intro/risky rename to levels/intro/en/risky diff --git a/levels/en/intro/who-are-you b/levels/intro/en/who-are-you similarity index 100% rename from levels/en/intro/who-are-you rename to levels/intro/en/who-are-you diff --git a/levels/it/intro/cli b/levels/intro/it/cli similarity index 100% rename from levels/it/intro/cli rename to levels/intro/it/cli diff --git a/levels/it/intro/commit b/levels/intro/it/commit similarity index 100% rename from levels/it/intro/commit rename to levels/intro/it/commit diff --git a/levels/it/intro/copies b/levels/intro/it/copies similarity index 100% rename from levels/it/intro/copies rename to levels/intro/it/copies diff --git a/levels/it/intro/init b/levels/intro/it/init similarity index 100% rename from levels/it/intro/init rename to levels/intro/it/init diff --git a/levels/it/intro/remote b/levels/intro/it/remote similarity index 100% rename from levels/it/intro/remote rename to levels/intro/it/remote diff --git a/levels/it/intro/risky b/levels/intro/it/risky similarity index 100% rename from levels/it/intro/risky rename to levels/intro/it/risky diff --git a/levels/it/intro/who-are-you b/levels/intro/it/who-are-you similarity index 100% rename from levels/it/intro/who-are-you rename to levels/intro/it/who-are-you diff --git a/levels/en/intro/sequence b/levels/intro/sequence similarity index 100% rename from levels/en/intro/sequence rename to levels/intro/sequence diff --git a/levels/it/bisect/sequence b/levels/it/bisect/sequence deleted file mode 100644 index e8018fe..0000000 --- a/levels/it/bisect/sequence +++ /dev/null @@ -1 +0,0 @@ -bisect diff --git a/levels/it/branches/sequence b/levels/it/branches/sequence deleted file mode 100644 index 2619ea0..0000000 --- a/levels/it/branches/sequence +++ /dev/null @@ -1,6 +0,0 @@ -checkout-commit -fork -branch-create -grow -branch-remove -reorder diff --git a/levels/it/changing-the-past/sequence b/levels/it/changing-the-past/sequence deleted file mode 100644 index 43c5d08..0000000 --- a/levels/it/changing-the-past/sequence +++ /dev/null @@ -1,2 +0,0 @@ -rebase -reorder diff --git a/levels/it/files/sequence b/levels/it/files/sequence deleted file mode 100644 index cb24408..0000000 --- a/levels/it/files/sequence +++ /dev/null @@ -1,3 +0,0 @@ -files-delete -files-add - diff --git a/levels/it/index/#sequence# b/levels/it/index/#sequence# deleted file mode 100644 index 42f7f48..0000000 --- a/levels/it/index/#sequence# +++ /dev/null @@ -1,5 +0,0 @@ -compare -new -change -reset -steps diff --git a/levels/it/index/sequence b/levels/it/index/sequence deleted file mode 100644 index 42f7f48..0000000 --- a/levels/it/index/sequence +++ /dev/null @@ -1,5 +0,0 @@ -compare -new -change -reset -steps diff --git a/levels/it/intro/sequence b/levels/it/intro/sequence deleted file mode 100644 index aa225df..0000000 --- a/levels/it/intro/sequence +++ /dev/null @@ -1,6 +0,0 @@ -risky -copies -init -cli -commit -remote diff --git a/levels/it/low-level/sequence b/levels/it/low-level/sequence deleted file mode 100644 index 5feb0c8..0000000 --- a/levels/it/low-level/sequence +++ /dev/null @@ -1,18 +0,0 @@ -welcome -basics -blob-create -blob-remove -index-add -index-remove -index-update -tree-create -tree-read -tree-nested -commit-create -commit-parents -commit-rhombus -ref-create -ref-move -ref-remove -symref-create -symref-no-deref diff --git a/levels/it/merge/sequence b/levels/it/merge/sequence deleted file mode 100644 index 2e1aa81..0000000 --- a/levels/it/merge/sequence +++ /dev/null @@ -1,3 +0,0 @@ -merge -conflict -merge-abort \ No newline at end of file diff --git a/levels/it/remotes/sequence b/levels/it/remotes/sequence deleted file mode 100644 index 13c5715..0000000 --- a/levels/it/remotes/sequence +++ /dev/null @@ -1,2 +0,0 @@ -friend -problems diff --git a/levels/it/sandbox/sequence b/levels/it/sandbox/sequence deleted file mode 100644 index 29aa91f..0000000 --- a/levels/it/sandbox/sequence +++ /dev/null @@ -1,3 +0,0 @@ -empty -remote -three-commits diff --git a/levels/it/sequence b/levels/it/sequence deleted file mode 100644 index cefcd7a..0000000 --- a/levels/it/sequence +++ /dev/null @@ -1,13 +0,0 @@ -intro -files -branches -merge -index -remotes -changing-the-past -shit-happens -workflows -bisect -stash -tags -sandbox diff --git a/levels/it/shit-happens/sequence b/levels/it/shit-happens/sequence deleted file mode 100644 index 663d5d9..0000000 --- a/levels/it/shit-happens/sequence +++ /dev/null @@ -1,5 +0,0 @@ -restore-a-file -restore-a-file-from-the-past -bad-commit -pushed-something-broken -reflog diff --git a/levels/it/stash/sequence b/levels/it/stash/sequence deleted file mode 100644 index 9dd02f7..0000000 --- a/levels/it/stash/sequence +++ /dev/null @@ -1,5 +0,0 @@ -stash -stash-pop -stash-clear -stash-branch -stash-merge diff --git a/levels/it/tags/sequence b/levels/it/tags/sequence deleted file mode 100644 index fd63d9c..0000000 --- a/levels/it/tags/sequence +++ /dev/null @@ -1,4 +0,0 @@ -add-tag -remove-tag -add-tag-later -remote-tag diff --git a/levels/it/workflows/sequence b/levels/it/workflows/sequence deleted file mode 100644 index 1be11a8..0000000 --- a/levels/it/workflows/sequence +++ /dev/null @@ -1 +0,0 @@ -pr diff --git a/levels/en/low-level/basics b/levels/low-level/en/basics similarity index 100% rename from levels/en/low-level/basics rename to levels/low-level/en/basics diff --git a/levels/en/low-level/blob-create b/levels/low-level/en/blob-create similarity index 100% rename from levels/en/low-level/blob-create rename to levels/low-level/en/blob-create diff --git a/levels/en/low-level/blob-remove b/levels/low-level/en/blob-remove similarity index 100% rename from levels/en/low-level/blob-remove rename to levels/low-level/en/blob-remove diff --git a/levels/en/low-level/commit-create b/levels/low-level/en/commit-create similarity index 100% rename from levels/en/low-level/commit-create rename to levels/low-level/en/commit-create diff --git a/levels/en/low-level/commit-parents b/levels/low-level/en/commit-parents similarity index 100% rename from levels/en/low-level/commit-parents rename to levels/low-level/en/commit-parents diff --git a/levels/en/low-level/commit-rhombus b/levels/low-level/en/commit-rhombus similarity index 100% rename from levels/en/low-level/commit-rhombus rename to levels/low-level/en/commit-rhombus diff --git a/levels/en/low-level/index-add b/levels/low-level/en/index-add similarity index 100% rename from levels/en/low-level/index-add rename to levels/low-level/en/index-add diff --git a/levels/en/low-level/index-remove b/levels/low-level/en/index-remove similarity index 100% rename from levels/en/low-level/index-remove rename to levels/low-level/en/index-remove diff --git a/levels/en/low-level/index-update b/levels/low-level/en/index-update similarity index 100% rename from levels/en/low-level/index-update rename to levels/low-level/en/index-update diff --git a/levels/en/low-level/puzzle-apocalypse b/levels/low-level/en/puzzle-apocalypse similarity index 100% rename from levels/en/low-level/puzzle-apocalypse rename to levels/low-level/en/puzzle-apocalypse diff --git a/levels/en/low-level/puzzle-precious-blob b/levels/low-level/en/puzzle-precious-blob similarity index 100% rename from levels/en/low-level/puzzle-precious-blob rename to levels/low-level/en/puzzle-precious-blob diff --git a/levels/en/low-level/puzzle-trees-all-the-way-down b/levels/low-level/en/puzzle-trees-all-the-way-down similarity index 100% rename from levels/en/low-level/puzzle-trees-all-the-way-down rename to levels/low-level/en/puzzle-trees-all-the-way-down diff --git a/levels/en/low-level/ref-create b/levels/low-level/en/ref-create similarity index 100% rename from levels/en/low-level/ref-create rename to levels/low-level/en/ref-create diff --git a/levels/en/low-level/ref-move b/levels/low-level/en/ref-move similarity index 100% rename from levels/en/low-level/ref-move rename to levels/low-level/en/ref-move diff --git a/levels/en/low-level/ref-remove b/levels/low-level/en/ref-remove similarity index 100% rename from levels/en/low-level/ref-remove rename to levels/low-level/en/ref-remove diff --git a/levels/en/low-level/symref-create b/levels/low-level/en/symref-create similarity index 100% rename from levels/en/low-level/symref-create rename to levels/low-level/en/symref-create diff --git a/levels/en/low-level/symref-no-deref b/levels/low-level/en/symref-no-deref similarity index 100% rename from levels/en/low-level/symref-no-deref rename to levels/low-level/en/symref-no-deref diff --git a/levels/en/low-level/tree-create b/levels/low-level/en/tree-create similarity index 100% rename from levels/en/low-level/tree-create rename to levels/low-level/en/tree-create diff --git a/levels/en/low-level/tree-nested b/levels/low-level/en/tree-nested similarity index 100% rename from levels/en/low-level/tree-nested rename to levels/low-level/en/tree-nested diff --git a/levels/en/low-level/tree-read b/levels/low-level/en/tree-read similarity index 100% rename from levels/en/low-level/tree-read rename to levels/low-level/en/tree-read diff --git a/levels/en/low-level/welcome b/levels/low-level/en/welcome similarity index 100% rename from levels/en/low-level/welcome rename to levels/low-level/en/welcome diff --git a/levels/it/low-level/basics b/levels/low-level/it/basics similarity index 100% rename from levels/it/low-level/basics rename to levels/low-level/it/basics diff --git a/levels/it/low-level/blob-create b/levels/low-level/it/blob-create similarity index 100% rename from levels/it/low-level/blob-create rename to levels/low-level/it/blob-create diff --git a/levels/it/low-level/blob-remove b/levels/low-level/it/blob-remove similarity index 100% rename from levels/it/low-level/blob-remove rename to levels/low-level/it/blob-remove diff --git a/levels/it/low-level/commit-create b/levels/low-level/it/commit-create similarity index 100% rename from levels/it/low-level/commit-create rename to levels/low-level/it/commit-create diff --git a/levels/it/low-level/commit-parents b/levels/low-level/it/commit-parents similarity index 100% rename from levels/it/low-level/commit-parents rename to levels/low-level/it/commit-parents diff --git a/levels/it/low-level/commit-rhombus b/levels/low-level/it/commit-rhombus similarity index 100% rename from levels/it/low-level/commit-rhombus rename to levels/low-level/it/commit-rhombus diff --git a/levels/it/low-level/index-add b/levels/low-level/it/index-add similarity index 100% rename from levels/it/low-level/index-add rename to levels/low-level/it/index-add diff --git a/levels/it/low-level/index-remove b/levels/low-level/it/index-remove similarity index 100% rename from levels/it/low-level/index-remove rename to levels/low-level/it/index-remove diff --git a/levels/it/low-level/index-update b/levels/low-level/it/index-update similarity index 100% rename from levels/it/low-level/index-update rename to levels/low-level/it/index-update diff --git a/levels/it/low-level/puzzle-apocalypse b/levels/low-level/it/puzzle-apocalypse similarity index 100% rename from levels/it/low-level/puzzle-apocalypse rename to levels/low-level/it/puzzle-apocalypse diff --git a/levels/it/low-level/puzzle-precious-blob b/levels/low-level/it/puzzle-precious-blob similarity index 100% rename from levels/it/low-level/puzzle-precious-blob rename to levels/low-level/it/puzzle-precious-blob diff --git a/levels/it/low-level/puzzle-trees-all-the-way-down b/levels/low-level/it/puzzle-trees-all-the-way-down similarity index 100% rename from levels/it/low-level/puzzle-trees-all-the-way-down rename to levels/low-level/it/puzzle-trees-all-the-way-down diff --git a/levels/it/low-level/ref-create b/levels/low-level/it/ref-create similarity index 100% rename from levels/it/low-level/ref-create rename to levels/low-level/it/ref-create diff --git a/levels/it/low-level/ref-move b/levels/low-level/it/ref-move similarity index 100% rename from levels/it/low-level/ref-move rename to levels/low-level/it/ref-move diff --git a/levels/it/low-level/ref-remove b/levels/low-level/it/ref-remove similarity index 100% rename from levels/it/low-level/ref-remove rename to levels/low-level/it/ref-remove diff --git a/levels/it/low-level/symref-create b/levels/low-level/it/symref-create similarity index 100% rename from levels/it/low-level/symref-create rename to levels/low-level/it/symref-create diff --git a/levels/it/low-level/symref-no-deref b/levels/low-level/it/symref-no-deref similarity index 100% rename from levels/it/low-level/symref-no-deref rename to levels/low-level/it/symref-no-deref diff --git a/levels/it/low-level/tree-create b/levels/low-level/it/tree-create similarity index 100% rename from levels/it/low-level/tree-create rename to levels/low-level/it/tree-create diff --git a/levels/it/low-level/tree-nested b/levels/low-level/it/tree-nested similarity index 100% rename from levels/it/low-level/tree-nested rename to levels/low-level/it/tree-nested diff --git a/levels/it/low-level/tree-read b/levels/low-level/it/tree-read similarity index 100% rename from levels/it/low-level/tree-read rename to levels/low-level/it/tree-read diff --git a/levels/it/low-level/welcome b/levels/low-level/it/welcome similarity index 100% rename from levels/it/low-level/welcome rename to levels/low-level/it/welcome diff --git a/levels/en/low-level/sequence b/levels/low-level/sequence similarity index 100% rename from levels/en/low-level/sequence rename to levels/low-level/sequence diff --git a/levels/en/merge/conflict b/levels/merge/en/conflict similarity index 100% rename from levels/en/merge/conflict rename to levels/merge/en/conflict diff --git a/levels/en/merge/merge b/levels/merge/en/merge similarity index 100% rename from levels/en/merge/merge rename to levels/merge/en/merge diff --git a/levels/en/merge/merge-abort b/levels/merge/en/merge-abort similarity index 100% rename from levels/en/merge/merge-abort rename to levels/merge/en/merge-abort diff --git a/levels/it/merge/conflict b/levels/merge/it/conflict similarity index 100% rename from levels/it/merge/conflict rename to levels/merge/it/conflict diff --git a/levels/it/merge/merge b/levels/merge/it/merge similarity index 100% rename from levels/it/merge/merge rename to levels/merge/it/merge diff --git a/levels/it/merge/merge-abort b/levels/merge/it/merge-abort similarity index 100% rename from levels/it/merge/merge-abort rename to levels/merge/it/merge-abort diff --git a/levels/en/merge/sequence b/levels/merge/sequence similarity index 100% rename from levels/en/merge/sequence rename to levels/merge/sequence diff --git a/levels/en/remotes/friend b/levels/remotes/en/friend similarity index 100% rename from levels/en/remotes/friend rename to levels/remotes/en/friend diff --git a/levels/en/remotes/problems b/levels/remotes/en/problems similarity index 100% rename from levels/en/remotes/problems rename to levels/remotes/en/problems diff --git a/levels/it/remotes/friend b/levels/remotes/it/friend similarity index 100% rename from levels/it/remotes/friend rename to levels/remotes/it/friend diff --git a/levels/it/remotes/problems b/levels/remotes/it/problems similarity index 100% rename from levels/it/remotes/problems rename to levels/remotes/it/problems diff --git a/levels/en/remotes/sequence b/levels/remotes/sequence similarity index 100% rename from levels/en/remotes/sequence rename to levels/remotes/sequence diff --git a/levels/en/sandbox/empty b/levels/sandbox/en/empty similarity index 100% rename from levels/en/sandbox/empty rename to levels/sandbox/en/empty diff --git a/levels/en/sandbox/remote b/levels/sandbox/en/remote similarity index 100% rename from levels/en/sandbox/remote rename to levels/sandbox/en/remote diff --git a/levels/en/sandbox/three-commits b/levels/sandbox/en/three-commits similarity index 100% rename from levels/en/sandbox/three-commits rename to levels/sandbox/en/three-commits diff --git a/levels/it/sandbox/empty b/levels/sandbox/it/empty similarity index 100% rename from levels/it/sandbox/empty rename to levels/sandbox/it/empty diff --git a/levels/it/sandbox/remote b/levels/sandbox/it/remote similarity index 100% rename from levels/it/sandbox/remote rename to levels/sandbox/it/remote diff --git a/levels/it/sandbox/three-commits b/levels/sandbox/it/three-commits similarity index 100% rename from levels/it/sandbox/three-commits rename to levels/sandbox/it/three-commits diff --git a/levels/en/sandbox/sequence b/levels/sandbox/sequence similarity index 100% rename from levels/en/sandbox/sequence rename to levels/sandbox/sequence diff --git a/levels/en/sequence b/levels/sequence similarity index 100% rename from levels/en/sequence rename to levels/sequence diff --git a/levels/en/shit-happens/bad-commit b/levels/shit-happens/en/bad-commit similarity index 100% rename from levels/en/shit-happens/bad-commit rename to levels/shit-happens/en/bad-commit diff --git a/levels/en/shit-happens/pushed-something-broken b/levels/shit-happens/en/pushed-something-broken similarity index 100% rename from levels/en/shit-happens/pushed-something-broken rename to levels/shit-happens/en/pushed-something-broken diff --git a/levels/en/shit-happens/reflog b/levels/shit-happens/en/reflog similarity index 100% rename from levels/en/shit-happens/reflog rename to levels/shit-happens/en/reflog diff --git a/levels/en/shit-happens/restore-a-file b/levels/shit-happens/en/restore-a-file similarity index 100% rename from levels/en/shit-happens/restore-a-file rename to levels/shit-happens/en/restore-a-file diff --git a/levels/en/shit-happens/restore-a-file-from-the-past b/levels/shit-happens/en/restore-a-file-from-the-past similarity index 100% rename from levels/en/shit-happens/restore-a-file-from-the-past rename to levels/shit-happens/en/restore-a-file-from-the-past diff --git a/levels/it/shit-happens/bad-commit b/levels/shit-happens/it/bad-commit similarity index 100% rename from levels/it/shit-happens/bad-commit rename to levels/shit-happens/it/bad-commit diff --git a/levels/it/shit-happens/pushed-something-broken b/levels/shit-happens/it/pushed-something-broken similarity index 100% rename from levels/it/shit-happens/pushed-something-broken rename to levels/shit-happens/it/pushed-something-broken diff --git a/levels/it/shit-happens/reflog b/levels/shit-happens/it/reflog similarity index 100% rename from levels/it/shit-happens/reflog rename to levels/shit-happens/it/reflog diff --git a/levels/it/shit-happens/restore-a-file b/levels/shit-happens/it/restore-a-file similarity index 100% rename from levels/it/shit-happens/restore-a-file rename to levels/shit-happens/it/restore-a-file diff --git a/levels/it/shit-happens/restore-a-file-from-the-past b/levels/shit-happens/it/restore-a-file-from-the-past similarity index 100% rename from levels/it/shit-happens/restore-a-file-from-the-past rename to levels/shit-happens/it/restore-a-file-from-the-past diff --git a/levels/en/shit-happens/sequence b/levels/shit-happens/sequence similarity index 100% rename from levels/en/shit-happens/sequence rename to levels/shit-happens/sequence diff --git a/levels/en/stash/stash b/levels/stash/en/stash similarity index 100% rename from levels/en/stash/stash rename to levels/stash/en/stash diff --git a/levels/en/stash/stash-branch b/levels/stash/en/stash-branch similarity index 100% rename from levels/en/stash/stash-branch rename to levels/stash/en/stash-branch diff --git a/levels/en/stash/stash-clear b/levels/stash/en/stash-clear similarity index 100% rename from levels/en/stash/stash-clear rename to levels/stash/en/stash-clear diff --git a/levels/en/stash/stash-merge b/levels/stash/en/stash-merge similarity index 100% rename from levels/en/stash/stash-merge rename to levels/stash/en/stash-merge diff --git a/levels/en/stash/stash-pop b/levels/stash/en/stash-pop similarity index 100% rename from levels/en/stash/stash-pop rename to levels/stash/en/stash-pop diff --git a/levels/it/stash/stash b/levels/stash/it/stash similarity index 100% rename from levels/it/stash/stash rename to levels/stash/it/stash diff --git a/levels/it/stash/stash-branch b/levels/stash/it/stash-branch similarity index 100% rename from levels/it/stash/stash-branch rename to levels/stash/it/stash-branch diff --git a/levels/it/stash/stash-clear b/levels/stash/it/stash-clear similarity index 100% rename from levels/it/stash/stash-clear rename to levels/stash/it/stash-clear diff --git a/levels/it/stash/stash-merge b/levels/stash/it/stash-merge similarity index 100% rename from levels/it/stash/stash-merge rename to levels/stash/it/stash-merge diff --git a/levels/it/stash/stash-pop b/levels/stash/it/stash-pop similarity index 100% rename from levels/it/stash/stash-pop rename to levels/stash/it/stash-pop diff --git a/levels/en/stash/sequence b/levels/stash/sequence similarity index 100% rename from levels/en/stash/sequence rename to levels/stash/sequence diff --git a/levels/en/tags/add-tag b/levels/tags/en/add-tag similarity index 100% rename from levels/en/tags/add-tag rename to levels/tags/en/add-tag diff --git a/levels/en/tags/add-tag-later b/levels/tags/en/add-tag-later similarity index 100% rename from levels/en/tags/add-tag-later rename to levels/tags/en/add-tag-later diff --git a/levels/en/tags/remote-tag b/levels/tags/en/remote-tag similarity index 100% rename from levels/en/tags/remote-tag rename to levels/tags/en/remote-tag diff --git a/levels/en/tags/remove-tag b/levels/tags/en/remove-tag similarity index 100% rename from levels/en/tags/remove-tag rename to levels/tags/en/remove-tag diff --git a/levels/it/tags/add-tag b/levels/tags/it/add-tag similarity index 100% rename from levels/it/tags/add-tag rename to levels/tags/it/add-tag diff --git a/levels/it/tags/add-tag-later b/levels/tags/it/add-tag-later similarity index 100% rename from levels/it/tags/add-tag-later rename to levels/tags/it/add-tag-later diff --git a/levels/it/tags/remote-tag b/levels/tags/it/remote-tag similarity index 100% rename from levels/it/tags/remote-tag rename to levels/tags/it/remote-tag diff --git a/levels/it/tags/remove-tag b/levels/tags/it/remove-tag similarity index 100% rename from levels/it/tags/remove-tag rename to levels/tags/it/remove-tag diff --git a/levels/en/tags/sequence b/levels/tags/sequence similarity index 100% rename from levels/en/tags/sequence rename to levels/tags/sequence diff --git a/levels/en/unused/checkout b/levels/unused/en/checkout similarity index 100% rename from levels/en/unused/checkout rename to levels/unused/en/checkout diff --git a/levels/en/unused/clone b/levels/unused/en/clone similarity index 100% rename from levels/en/unused/clone rename to levels/unused/en/clone diff --git a/levels/en/unused/commit b/levels/unused/en/commit similarity index 100% rename from levels/en/unused/commit rename to levels/unused/en/commit diff --git a/levels/en/unused/commit-a b/levels/unused/en/commit-a similarity index 100% rename from levels/en/unused/commit-a rename to levels/unused/en/commit-a diff --git a/levels/en/unused/fetch b/levels/unused/en/fetch similarity index 100% rename from levels/en/unused/fetch rename to levels/unused/en/fetch diff --git a/levels/en/unused/files-move b/levels/unused/en/files-move similarity index 100% rename from levels/en/unused/files-move rename to levels/unused/en/files-move diff --git a/levels/en/unused/index-mv b/levels/unused/en/index-mv similarity index 100% rename from levels/en/unused/index-mv rename to levels/unused/en/index-mv diff --git a/levels/en/unused/init b/levels/unused/en/init similarity index 100% rename from levels/en/unused/init rename to levels/unused/en/init diff --git a/levels/en/unused/pull-push b/levels/unused/en/pull-push similarity index 100% rename from levels/en/unused/pull-push rename to levels/unused/en/pull-push diff --git a/levels/en/unused/remotes-add b/levels/unused/en/remotes-add similarity index 100% rename from levels/en/unused/remotes-add rename to levels/unused/en/remotes-add diff --git a/levels/en/unused/remotes-delete b/levels/unused/en/remotes-delete similarity index 100% rename from levels/en/unused/remotes-delete rename to levels/unused/en/remotes-delete diff --git a/levels/en/unused/restore b/levels/unused/en/restore similarity index 100% rename from levels/en/unused/restore rename to levels/unused/en/restore diff --git a/levels/en/unused/split b/levels/unused/en/split similarity index 100% rename from levels/en/unused/split rename to levels/unused/en/split diff --git a/levels/en/unused/steps b/levels/unused/en/steps similarity index 100% rename from levels/en/unused/steps rename to levels/unused/en/steps diff --git a/levels/en/unused/who-are-you b/levels/unused/en/who-are-you similarity index 100% rename from levels/en/unused/who-are-you rename to levels/unused/en/who-are-you diff --git a/levels/it/unused/checkout b/levels/unused/it/checkout similarity index 100% rename from levels/it/unused/checkout rename to levels/unused/it/checkout diff --git a/levels/it/unused/clone b/levels/unused/it/clone similarity index 100% rename from levels/it/unused/clone rename to levels/unused/it/clone diff --git a/levels/it/unused/commit b/levels/unused/it/commit similarity index 100% rename from levels/it/unused/commit rename to levels/unused/it/commit diff --git a/levels/it/unused/commit-a b/levels/unused/it/commit-a similarity index 100% rename from levels/it/unused/commit-a rename to levels/unused/it/commit-a diff --git a/levels/it/unused/fetch b/levels/unused/it/fetch similarity index 100% rename from levels/it/unused/fetch rename to levels/unused/it/fetch diff --git a/levels/it/unused/files-move b/levels/unused/it/files-move similarity index 100% rename from levels/it/unused/files-move rename to levels/unused/it/files-move diff --git a/levels/it/unused/index-mv b/levels/unused/it/index-mv similarity index 100% rename from levels/it/unused/index-mv rename to levels/unused/it/index-mv diff --git a/levels/it/unused/init b/levels/unused/it/init similarity index 100% rename from levels/it/unused/init rename to levels/unused/it/init diff --git a/levels/it/unused/pull-push b/levels/unused/it/pull-push similarity index 100% rename from levels/it/unused/pull-push rename to levels/unused/it/pull-push diff --git a/levels/it/unused/remotes-add b/levels/unused/it/remotes-add similarity index 100% rename from levels/it/unused/remotes-add rename to levels/unused/it/remotes-add diff --git a/levels/it/unused/remotes-delete b/levels/unused/it/remotes-delete similarity index 100% rename from levels/it/unused/remotes-delete rename to levels/unused/it/remotes-delete diff --git a/levels/it/unused/restore b/levels/unused/it/restore similarity index 100% rename from levels/it/unused/restore rename to levels/unused/it/restore diff --git a/levels/it/unused/split b/levels/unused/it/split similarity index 100% rename from levels/it/unused/split rename to levels/unused/it/split diff --git a/levels/it/unused/steps b/levels/unused/it/steps similarity index 100% rename from levels/it/unused/steps rename to levels/unused/it/steps diff --git a/levels/it/unused/who-are-you b/levels/unused/it/who-are-you similarity index 100% rename from levels/it/unused/who-are-you rename to levels/unused/it/who-are-you diff --git a/levels/en/workflows/gitignore b/levels/workflows/en/gitignore similarity index 100% rename from levels/en/workflows/gitignore rename to levels/workflows/en/gitignore diff --git a/levels/en/workflows/pr b/levels/workflows/en/pr similarity index 100% rename from levels/en/workflows/pr rename to levels/workflows/en/pr diff --git a/levels/it/workflows/gitignore b/levels/workflows/it/gitignore similarity index 100% rename from levels/it/workflows/gitignore rename to levels/workflows/it/gitignore diff --git a/levels/it/workflows/pr b/levels/workflows/it/pr similarity index 100% rename from levels/it/workflows/pr rename to levels/workflows/it/pr diff --git a/levels/en/workflows/sequence b/levels/workflows/sequence similarity index 100% rename from levels/en/workflows/sequence rename to levels/workflows/sequence diff --git a/scenes/Language.gd b/scenes/Language.gd index 7c0ec82..2f94fbf 100644 --- a/scenes/Language.gd +++ b/scenes/Language.gd @@ -29,7 +29,7 @@ func _on_item_pressed(id): var value = tr(game.languages[key]) if value == lang: game.os_lang = key - game.levels_dir = "res://levels/" + key +# game.levels_dir = "res://levels/" + key check_current_items() TranslationServer.set_locale(game.os_lang) diff --git a/scenes/chapter.gd b/scenes/chapter.gd index 856f59b..f6f09d1 100644 --- a/scenes/chapter.gd +++ b/scenes/chapter.gd @@ -8,12 +8,14 @@ var levels func load(path): levels = [] - var parts = path.split("/") - slug = parts[parts.size()-1] +# var parts = path.split("/") +# slug = parts[parts.size()-1] + slug = path var level_names = [] var dir = Directory.new() - dir.open(game.levels_dir + "/%s" % slug) +# dir.open(game.levels_dir + "/%s" % slug) + dir.open(game.levels_dir + "/" + path + "/" + game.os_lang + "/") dir.list_dir_begin() while true: @@ -28,7 +30,8 @@ func load(path): var final_level_sequence = [] - var level_sequence = Array(helpers.read_file(game.levels_dir + "/%s/sequence" % slug, "").split("\n")) +# var level_sequence = Array(helpers.read_file(game.levels_dir + "/%s/sequence" % slug, "").split("\n")) + var level_sequence = Array(helpers.read_file(game.levels_dir + "/" + path + "/sequence").split("\n")) for level in level_sequence: if level == "": @@ -42,7 +45,8 @@ func load(path): for l in final_level_sequence: var level = Level.new() - level.load(game.levels_dir + "/%s/%s" % [slug, l]) +# level.load(game.levels_dir + "/%s/%s" % [slug, l]) + level.load(game.levels_dir + "/" + path + "/" + game.os_lang + "/" + l) levels.push_back(level) func _to_string(): diff --git a/scenes/game.gd b/scenes/game.gd index cf84db2..7249cb2 100644 --- a/scenes/game.gd +++ b/scenes/game.gd @@ -2,7 +2,7 @@ extends Node var languages = {"en": tr("English"), "it": tr("Italian")} # Localizations allowed var os_lang = OS.get_locale_language() # Variable for game localization (it, en, ecc...) -var levels_dir = "res://levels/" + os_lang +var levels_dir = "res://levels" var tmp_prefix = OS.get_user_data_dir() + "/tmp/" var global_shell diff --git a/scenes/levels.gd b/scenes/levels.gd index 6fff54f..8485ecf 100644 --- a/scenes/levels.gd +++ b/scenes/levels.gd @@ -13,7 +13,7 @@ func reload(): dir.list_dir_begin() var chapter_names = [] - + while true: var file = dir.get_next() if file == "": @@ -40,5 +40,6 @@ func reload(): for c in final_chapter_sequence: var chapter = Chapter.new() - chapter.load(game.levels_dir + "/%s" % c) +# chapter.load(game.levels_dir + "/" + c + "/" + game.os_lang) + chapter.load(c) chapters.push_back(chapter)