From 0d9047abf47694314120dada7e8598c741734c35 Mon Sep 17 00:00:00 2001 From: phobos Date: Thu, 27 Nov 2025 12:06:49 +0300 Subject: [PATCH] Implement Gettext localization Add: - Native Gettext (.po) support with ru and br translations - translate_string parser for _() syntax in level files - Language selection menu to the Title scene - global_menu scene for navigation (single menu for level_select and main scenes) Fix: - Win condition logic to correctly grep localized file contents - UI layout issues where localizaed text overflowed containers (SaveButton) - Font change to properly render cyrillic characters - node.gd logic to prevent unwanted translation of raw Git data (commit messages, refs) - Limit the size of TextEdit in FileBrowser to prevent text from going under buttons --- 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 + fonts/Moderustic-VariableFont_wght.ttf | Bin 0 -> 265568 bytes fonts/big.tres | 7 +- fonts/default.tres | 2 +- 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/string.svg.import | 1 + images/untracked.svg.import | 1 + levels/bisect/bisect | 20 +- levels/branches/branch-create | 22 +- levels/branches/branch-remove | 24 +- levels/branches/checkout-commit | 28 +- levels/branches/fork | 36 +- levels/branches/grow | 20 +- levels/branches/reorder | 42 +- levels/changing-the-past/rebase | 42 +- levels/changing-the-past/reorder | 30 +- levels/files/files-add | 16 +- levels/files/files-delete | 24 +- levels/index/add | 12 +- levels/index/change | 16 +- levels/index/checkout | 8 +- levels/index/compare | 32 +- levels/index/new | 14 +- levels/index/reset | 34 +- levels/index/rm | 8 +- levels/index/steps | 20 +- levels/intro/cli | 14 +- levels/intro/commit | 24 +- levels/intro/copies | 22 +- levels/intro/init | 10 +- levels/intro/remote | 24 +- levels/intro/risky | 16 +- levels/intro/who-are-you | 16 +- levels/low-level/basics | 19 +- levels/low-level/blob-create | 8 +- levels/low-level/blob-remove | 14 +- levels/low-level/commit-create | 4 +- levels/low-level/commit-parents | 4 +- levels/low-level/commit-rhombus | 6 +- levels/low-level/index-add | 14 +- levels/low-level/index-remove | 16 +- levels/low-level/index-update | 20 +- levels/low-level/puzzle-apocalypse | 8 +- levels/low-level/puzzle-precious-blob | 4 +- .../low-level/puzzle-trees-all-the-way-down | 8 +- levels/low-level/ref-create | 12 +- levels/low-level/ref-move | 12 +- levels/low-level/ref-remove | 12 +- levels/low-level/symref-create | 4 +- levels/low-level/symref-no-deref | 20 +- levels/low-level/tree-create | 20 +- levels/low-level/tree-nested | 12 +- levels/low-level/tree-read | 24 +- levels/low-level/welcome | 8 +- levels/merge/conflict | 22 +- levels/merge/merge | 40 +- levels/merge/merge-abort | 20 +- levels/remotes/friend | 26 +- levels/remotes/problems | 14 +- levels/sandbox/empty | 4 +- levels/sandbox/remote | 10 +- levels/sandbox/three-commits | 18 +- levels/shit-happens/bad-commit | 19 +- levels/shit-happens/pushed-something-broken | 28 +- levels/shit-happens/reflog | 10 +- levels/shit-happens/restore-a-file | 14 +- .../shit-happens/restore-a-file-from-the-past | 14 +- levels/stash/stash | 19 +- levels/stash/stash-branch | 19 +- levels/stash/stash-clear | 28 +- levels/stash/stash-merge | 25 +- levels/stash/stash-pop | 17 +- levels/tags/add-tag | 27 +- levels/tags/add-tag-later | 18 +- levels/tags/remote-tag | 25 +- levels/tags/remove-tag | 18 +- levels/unused/checkout | 12 +- levels/unused/clone | 4 +- levels/unused/commit | 10 +- levels/unused/commit-a | 8 +- levels/unused/fetch | 16 +- levels/unused/files-move | 18 +- levels/unused/index-mv | 10 +- levels/unused/init | 4 +- levels/unused/pull-push | 18 +- levels/unused/remotes-add | 12 +- levels/unused/remotes-delete | 10 +- levels/unused/restore | 14 +- levels/unused/split | 16 +- levels/unused/steps | 14 +- levels/unused/who-are-you | 10 +- levels/workflows/gitignore | 8 +- levels/workflows/pr | 6 +- locale/br.po | 2347 +++++++++++++ locale/en.po | 53 + locale/messages.pot | 2369 +++++++++++++ locale/ru.mo | Bin 0 -> 134665 bytes locale/ru.po | 3086 +++++++++++++++++ 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/pop.wav.import | 4 +- nodes/ref.svg.import | 1 + nodes/tree.svg.import | 1 + project.godot | 12 +- resources/cards.json | 6 +- scenes/arrow.tscn | 4 +- scenes/card.gd | 4 +- scenes/card.tscn | 17 +- scenes/cards.gd | 2 +- scenes/cards.tscn | 4 +- scenes/cli_badge.tscn | 3 - scenes/drop_area.tscn | 7 +- scenes/file_browser.gd | 2 +- scenes/file_browser.tscn | 18 +- scenes/file_browser_item.tscn | 4 +- scenes/game.gd | 33 +- scenes/global_menu.gd | 39 + scenes/global_menu.tscn | 102 + scenes/input_dialog.tscn | 12 +- scenes/level.gd | 107 +- scenes/level_select.gd | 4 +- scenes/level_select.tscn | 45 +- scenes/levels.gd | 1 + scenes/main.gd | 4 +- scenes/main.tscn | 124 +- scenes/music_button.gd | 1 - scenes/music_button.tscn | 8 +- scenes/node.gd | 5 +- scenes/node.tscn | 7 +- scenes/notification.gd | 24 +- scenes/notification.tscn | 53 +- scenes/optionbutton.gd | 28 + scenes/repository.gd | 4 +- scenes/repository.tscn | 4 +- scenes/sandbox.tscn | 4 +- scenes/shell.gd | 2 +- scenes/terminal.gd | 2 +- scenes/terminal.tscn | 12 +- scenes/text_editor.tscn | 9 +- scenes/title.gd | 7 + scenes/title.tscn | 25 +- sounds/buzzer.wav.import | 4 +- sounds/poof.wav.import | 4 +- sounds/success.wav.import | 4 +- sounds/swish.wav.import | 4 +- sounds/swoosh.wav.import | 4 +- sounds/typewriter_ding.wav.import | 4 +- styles/option_button.tres | 11 + styles/theme.tres | 18 +- 197 files changed, 9144 insertions(+), 1030 deletions(-) create mode 100644 fonts/Moderustic-VariableFont_wght.ttf create mode 100644 locale/br.po create mode 100644 locale/en.po create mode 100644 locale/messages.pot create mode 100644 locale/ru.mo create mode 100644 locale/ru.po create mode 100644 scenes/global_menu.gd create mode 100644 scenes/global_menu.tscn create mode 100644 scenes/optionbutton.gd create mode 100644 styles/option_button.tres diff --git a/cards/add.svg.import b/cards/add.svg.import index cca96963..4ec91074 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 c2afba5d..a23974fb 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 50f3eefa..eccfb466 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 cd672e14..f58b103b 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 6277fe4c..385e0b99 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 ff2d5b89..f0a165e1 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 a960142c..10b175cc 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 2892f47f..7e6160ea 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 895efd60..ba8c88a9 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 35491837..1c88964e 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 1f894b7f..6fa25e0b 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 d514e295..be711b0a 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 51e7cfd0..4f561ca7 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 613bc093..1e1535b3 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 3c65896a..80da7341 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 ebd39cbc..f5c94052 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 9c9d9da1..942334e4 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 968c8004..334d7a15 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 79f12610..ca2d82c6 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 aacb273f..dedbfe6d 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 cbdf0a87..4a919d2d 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 b96f40d6..a83da3df 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 15ab40da..e792f8f9 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 aa6a9ff0..e191ead5 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 4276f0a1..41f5eda8 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 a65c3156..ebe06246 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 97241e1b..460096ae 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 17b81f71..00dcf26b 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 883becfa..03dc0bd4 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 199bee3d..103b70b6 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 3409230d..0e43dc4f 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 6f0bbfc0..6491f9cb 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 2830052e..ab96873d 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 39cebac3..40f15049 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/fonts/Moderustic-VariableFont_wght.ttf b/fonts/Moderustic-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3e88190f4d82c01f32b994a8121d5e1646b1aac0 GIT binary patch literal 265568 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

qr+Z!fDoY|fI;YGISf|8Cw2m&lL}+R;w~rY@ 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%0AK;m!LglOiLJ+7o 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 literal 0 HcmV?d00001 diff --git a/fonts/big.tres b/fonts/big.tres index 10db4a6d..d07b14e5 100644 --- a/fonts/big.tres +++ b/fonts/big.tres @@ -1,9 +1,10 @@ [gd_resource type="DynamicFont" load_steps=2 format=2] -[ext_resource path="res://fonts/cabin-bold.ttf" type="DynamicFontData" id=1] +[sub_resource type="DynamicFontData" id=1] +font_path = "res://fonts/Moderustic-VariableFont_wght.ttf" [resource] -size = 45 +size = 38 use_mipmaps = true use_filter = true -font_data = ExtResource( 1 ) +font_data = SubResource( 1 ) diff --git a/fonts/default.tres b/fonts/default.tres index 1438e9a5..c4d53877 100644 --- a/fonts/default.tres +++ b/fonts/default.tres @@ -1,6 +1,6 @@ [gd_resource type="DynamicFont" load_steps=2 format=2] -[ext_resource path="res://fonts/cabin-regular.ttf" type="DynamicFontData" id=1] +[ext_resource path="res://fonts/Moderustic-VariableFont_wght.ttf" type="DynamicFontData" id=1] [resource] size = 23 diff --git a/images/cli-badge.svg.import b/images/cli-badge.svg.import index 53031f82..930d9988 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 54316cf6..fbf6f821 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 5053a2bd..63c961d9 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 12aa5dd7..49fd863f 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 2a5c3cfc..b92f7aaf 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 a7356bb8..c8ba6f44 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 4b017670..1218f0e5 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 708ee152..a173ad8b 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 480c664e..1b179aea 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 762dcebb..7c90ac0b 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 1e0dd8a2..104b392e 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/string.svg.import b/images/string.svg.import index 97a8d20c..53ec0cd0 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 95cb7008..ab65e26c 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/levels/bisect/bisect b/levels/bisect/bisect index cf7bf6a9..595b2f07 100644 --- a/levels/bisect/bisect +++ b/levels/bisect/bisect @@ -1,29 +1,29 @@ -title = Yellow brick road +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) +_((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. +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? +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 +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 + 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 + echo "_(Is holding a key in its beak.)" > bird rm key fi if test $i -eq 14; then @@ -35,9 +35,9 @@ done [win] -# Find the last good commit +# _(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... +_(Well done! :\) The only problem is that you now have to walk all the way back home, again...) diff --git a/levels/branches/branch-create b/levels/branches/branch-create index 110d9291..e8379b1a 100644 --- a/levels/branches/branch-create +++ b/levels/branches/branch-create @@ -1,27 +1,27 @@ -title = Creating branches +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! +_(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".) +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! +_(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 +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 +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 +echo "_(You go to the concert!)" > you git add . git commit -m "Go to the concert" @@ -31,14 +31,14 @@ git branch -D main [win] -# Create a branch called 'birthday' that points to the birthday timeline. +# _(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. +# _(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! +_(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! +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/branches/branch-remove b/levels/branches/branch-remove index 3b576e0f..a3182894 100644 --- a/levels/branches/branch-remove +++ b/levels/branches/branch-remove @@ -1,37 +1,37 @@ -title = Deleting branches +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! +_(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. +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 +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 +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 +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 +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 +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 +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 +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 @@ -39,9 +39,9 @@ git checkout leap^^ [win] -# Find the bad branches and delete them. Keep only the best one. +# _(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? :) +_(On second thought, maybe you even prefer the ice cream timeline to the main one? :\)) diff --git a/levels/branches/checkout-commit b/levels/branches/checkout-commit index fdcb0caa..507887b8 100644 --- a/levels/branches/checkout-commit +++ b/levels/branches/checkout-commit @@ -1,32 +1,32 @@ -title = Moving through time +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!) +_(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! +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! +_(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! +This will insert the commit's unique identifier!) [setup] -echo "This piggy bank belongs to the big sister. -It contains 10 coins." > piggy_bank +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 +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 +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" @@ -35,9 +35,9 @@ git branch -df main [win] -# Restore sisterly peace. -{ git show HEAD:piggy_bank | grep "10 coins"; } && { test $(git show HEAD:little_sister | wc -l) -eq $(git show HEAD:little_sister | grep -v "10 coins" | wc -l); } && { git rev-parse HEAD^^^; } +# _(Restore sisterly peace.) +{ git show HEAD:piggy_bank | grep "_(10 coins)"; } && { test $(git show HEAD:little_sister | wc -l) -eq $(git show HEAD:little_sister | grep -v "10 coins" | wc -l); } && { git rev-parse HEAD^^^; } [congrats] -Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations... +_(Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations...) diff --git a/levels/branches/fork b/levels/branches/fork index a58dcf5a..0ea512ff 100644 --- a/levels/branches/fork +++ b/levels/branches/fork @@ -1,35 +1,35 @@ -title = Make parallel commits +title = _(Make parallel commits) cards = checkout commit-auto [description] -Did you know that creating parallel timelines is perfectly legal and safe? It's true! +_(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! +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. +_(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: +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: +You can also go back two commits by typing, for example: - git checkout HEAD~2 + git checkout HEAD~2) [setup] mkdir cage -echo "Looks very hungry." > cage/lion +echo "_(Looks very hungry.)" > cage/lion -echo "A small child. -It really loves cats!" > child +echo "_(A small child. +It really loves cats!)" > child git add . git commit -m "The beginning" -echo "It's holding a lollipop." >> child +echo "_(It's holding a lollipop.)" >> child git commit -am "The child buys something" mv child cage @@ -37,11 +37,11 @@ git add . git commit -m "The child climbs somewhere" git rm cage/child -echo "Looks happy. :)" > cage/lion +echo "_(Looks happy. :\))" > cage/lion git add . git commit -m "Oh no" -echo "It's sleeping." > cage/lion +echo "_(It's sleeping.)" > cage/lion git add . git commit -m "Nap time!" @@ -50,16 +50,16 @@ git branch -d main [win] -# Make sure that the child is happy. +# _(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" +# _(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. +_(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... +If you're ready, our next mission is already waiting...) diff --git a/levels/branches/grow b/levels/branches/grow index 77fe3608..c5ddcd67 100644 --- a/levels/branches/grow +++ b/levels/branches/grow @@ -1,32 +1,32 @@ -title = Branches grow with you! +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": +_(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! +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`. +_(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`. +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 +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 +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 +echo "_(You go to the concert!)" > you git add . git commit -m "Go to the concert" git branch concert @@ -37,7 +37,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 +# _(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 @@ -45,5 +45,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. +# _(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/branches/reorder b/levels/branches/reorder index 1c36c089..10c0ad45 100644 --- a/levels/branches/reorder +++ b/levels/branches/reorder @@ -1,9 +1,9 @@ -title = Moving branches around +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! +_(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 @@ -15,59 +15,59 @@ on the branch names, and then using 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! +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. +echo "_(You do not have a baguette. You do not have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "The Beginning" git checkout -b coffee -echo "You have a baguette. +echo "_(You have a baguette. You do not have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "You buy a baguette" -echo "You ate a baguette. +echo "_(You ate a baguette. You do not have coffee. -You do not have a donut." > you +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. +echo "_(You do not have a baguette. You have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "You buy some coffee" -echo "You do not have a baguette. +echo "_(You do not have a baguette. You drank coffee. -You do not have a donut." > you +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. +echo "_(You do not have a baguette. You do not have coffee. -You have a donut." > you +You have a donut.)" > you git add . git commit -m "You buy a donut" @@ -75,14 +75,14 @@ git checkout --detach main [win] -# Did you eat a baguette on the baguette branch? -git show baguette:you | grep "You ate.*baguette" +# _(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 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" +# _(Did you eat a donut on the donut branch?) +git show donut:you | grep "_(You ate.*donut)" [actions] diff --git a/levels/changing-the-past/rebase b/levels/changing-the-past/rebase index 6ed89a8f..0a571751 100644 --- a/levels/changing-the-past/rebase +++ b/levels/changing-the-past/rebase @@ -1,73 +1,73 @@ -title = Rebasing +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. +_(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! +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. +echo "_(You do not have a baguette. You do not have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "The Beginning" git checkout -b baguette main -echo "You have a baguette. +echo "_(You have a baguette. You do not have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "You buy a baguette" -echo "You ate a baguette. +echo "_(You ate a baguette. You do not have coffee. -You do not have a donut." > you +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. +echo "_(You do not have a baguette. You have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "You buy some coffee" -echo "You do not have a baguette. +echo "_(You do not have a baguette. You drank coffee. -You do not have a donut." > you +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. +echo "_(You do not have a baguette. You do not have coffee. -You have a donut." > you +You have a donut.)" > you git add . git commit -m "You buy a donut" -echo "You do not have a baguette. +echo "_(You do not have a baguette. You do not have coffee. -You ate a donut." > you +You ate a donut.)" > you git add . git commit -m "You eat the donut" @@ -76,11 +76,11 @@ 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; } +# _(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. +_(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. +It's really hard to actually destroy stuff with your time machine.) diff --git a/levels/changing-the-past/reorder b/levels/changing-the-past/reorder index 04f66cbe..894a25a8 100644 --- a/levels/changing-the-past/reorder +++ b/levels/changing-the-past/reorder @@ -1,17 +1,17 @@ -title = Reordering events +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? +_(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! +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. +echo "_(You just woke up. You are NOT wearing underwear. @@ -19,12 +19,12 @@ You are NOT wearing pants. You are NOT wearing a shirt. -You are NOT wearing shoes." > you +You are NOT wearing shoes.)" > you git add . git commit -m "The Beginning" -echo "You just woke up. +echo "_(You just woke up. You are NOT wearing underwear. @@ -32,10 +32,10 @@ You are NOT wearing pants. You are NOT wearing a shirt. -You are wearing shoes." > you +You are wearing shoes.)" > you git commit -am "Put on shoes" -echo "You just woke up. +echo "_(You just woke up. You are NOT wearing underwear. @@ -43,10 +43,10 @@ You are wearing pants. You are NOT wearing a shirt. -You are wearing shoes." > you +You are wearing shoes.)" > you git commit -am "Put on pants" -echo "You just woke up. +echo "_(You just woke up. You are wearing underwear. @@ -54,10 +54,10 @@ You are wearing pants. You are NOT wearing a shirt. -You are wearing shoes." > you +You are wearing shoes.)" > you git commit -am "Put on underwear" -echo "You just woke up. +echo "_(You just woke up. You are wearing underwear. @@ -65,14 +65,14 @@ You are wearing pants. You are wearing a shirt. -You are wearing shoes." > you +You are wearing shoes.)" > you git commit -am "Put on shirt" [win] -# Reorder the commits to dress yourself in the correct way +# _(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? +_(Feel free to reset the level and try the other strategy! Which one do you like better?) diff --git a/levels/files/files-add b/levels/files/files-add index 0676df69..e31f08da 100644 --- a/levels/files/files-add +++ b/levels/files/files-add @@ -1,32 +1,32 @@ -title = Interior design +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, +_(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! +Don't forget to add a color and description to your new furnitures, too!) [setup] -echo A yellow cozy bed. > bed +echo "_(A yellow cozy bed.)" > bed [win] -# Add two more pieces of furniture +# _(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. +# _(Make sure the colors match your bed's color.) NUM_FILES="$(ls | wc -l)" -YELLOW_FILES="$(grep -li yellow * | 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? +_(Don't you immediately feel more at home?) diff --git a/levels/files/files-delete b/levels/files/files-delete index 7bf33be3..b930c6cc 100644 --- a/levels/files/files-delete +++ b/levels/files/files-delete @@ -1,36 +1,36 @@ -title = Unexpected Roommates +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. +_(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! +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: +_(On the command line, you can easily delete all files ending in -web using this command: - rm *web + 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 "_(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. +# _(Remove all spider webs.) ! ls | grep thick_web && ! ls | grep big_web && ! ls | grep tiny_web -# But make sure you keep your bed! +# _(But make sure you keep your bed!) ls | grep bed [congrats] -Your room looks now very tidy and cozy! Time to unpack your stuff! +_(Your room looks now very tidy and cozy! Time to unpack your stuff!) diff --git a/levels/index/add b/levels/index/add index b68f357b..7d238dcc 100644 --- a/levels/index/add +++ b/levels/index/add @@ -1,13 +1,13 @@ -title = Updating files in the index +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. +_(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`! +The command for this is the same - git add!) [setup] @@ -19,12 +19,12 @@ git commit -m "Initial commit" [win] -# Make changes to all files! +# _(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! +# _(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" && @@ -35,4 +35,4 @@ test "$(git show main^:c)" != "c" [congrats] -Well done! Try travelling between the commits using `git checkout`, so you can look at their contents again! +_(Well done! Try travelling between the commits using git checkout, so you can look at their contents again!) diff --git a/levels/index/change b/levels/index/change index f1e377d0..a012b2a7 100644 --- a/levels/index/change +++ b/levels/index/change @@ -1,31 +1,31 @@ -title = Update files in the index +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. +_(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! +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`! +_(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 +echo "_(The candle is burning with a blue flame.)" > candle git add . git commit -m "The beginning" [win] -# Make a change to the candle. +# _(Make a change to the candle.) test "$(git diff --name-only)" = "candle" || file -f .git/candle-changed && touch .git/candle-changed -# Add the candle. +# _(Add the candle.) test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added -# Make a commit. +# _(Make a commit.) test "$(git diff --name-only HEAD HEAD^)" = "candle" diff --git a/levels/index/checkout b/levels/index/checkout index 3c01b094..def9b38c 100644 --- a/levels/index/checkout +++ b/levels/index/checkout @@ -1,11 +1,11 @@ -title = Checking out files from the index +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! +_(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! +What happens if you have already update the index, like in file c? You have to reset the index first!) [setup] @@ -21,5 +21,5 @@ git add c [win] -# Remove all changes in your local files! +# _(Remove all changes in your local files!) test "$(git diff --name-only | wc -l)" -eq 0 diff --git a/levels/index/compare b/levels/index/compare index 97fa6c73..1ab7090a 100644 --- a/levels/index/compare +++ b/levels/index/compare @@ -1,32 +1,32 @@ -title = Step by step +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! +_(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. +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! +# _(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 +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 +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" @@ -34,18 +34,18 @@ git checkout HEAD^ git checkout -b step-by-step -echo "The ball is now touching the book." > ball +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 +echo "_(The book has fallen over.)" > book git commit -am "The book falls over" -echo "The candle has been blown out." > candle +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" +# _(Pick the timeline that's clearer, and make the alarm go off!) +git show step-by-step:smoke_detector | tail -n 1 | grep -v "_(A smoke detector. It's absolutely silent.)" diff --git a/levels/index/new b/levels/index/new index 4df39306..1b574601 100644 --- a/levels/index/new +++ b/levels/index/new @@ -1,28 +1,28 @@ -title = Add new files to the index +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? +_(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! +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! +_(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 +echo "_(The candle is burning with a blue flame.)" > candle [win] -# Add the candle. +# _(Add the candle.) test "$(git diff --cached --name-only)" = "candle" || file -f .git/candle-added && touch .git/candle-added -# Make a commit. +# _(Make a commit.) test "$(git ls-tree --name-only HEAD)" = "candle" diff --git a/levels/index/reset b/levels/index/reset index 5e21973d..a3c849c8 100644 --- a/levels/index/reset +++ b/levels/index/reset @@ -1,37 +1,37 @@ -title = Resetting files in the index +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! +_(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`! +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 +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 +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 +# _(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 +# _(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/index/rm b/levels/index/rm index 637fd225..6eb23d8c 100644 --- a/levels/index/rm +++ b/levels/index/rm @@ -1,11 +1,11 @@ -title = Delete a file in the next commit +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 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. +If a file is modified, you'll need to reset these changes first/reset the files.) [setup] @@ -20,5 +20,5 @@ git add b [win] -# Make a commit where all files are deleted ¯\_(^_^)_/¯ +# _(Make a commit where all files are deleted ¯_(^^)/¯) test "$(git ls-tree main | wc -l)" -eq 0 diff --git a/levels/index/steps b/levels/index/steps index 36e75001..87318546 100644 --- a/levels/index/steps +++ b/levels/index/steps @@ -1,28 +1,28 @@ -title = Adding changes step by step +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! +_(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 +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! +# _(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! +# _(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. +# _(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 @@ -32,7 +32,7 @@ done test "$COUNT" -ge 1 -# Make a second commit that only records a single change. +# _(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 @@ -42,7 +42,7 @@ done test "$COUNT" -ge 2 -# And a third one. +# _(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 diff --git a/levels/intro/cli b/levels/intro/cli index 1ee655b4..5eb86db7 100644 --- a/levels/intro/cli +++ b/levels/intro/cli @@ -1,15 +1,15 @@ -title = The command line +title = _(The command line) cards = [description] -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! +_(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!) [cli] -But there's another way to interact with Git: +_(But there's another way to interact with Git: -Try typing `git init` into the black terminal below, and pressing the enter key! +Try typing `git init` into the black terminal below, and pressing the enter key!) [setup] @@ -17,11 +17,11 @@ rm -rf .git [win] -# Initialize the time machine! +# _(Initialize the time machine!) test -d .git [congrats] -Cool! Instead of using the playing cards, you can also do everything via the command line! +_(Cool! Instead of using the playing cards, you can also do everything via the command line! -The command line is pretty powerful! Often, you can use it to solve tasks faster compared to using a graphical interface. +The command line is pretty powerful! Often, you can use it to solve tasks faster compared to using a graphical interface.) diff --git a/levels/intro/commit b/levels/intro/commit index 333ea6e5..55027e4f 100644 --- a/levels/intro/commit +++ b/levels/intro/commit @@ -1,33 +1,33 @@ -title = Your first commit +title = _(Your first commit) cards = commit-auto [description] -You can use your time machine to make snapshots of objects around you! Here, let's practice this! +_(You can use your time machine to make snapshots of objects around you! Here, let's practice this! -(Your teacher pours some water into a glass.) +(Your teacher pours some water into a glass.)) [cli] -Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below! +_(Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below! -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! :) +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! :\)) [setup] -echo "The glass is full of water." > glass +echo "_(The glass is full of water.)" > glass [win] -# Make a snapshot of the glass (a "commit") +# _(Make a snapshot of the glass (a "commit")) git rev-parse HEAD -# Change the contents of the glass! -! test "$(cat glass)" = "The glass is full of water." +# _(Change the contents of the glass!) +! test "$(cat glass)" = "_(The glass is full of water.)" -# And make a second commit! -git rev-parse HEAD^ && ! test "$(git show main:glass)" = "The glass is full of water." +# _(And make a second commit!) +git rev-parse HEAD^ && ! test "$(git show main:glass)" = "_(The glass is full of water.)" [congrats] -Nice! You can try making some additional commits. When you feel comfortable, click on "Next Level". +_(Nice! You can try making some additional commits. When you feel comfortable, click on "Next Level".) diff --git a/levels/intro/copies b/levels/intro/copies index ef05d24f..fa03417c 100644 --- a/levels/intro/copies +++ b/levels/intro/copies @@ -1,42 +1,42 @@ -title = Making backups +title = _(Making backups) cards = [description] -This time, you're making a lot of backup copies - you can look at them by clicking on them! +_(This time, you're making a lot of backup copies - you can look at them by clicking on them!) [congrats] -Okay, this kind of works. +_(Okay, this kind of works. 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. And especially when working with other people, sending copies back and forth doesn't seem ideal. -You can't wait to try these time machines! +You can't wait to try these time machines!) [setup] rm -rf .git -echo "~ Why I want to learn Git ~ +echo "_(~ Why I want to learn Git ~ -(I still need to write this.)" >> form.txt +(I still need to write this.))" >> form.txt -echo "~ Why I want to learn Git ~ +echo "_(~ Why I want to learn Git ~ -- So that I can undo mistakes" >> form2.txt +- So that I can undo mistakes)" >> form2.txt -echo "~ Why I want to learn Git ~ +echo "_(~ Why I want to learn Git ~ - So that I can undo mistakes -- To track my projects over time" >> form2_final.txt +- To track my projects over time)" >> form2_final.txt cp form2_final.txt form2_really_final.txt [win] -# Add another line to form2_really_final.txt! +# _(Add another line to form2_really_final.txt!) test "$(cat form2_really_final.txt | wc -l )" -ge 5 diff --git a/levels/intro/init b/levels/intro/init index ea0426e7..77cb0a57 100644 --- a/levels/intro/init +++ b/levels/intro/init @@ -1,13 +1,13 @@ -title = Enter the time machine +title = _(Enter the time machine) cards = init [description] -You've been accepted to time travel school! Yay! It's your first day! Your teacher explains: +_(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!" -Drag that blue card up to play it! +Drag that blue card up to play it!) [setup] @@ -15,9 +15,9 @@ rm -rf .git [win] -# Initialize the time machine! +# _(Initialize the time machine!) test -d .git [congrats] -Nice! See that little owl squirrel that appeared? It will be your companion, and always show you where you are in time! +_(Nice! See that little owl squirrel that appeared? It will be your companion, and always show you where you are in time!) diff --git a/levels/intro/remote b/levels/intro/remote index c19b49a1..7a1151ed 100644 --- a/levels/intro/remote +++ b/levels/intro/remote @@ -1,23 +1,23 @@ -title = Working together +title = _(Working together) cards = pull commit-auto push [description] -Let's add your name to our list of students! +_(Let's add your name to our list of students! -I already have a second commit of it in my time machine - let's work together! +I already have a second commit of it in my time machine - let's work together!) [cli] -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. +_(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.) [congrats] -Welcome to time travel school! :) I'll see you for your first class tomorrow! +_(Welcome to time travel school! :\) I'll see you for your first class tomorrow!) [setup] -echo "~ List of current students ~" > students +echo "_(~ List of current students ~)" > students git add . git commit -m "Initial version" git push -u teacher main @@ -28,25 +28,25 @@ git update-ref -d refs/remotes/teacher/main git reset --hard main -echo " +echo "_( - Sam -- Alex" >> students +- Alex)" >> students git add . git commit -m "Added two students" [win] -# Get the second commit from your teacher using `git pull`. +# _(Get the second commit from your teacher using git pull.) test "$(git log --oneline teacher/main | wc -l)" -ge 2 -# Add your name to the list of students +# _(Add your name to the list of students) test "$(cat students |wc -l)" -ge 5 -# Commit your result. +# _(Commit your result.) test "$(git show main:students |wc -l)" -ge 5 [win teacher] -# And use `git push` to send it to your teacher! +# _(And use `git push` to send it to your teacher!) test "$(git show main:students |wc -l)" -ge 5 diff --git a/levels/intro/risky b/levels/intro/risky index a5e72392..db51ea88 100644 --- a/levels/intro/risky +++ b/levels/intro/risky @@ -1,30 +1,30 @@ -title = Living dangerously +title = _(Living dangerously) 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! -You're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git. +You're almost done with the paperwork! You just need to fill in one more reason why you want to learn Git.) [congrats] -Suddenly, your cat jumps on the table, snatches away the form, and runs away! Oh no. All your hard work, gone! +_(Suddenly, your cat jumps on the table, snatches away the form, and runs away! Oh no. All your hard work, gone! You clearly need a better solution. -(Click "Next Level" as soon as you're ready!) +(Click "Next Level" as soon as you're ready!)) [setup] rm -rf .git -echo "~ Why I want to learn Git ~ +echo "_(~ Why I want to learn Git ~ - So that I can undo mistakes -- To track my projects over time" >> form.txt +- To track my projects over time)" >> form.txt [actions] @@ -38,5 +38,5 @@ test "$(cat form.txt | wc -l )" -ge 5 && echo "(Has been stolen by your cat.) [win] -# Add another line to form.txt! +# _(Add another line to form.txt!) test "$(cat form.txt | wc -l )" -ge 5 diff --git a/levels/intro/who-are-you b/levels/intro/who-are-you index 9fb907ab..2a9c2b61 100644 --- a/levels/intro/who-are-you +++ b/levels/intro/who-are-you @@ -1,17 +1,17 @@ -title = Welcome to time travel school! +title = _(Welcome to time travel school!) cards = config-name commit-auto checkout [description] -You're still pretty confused by everything that's going on. The next day, you decide to enroll in time travel school! +_(You're still pretty confused by everything that's going on. The next day, you decide to enroll in time travel school! -Your time travel teacher welcomes you: "Hello there! Wanna tell us your name?" +Your time travel teacher welcomes you: "Hello there! Wanna tell us your name?") [setup] git config --global user.name "You" -echo "~ Why do you want to learn how to use time machines? ~ +echo "_(\"~ Why do you want to learn how to use time machines? ~\")" [ ] To make sure that my cat doesn't eat my homework. [ ] So I don't have to keep copies of all my essays. @@ -25,14 +25,14 @@ Signature: $(git config user.name)" >> form [win] -# Introduce yourself. +# _(Introduce yourself.) test "$(git config user.name)" != "You" -# Fill out the enrollment form, and commit it! +# _(Fill out the enrollment form, and commit it!) git show main:form | grep '\[[xX]\]' [congrats] -"We're so glad to have you! +_(We're so glad to have you! -Git can help you fix problems in the past! It allows you to collaborate with other students of time travel! It's really powerful, and it's really popular! I'll see you for your first lesson tomorrow!" +Git can help you fix problems in the past! It allows you to collaborate with other students of time travel! It's really powerful, and it's really popular! I'll see you for your first lesson tomorrow!) diff --git a/levels/low-level/basics b/levels/low-level/basics index 55374b50..1e8eb0db 100644 --- a/levels/low-level/basics +++ b/levels/low-level/basics @@ -1,19 +1,22 @@ [description] -For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful: +_(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 +ls -Find the riddle in your current directory and put the answer into the file "answer"! +echo content > file + +cat file + +mkdir dir + +Find the riddle in your current directory and put the answer into the file "answer"!) [congrats] -Omnomnom! +_(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. :) +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] diff --git a/levels/low-level/blob-create b/levels/low-level/blob-create index 86f62542..b763746d 100644 --- a/levels/low-level/blob-create +++ b/levels/low-level/blob-create @@ -1,6 +1,6 @@ [description] -At its core, Git is very simple. It stores "objects", which are basically files identified by an "identifier" (short: ID). +_(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. @@ -10,15 +10,15 @@ Let's create some blobs! To do that, create a file with the desired content, and The flag -w means "write", and tells Git to actually write the new blob to the disk. -Create three new blobs! +Create three new blobs!) [congrats] -Tip: You can also use a command like this to create a blob in a single line: +_(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? :) +Did you already notice that you can drag and drop all objects? :)) [setup] diff --git a/levels/low-level/blob-remove b/levels/low-level/blob-remove index bbc1b307..f9d62c69 100644 --- a/levels/low-level/blob-remove +++ b/levels/low-level/blob-remove @@ -1,22 +1,22 @@ [description] -There's a simple command to remove all objects that are not referenced by anything: +_(There's a simple command to remove all objects that are not referenced by anything: git prune -Remove all blobs in this repository. +Remove all blobs in this repository.) [congrats] -Generally, `git prune` will be useful if you want to clean up some objects you made. +_(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. +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 +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] diff --git a/levels/low-level/commit-create b/levels/low-level/commit-create index 79a8e521..af4849cb 100644 --- a/levels/low-level/commit-create +++ b/levels/low-level/commit-create @@ -1,6 +1,6 @@ [description] -So a tree describes a directory structure at a specific point in time. +_(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? @@ -8,7 +8,7 @@ Enter: commits. They are objects that point to a tree and contain some additiona git commit-tree -m "Description of your commit" -Make a commit from the tree in this repository! +Make a commit from the tree in this repository!) [setup] diff --git a/levels/low-level/commit-parents b/levels/low-level/commit-parents index a2efb11f..54a2d533 100644 --- a/levels/low-level/commit-parents +++ b/levels/low-level/commit-parents @@ -1,12 +1,12 @@ [description] -When using the commit-tree command, you can optionally specify a parent: +_(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? +Hint: You'll need a tree object. What could be the easiest way to obtain one?) [setup] diff --git a/levels/low-level/commit-rhombus b/levels/low-level/commit-rhombus index e320ca08..5fe09037 100644 --- a/levels/low-level/commit-rhombus +++ b/levels/low-level/commit-rhombus @@ -1,10 +1,10 @@ [description] -A commit can have multiple parents! You can specify the -p option multiple times, like this: +_(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. +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] @@ -21,7 +21,7 @@ NORTH=$(git commit-tree $TREE -m "Nort" -p $EAST -p $WEST) 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. + # _(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 diff --git a/levels/low-level/index-add b/levels/low-level/index-add index 633245cd..9ab932f1 100644 --- a/levels/low-level/index-add +++ b/levels/low-level/index-add @@ -1,6 +1,6 @@ [description] -Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name! +_(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. @@ -9,11 +9,11 @@ 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"? +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: +_(There's another way to add an entry to the index directly: git update-index --add --cacheinfo ,, @@ -21,15 +21,15 @@ The first three numbers of the mode describe the type of the entry, "100" is a r 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! :) +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 +echo "_(file 1)" > file1 +echo "_(file 2)" > file2 +echo "_(file 3)" > file3 git add . [win] diff --git a/levels/low-level/index-remove b/levels/low-level/index-remove index 9816126b..80604968 100644 --- a/levels/low-level/index-remove +++ b/levels/low-level/index-remove @@ -1,23 +1,23 @@ [description] -To remove an entry from the index, use a command like this: +_(To remove an entry from the index, use a command like this: git update-index --force-remove -Remove all entries from the index! +Remove all entries from the index!) [setup] -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 +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 +echo "_(file 1)" > file1 +echo "_(file 2)" > file2 +echo "_(file 3)" > file3 git add . git update-index --force-remove file1 diff --git a/levels/low-level/index-update b/levels/low-level/index-update index 047493d3..3a0579b6 100644 --- a/levels/low-level/index-update +++ b/levels/low-level/index-update @@ -1,6 +1,6 @@ [description] -Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry! +_(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 @@ -8,26 +8,26 @@ Put the content you want in a file with a matching name, and then run This will create a new blob, and update the hash of the entry to that blob. -Update an entry in the index! +Update an entry in the index!) [setup] -echo "file 1" > file1 -echo "file 2" > file2 -echo "file 3" > file3 +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 +echo "_(file 1)" > file1 +echo "_(file 2)" > file2 +echo "_(file 3)" > file3 git add . -echo "new content" > file1 +echo "_(new content)" > file1 git update-index file1 [win] -# This is not really a good test for the winning condition... +# _(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/low-level/puzzle-apocalypse b/levels/low-level/puzzle-apocalypse index 119784d8..7a8e5b5d 100644 --- a/levels/low-level/puzzle-apocalypse +++ b/levels/low-level/puzzle-apocalypse @@ -1,11 +1,11 @@ [description] -Delete all objects in this repository using git commands only! +_(Delete all objects in this repository using git commands only! Useful commands: git prune - git reflog expire + git reflog expire) [setup] @@ -14,7 +14,7 @@ BLOB=$(git hash-object -w foo) echo bar > bar git add . git commit -m "Initial commit" -echo blabber >> bar +echo "_(blabber)" >> bar git commit -a -m "Second commit" git update-ref refs/important HEAD git update-ref refs/interesting "$BLOB" @@ -26,7 +26,7 @@ BLOB=$(git hash-object -w foo) echo bar > bar git add . git commit -m "Initial commit" -echo blabber >> bar +echo "_(blabber)" >> bar git commit -a -m "Second commit" git update-ref refs/important HEAD git update-ref refs/interesting "$BLOB" diff --git a/levels/low-level/puzzle-precious-blob b/levels/low-level/puzzle-precious-blob index 865cfdfb..2280b464 100644 --- a/levels/low-level/puzzle-precious-blob +++ b/levels/low-level/puzzle-precious-blob @@ -1,12 +1,12 @@ [description] -Create two trees pointing to the same blob! +_(Create two trees pointing to the same blob!) [setup] [setup goal] -BLOB=$(echo "I am precious" | git hash-object -w --stdin) +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 diff --git a/levels/low-level/puzzle-trees-all-the-way-down b/levels/low-level/puzzle-trees-all-the-way-down index bc3e58aa..f54cb0cd 100644 --- a/levels/low-level/puzzle-trees-all-the-way-down +++ b/levels/low-level/puzzle-trees-all-the-way-down @@ -1,8 +1,8 @@ [description] -Construct a chain of three trees, which don't point to anything else. +_(Construct a chain of three trees, which don't point to anything else. -This is hard! The `git mktree` command might be useful. +This is hard! The git mktree command might be useful.) [setup] @@ -19,11 +19,11 @@ TREES=$(git cat-file --batch-check='%(objectname) %(objecttype)' --batch-all-obj 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! + # _(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/ + # _(Same for its child! \o/) return 0 fi fi diff --git a/levels/low-level/ref-create b/levels/low-level/ref-create index 1cc4bcfe..19654356 100644 --- a/levels/low-level/ref-create +++ b/levels/low-level/ref-create @@ -1,6 +1,6 @@ [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. +_(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 @@ -8,12 +8,12 @@ You can create or update a ref with 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! +Create refs that point to all objects in this repository!) [setup] -echo hello > hello -echo world > world +echo "_(hello)" > hello +echo "_(world)" > world BLOB1=$(git hash-object -w hello) BLOB2=$(git hash-object -w world) git add . @@ -22,8 +22,8 @@ COMMIT=$(git commit-tree $TREE -m "Initial commit") [setup goal] -echo hello > hello -echo world > world +echo "_(hello)" > hello +echo "_(world)" > world BLOB1=$(git hash-object -w hello) BLOB2=$(git hash-object -w world) git add . diff --git a/levels/low-level/ref-move b/levels/low-level/ref-move index e3b29e34..30d61ce0 100644 --- a/levels/low-level/ref-move +++ b/levels/low-level/ref-move @@ -1,15 +1,15 @@ [description] -You can point refs to a new location using the same command you use to create them: +_(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! +As an exercise, make all refs in this repository point to the tree object!) [setup] -echo hello > hello -echo world > world +echo "_(hello)" > hello +echo "_(world)" > world BLOB1=$(git hash-object -w hello) BLOB2=$(git hash-object -w world) git add . @@ -21,8 +21,8 @@ git update-ref refs/b "$COMMIT" [setup goal] -echo hello > hello -echo world > world +echo "_(hello)" > hello +echo "_(world)" > world BLOB1=$(git hash-object -w hello) BLOB2=$(git hash-object -w world) git add . diff --git a/levels/low-level/ref-remove b/levels/low-level/ref-remove index d1fa9825..dec9085d 100644 --- a/levels/low-level/ref-remove +++ b/levels/low-level/ref-remove @@ -1,15 +1,15 @@ [description] -And finally, to delete a ref, use +_(And finally, to delete a ref, use git update-ref -d refs/ -Delete all refs! :P (Well, except for HEAD. HEAD is special.) +Delete all refs! :P (Well, except for HEAD. HEAD is special.)) [setup] -echo hello > hello -echo world > world +echo "_(hello)" > hello +echo "_(world)" > world BLOB1=$(git hash-object -w hello) BLOB2=$(git hash-object -w world) git add . @@ -21,8 +21,8 @@ git update-ref refs/beautiful_commit "$COMMIT" [setup goal] -echo hello > hello -echo world > world +echo "_(hello)" > hello +echo "_(world)" > world BLOB1=$(git hash-object -w hello) BLOB2=$(git hash-object -w world) git add . diff --git a/levels/low-level/symref-create b/levels/low-level/symref-create index da933cbd..46383aac 100644 --- a/levels/low-level/symref-create +++ b/levels/low-level/symref-create @@ -1,12 +1,12 @@ [description] -Instead of pointing directly to objects, refs can also point to other refs! +_(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"! +Create a symbolic ref called "refs/rainbow"!) [setup] diff --git a/levels/low-level/symref-no-deref b/levels/low-level/symref-no-deref index 458e6694..67991ad2 100644 --- a/levels/low-level/symref-no-deref +++ b/levels/low-level/symref-no-deref @@ -1,16 +1,16 @@ [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! :) +_(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`? +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`! +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? +Weird, huh?) [congrats] -Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs! +_(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! :) @@ -18,11 +18,13 @@ Everything else is just convention and high-level commands that make interacting 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) +tag objects (they are the fourth object type - a bit like refs with a description and an author) -Thanks for playing! You're welcome to check out the "puzzle" levels in the dropdown, some of them are more advanced! +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] diff --git a/levels/low-level/tree-create b/levels/low-level/tree-create index 3da3618c..d0df9caa 100644 --- a/levels/low-level/tree-create +++ b/levels/low-level/tree-create @@ -1,31 +1,31 @@ [description] -After carefully building the index we want, it would be nice to save a permanent snapshot of it, right? +_(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! :) +Try it! :)) [congrats] -Nice! +_(Nice! -Can you make a different tree? Modify the index, then call `git write-tree` again! +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 +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 +echo "_(file 1)" > file1 +echo "_(file 2)" > file2 +echo "_(file 3)" > file3 git add . git write-tree diff --git a/levels/low-level/tree-nested b/levels/low-level/tree-nested index c7afce81..745a150b 100644 --- a/levels/low-level/tree-nested +++ b/levels/low-level/tree-nested @@ -1,20 +1,20 @@ [description] -Trees can also point to other trees! This way, they can describe nested directory structures. +_(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. +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 +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 +echo "_(I'm the left leg)" > hip/leg1 +echo "_(I'm the right leg)" > hip/leg2 git add . git write-tree diff --git a/levels/low-level/tree-read b/levels/low-level/tree-read index ba8c440d..a994e62e 100644 --- a/levels/low-level/tree-read +++ b/levels/low-level/tree-read @@ -1,26 +1,26 @@ [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 +_(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! +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 +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 +echo "_(file A)" > fileA +echo "_(file B)" > fileB +echo "_(file C)" > fileC git add . TRIPLE_TREE=$(git write-tree) @@ -30,15 +30,15 @@ git read-tree "$EMPTY_TREE" EMPTY_TREE=$(git write-tree) -echo "file 1" > file1 -echo "file 2" > file2 +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 +echo "_(file A)" > fileA +echo "_(file B)" > fileB +echo "_(file C)" > fileC git add . TRIPLE_TREE=$(git write-tree) diff --git a/levels/low-level/welcome b/levels/low-level/welcome index d669136b..0c02628e 100644 --- a/levels/low-level/welcome +++ b/levels/low-level/welcome @@ -1,22 +1,22 @@ [description] -This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3 +_(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 + git init) [congrats] -Well done! +_(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!) +(Click "Next Level" as soon as you're ready!)) [setup] diff --git a/levels/merge/conflict b/levels/merge/conflict index 1a8b02b7..a9dfbd77 100644 --- a/levels/merge/conflict +++ b/levels/merge/conflict @@ -1,47 +1,45 @@ -title = Contradictions +title = _(Contradictions) cards = checkout commit-auto merge reset-hard [description] -Sometimes, timelines will contradict each other. +_(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. +Let your finalized timeline be the "main" one.) [setup] -echo "Just woke up. Is hungry." > sam +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 +echo "_(Had blueberry pancakes with maple syrup for breakfast.)" > sam git add . git commit -m "Pancakes!" -echo " -Is at work." >> sam +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 +echo "_(Had muesli with oats and strawberries for breakfast.)" > sam git add . git commit -m "Muesli!" -echo " -Is at work." >> sam +echo "_(Is at work.)" >> sam git commit -am "Go to work" git checkout main [win] -# Make a breakfast compromise in the 'main' branch. +# _(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! +_(Yum, that sounds like a good breakfast!) diff --git a/levels/merge/merge b/levels/merge/merge index 8b45d06a..34637768 100644 --- a/levels/merge/merge +++ b/levels/merge/merge @@ -1,68 +1,68 @@ -title = Merging timelines +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! +_(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. +echo "_(You do not have a baguette. You do not have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "The Beginning" -echo "You have a baguette. +echo "_(You have a baguette. You do not have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "You buy a baguette" -echo "You ate a baguette. +echo "_(You ate a baguette. You do not have coffee. -You do not have a donut." > you +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. +echo "_(You do not have a baguette. You have coffee. -You do not have a donut." > you +You do not have a donut.)" > you git add . git commit -m "You buy some coffee" -echo "You do not have a baguette. +echo "_(You do not have a baguette. You drank coffee. -You do not have a donut." > you +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. +echo "_(You do not have a baguette. You do not have coffee. -You have a donut." > you +You have a donut.)" > you git add . git commit -m "You buy a donut" -echo "You do not have a baguette. +echo "_(You do not have a baguette. You do not have coffee. -You ate a donut." > you +You ate a donut.)" > you git add . git commit -m "You eat the donut" @@ -71,12 +71,12 @@ 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"; } +# _(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. +# _(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... +_(I wonder if you're more relaxed when you sleep in parallel timelines...) diff --git a/levels/merge/merge-abort b/levels/merge/merge-abort index ce7190be..3513575a 100644 --- a/levels/merge/merge-abort +++ b/levels/merge/merge-abort @@ -1,24 +1,24 @@ -title = Abort a merge +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. +_(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 +git merge --abort when you are in a merge process. -Try to merge both commits and abort the merge afterwards. +Try to merge both commits and abort the merge afterwards.) [setup] -echo "A new day is starting" > you +echo "_(A new day is starting)" > you git add . git commit -m "Start" -echo "Walking down the Main Lane." >> you +echo "_(Walking down the Main Lane.)" >> you git add . git commit -m "Main Lane" @@ -26,7 +26,7 @@ git commit -m "Main Lane" git checkout HEAD~1 -echo "Walking down the Side Lane." >> you +echo "_(Walking down the Side Lane.)" >> you git add . git commit -m "Side Lane" @@ -43,12 +43,12 @@ fi [win] -# You tried to merge? +# _(You tried to merge?) test -f .git/secretfile -# You aborted to merge? +# _(You aborted to merge?) test -f .git/secretfile && ! test -f .git/MERGE_HEAD && ! git rev-parse HEAD^^ [congrats] -Aaah, let's merge later... +_(Aaah, let's merge later...) diff --git a/levels/remotes/friend b/levels/remotes/friend index 1b70f33a..e25281a1 100644 --- a/levels/remotes/friend +++ b/levels/remotes/friend @@ -1,15 +1,15 @@ -title = Friend +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! +_(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! +Take turns until you have five lines!) [setup yours] -echo "Line 1" > essay +echo "_(Line 1)" > essay git add . git commit -m "One line" @@ -18,30 +18,30 @@ git push -u friend main [setup friend] git checkout main -echo "Line 2, gnihihi" >> essay +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 + echo "_(Line 4, blurbblubb)" >> essay git commit -am "Final line" - hint "Oh nice, I added a fourth 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 second line from your friend) +git show HEAD:essay | grep _(gnihihi) -# Got the fourth line from your friend. -git show HEAD:essay | grep blurbblubb +# _(Got the fourth line from your friend) +git show HEAD:essay | grep _(blurbblubb) [win friend] -# The friend got a third line from you +# _(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 +# _(The friend got a fifth line from you) test "$(git show HEAD:essay | wc -l)" -ge 5 diff --git a/levels/remotes/problems b/levels/remotes/problems index fab71c56..b710970b 100644 --- a/levels/remotes/problems +++ b/levels/remotes/problems @@ -1,33 +1,33 @@ -title = Problems +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! +_(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 +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 +echo "_(The bike shed should be green)" > file [setup friend] git checkout main -echo "The bike shed should be blue" > file +echo "_(The bike shed should be blue)" > file git commit -a -m "friends version" [win] -# Commit your local changes. +# _(Commit your local changes.) test "$(git status -s)" = "" [win friend] -# Look at your friend's suggestion, make a compromise, and push it back. +# _(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/sandbox/empty b/levels/sandbox/empty index 1f954a57..61581be4 100644 --- a/levels/sandbox/empty +++ b/levels/sandbox/empty @@ -1,7 +1,7 @@ -title = Empty sandbox +title = _(Empty sandbox) [description] -This is an empty sandbox you can play around in. +_(This is an empty sandbox you can play around in.) [setup] diff --git a/levels/sandbox/remote b/levels/sandbox/remote index f0ca2c02..b719d6b5 100644 --- a/levels/sandbox/remote +++ b/levels/sandbox/remote @@ -1,15 +1,15 @@ -title = Sandbox with a remote +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! +_(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? +How can you push tags and branches on a remote? How can you delete them again?) [setup yours] -echo "Line 1" > essay +echo "_(Line 1)" > essay git add . git commit -m "Initial commit" @@ -18,5 +18,5 @@ git push -u friend main [setup friend] git checkout main -echo "Line 2" >> essay +echo "_(Line 2)" >> essay git commit -am "Another line" diff --git a/levels/sandbox/three-commits b/levels/sandbox/three-commits index 3e5308c4..f39ddd25 100644 --- a/levels/sandbox/three-commits +++ b/levels/sandbox/three-commits @@ -1,26 +1,28 @@ -title = Sandbox with three commits +title = _(Sandbox with three commits) cards = checkout add reset-file checkout-file commit merge rebase [setup] -echo "You wake up." > you +echo "_(You wake up.)" > you git add . git commit -m "The beginning" -echo "You drink coffee." >> you +echo "_(You drink coffee.)" >> you git commit -am "First things first" -echo "You hear a knock on the door." >> you +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. +_(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! +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/shit-happens/bad-commit b/levels/shit-happens/bad-commit index 10669be8..7ac80cf1 100644 --- a/levels/shit-happens/bad-commit +++ b/levels/shit-happens/bad-commit @@ -1,16 +1,17 @@ -title = Undo a bad commit +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? +_(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 resets the current branch ref to the commit you specify. -It does not change your working directory in any way, which means that after that, you can try making the commit you want again. +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] @@ -22,9 +23,9 @@ git commit -am "More numberrrrrs" [win] -# In the last main commit, the numbers file contains the numbers from 1 to 10. +# _(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". +# _(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" +# _(The commit with the typo is not part of the main branch anymore.) +! git log --oneline | grep "rrrrr" diff --git a/levels/shit-happens/pushed-something-broken b/levels/shit-happens/pushed-something-broken index f8dce389..892da8f5 100644 --- a/levels/shit-happens/pushed-something-broken +++ b/levels/shit-happens/pushed-something-broken @@ -1,44 +1,44 @@ -title = I pushed something broken +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` +_(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 +echo "_(this is fine ? ? -?" > text +?)" > text git add . git commit -m fine -echo "this is fine +echo "_(this is fine this is also fine ? -?" > text +?)" > text git commit -am "also fine" -echo "this is fine +echo "_(this is fine this is also fine this is very bad -?" > text +?)" > text git commit -am "very bad" -echo "this is fine +echo "_(this is fine this is also fine this is very bad -this is fine again" > text +this is fine again)" > text git commit -am "fine again" git push team 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" +# _(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/shit-happens/reflog b/levels/shit-happens/reflog index 5ebb78f3..478ae28a 100644 --- a/levels/shit-happens/reflog +++ b/levels/shit-happens/reflog @@ -1,15 +1,15 @@ -title = Go back to where you were before +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. +_(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 which past commit you were on before. How can you find out? -There's a convenient command that shows you all the places your HEAD has pointed to in the past: +There's a convenient command that shows you all the places your `HEAD` has pointed to in the past: - git reflog + git reflog) [setup] @@ -22,5 +22,5 @@ git checkout main [win] -# Find out where you've been before, and go back there! +# _(Find out where you've been before, and go back there!) test "$(git rev-parse HEAD)" = "$(git rev-parse 3)" diff --git a/levels/shit-happens/restore-a-file b/levels/shit-happens/restore-a-file index 26450f0e..df33bd31 100644 --- a/levels/shit-happens/restore-a-file +++ b/levels/shit-happens/restore-a-file @@ -1,22 +1,22 @@ -title = Restore a deleted file +title = _(Restore a deleted file) cards = checkout [description] -Oops - you deleted the "essay" file, which you worked on all night! +_(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! +Luckily, Git is here to help! You can use `git checkout` to restore the file!) [setup] -echo important > essay +echo "_(important)" > essay git add . git commit -m "Initial commit" -echo "important content" > essay +echo "_(important content)" > essay git commit -am "Improve essay" rm essay [win] -# Restore the essay to contain "important content" -test "$(cat essay)" = "important content" +# _(Restore the essay to contain "important content") +test "$(cat essay)" = "_(important content)" diff --git a/levels/shit-happens/restore-a-file-from-the-past b/levels/shit-happens/restore-a-file-from-the-past index b51c1080..440740cc 100644 --- a/levels/shit-happens/restore-a-file-from-the-past +++ b/levels/shit-happens/restore-a-file-from-the-past @@ -1,21 +1,21 @@ -title = Restore a file from the past +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: +_(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] + git checkout [commit] [file]) [setup] -echo "good version" > essay +echo "_(good version)" > essay git add . git commit -m "Initial commit" -echo "bad version" > essay +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" +# _(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/stash/stash b/levels/stash/stash index 6a4bc616..1a7ef662 100644 --- a/levels/stash/stash +++ b/levels/stash/stash @@ -1,39 +1,36 @@ -title = Stashing +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. +_(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 +tipp3) [setup] -echo "Apple Pie:" > recipe +echo "_(Apple Pie:)" > recipe git add . git commit -m "creating a recipe" -echo "- 4 Apples" >> recipe +echo "_(- 4 Apples)" >> recipe git add . git commit -m "Adding ingredients" -echo "- 500g Flour" >> recipe +echo "_(- 500g Flour)" >> recipe git checkout main [win] -# Did you stash the current changes? +# _(Did you stash the current changes?) test "$(git stash list | wc -l)" -ge 1 [actions] @@ -42,4 +39,4 @@ test "$(git stash list | wc -l)" -ge 1 [congrats] -Nice stash you got there! :) +_(Nice stash you got there! :\)) diff --git a/levels/stash/stash-branch b/levels/stash/stash-branch index 16c9eaec..53b5d291 100644 --- a/levels/stash/stash-branch +++ b/levels/stash/stash-branch @@ -1,11 +1,12 @@ -title = Branch from stash +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 +_(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! @@ -15,28 +16,28 @@ tipp1 --- tipp2 --- -tipp3 +tipp3) [setup] -echo "Apple Pie:" > recipe +echo "_(Apple Pie:)" > recipe git add . git commit -m "creating a recipe" -echo "- 4 Apples" >> recipe +echo "_(- 4 Apples)" >> recipe git add . git commit -m "Adding ingredients" -echo "- 500g Flour" >> recipe +echo "_(- 500g Flour)" >> recipe git stash push git checkout main [win] -# Did you create a new branch from the stashed changes? +# _(Did you create a new branch from the stashed changes?) test "$(git branch --list| wc -l)" -ge 2 [actions] @@ -45,4 +46,4 @@ test "$(git branch --list| wc -l)" -ge 2 [congrats] -Stashed changes are in a new branch! :) +_(Stashed changes are in a new branch! :\)) diff --git a/levels/stash/stash-clear b/levels/stash/stash-clear index 9a1b6977..ef1b7d8b 100644 --- a/levels/stash/stash-clear +++ b/levels/stash/stash-clear @@ -1,16 +1,20 @@ -title = Clear the Stash +title = _(Clear the Stash) cards = checkout commit-auto merge reset-hard [description] -If you want to inspect your stash stack, use the command +_(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! --- @@ -18,34 +22,34 @@ tipp1 --- tipp2 --- -tipp3 +tipp3) [setup] -echo "Apple Pie:" > recipe +echo "_(Apple Pie:)" > recipe git add . git commit -m "creating a recipe" -echo "- 4 Apples" >> recipe +echo "_(- 4 Apples)" >> recipe git add . git commit -m "Adding ingredients" -echo "- 500g Flour" >> recipe +echo "_(- 500g Flour)" >> recipe git stash push -echo "- 200g Sugar" >> recipe +echo "_(- 200g Sugar)" >> recipe git stash push -echo "- Pinch of Salt" >> recipe +echo "_(- Pinch of Salt)" >> recipe git stash push git checkout main [win] -# Did you clear your stash stack? +# _(Did you clear your stash stack?) test "$(git stash list | wc -l)" -eq 0 [actions] @@ -54,4 +58,4 @@ test "$(git stash list | wc -l)" -eq 0 [congrats] -All clear! :) +_(All clear! :\)) diff --git a/levels/stash/stash-merge b/levels/stash/stash-merge index 14ef00f8..8edaa254 100644 --- a/levels/stash/stash-merge +++ b/levels/stash/stash-merge @@ -1,12 +1,13 @@ -title = Merging popped stash +title = _(Merging popped stash) cards = checkout commit-auto merge reset-hard [description] -When you want to re-apply your changes but you already continued working on your file, you might get -a merge conflict! Let's practice this situation. +_(When you want to re-apply your changes but you already continued working on your file, you might get a merge conflict! Let's practice 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. --- @@ -14,35 +15,35 @@ tipp1 --- tipp2 --- -tipp3 +tipp3) [setup] -echo "Apple Pie:" > recipe +echo "_(Apple Pie:)" > recipe git add . git commit -m "creating a recipe" -echo "- 4 Apples" >> recipe +echo "_(- 4 Apples)" >> recipe git add . git commit -m "Adding ingredients" -echo "- 500g Flour" >> recipe +echo "_(- 500g Flour)" >> recipe git stash push -echo "- Pinch of Salt" >> recipe +echo "_(- Pinch of Salt)" >> recipe git checkout main git add recipe [win] -# Did you resolve the conflict and commit? -{ git show HEAD | grep "Flour"; } && { git show HEAD | grep "Salt"; } +# _(Did you resolve the conflict and commit?) +{ git show HEAD | grep "_(Flour)"; } && { git show HEAD | grep "_(Salt)"; } -# Did you clear stash stack? +# _(Did you clear stash stack?) test "$(git stash list | wc -l)" -eq 0 [actions] @@ -51,4 +52,4 @@ test "$(git stash list | wc -l)" -eq 0 [congrats] -Yay, you got your changes back! :) +_(Yay, you got your changes back! :\)) diff --git a/levels/stash/stash-pop b/levels/stash/stash-pop index 5ac12d56..ee32e165 100644 --- a/levels/stash/stash-pop +++ b/levels/stash/stash-pop @@ -1,10 +1,11 @@ -title = Pop from Stash +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 +_(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 @@ -13,28 +14,28 @@ tipp1 --- tipp2 --- -tipp3 +tipp3) [setup] -echo "Apple Pie:" > recipe +echo "_(Apple Pie:)" > recipe git add . git commit -m "creating a recipe" -echo "- 4 Apples" >> recipe +echo "_(- 4 Apples)" >> recipe git add . git commit -m "Adding ingredients" -echo "- 500g Flour" >> recipe +echo "_(- 500g Flour)" >> recipe git stash push git checkout main [win] -# Did you pop the changes from the stash stack? +# _(Did you pop the changes from the stash stack?) test "$(git stash list | wc -l)" -eq 0 [actions] @@ -43,4 +44,4 @@ test "$(git stash list | wc -l)" -eq 0 [congrats] -Yay, you got your changes back! :) +_(Yay, you got your changes back! :\)) diff --git a/levels/tags/add-tag b/levels/tags/add-tag index 9c5703a7..b1595f62 100644 --- a/levels/tags/add-tag +++ b/levels/tags/add-tag @@ -1,38 +1,31 @@ -title = Creating tags +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. +_(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 +Write - git tag - -to tag your commit. + git tag ---- -tipp1 ---- -tipp2 ---- -tipp3 +to tag your commit.) [setup] -echo "event 1" > feature-list +echo "_(event 1)" > feature-list git add . git commit -m "Adding feature 1" -echo "event 2" >> feature-list +echo "_(event 2)" >> feature-list git add . git commit -m "Adding feature 2" -echo "event 3" >> feature-list +echo "_(event 3)" >> feature-list git add . git commit -m "Adding feature 3" @@ -41,7 +34,7 @@ git checkout --detach main [win] -# Did you create a new tag? +# _(Did you create a new tag?) test "$(git tag -l | wc -l)" -ge 1 [actions] @@ -50,4 +43,4 @@ test "$(git tag -l | wc -l)" -ge 1 [congrats] -Nice! You tagged your first commit :) +_(Nice! You tagged your first commit :\)) diff --git a/levels/tags/add-tag-later b/levels/tags/add-tag-later index 905647c5..3c950a16 100644 --- a/levels/tags/add-tag-later +++ b/levels/tags/add-tag-later @@ -1,13 +1,13 @@ -title = Tagging later +title = _(Tagging later) cards = checkout commit-auto merge reset-hard [description] -But what happens if you forgot to tag your current commit? +_(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"! --- @@ -15,21 +15,21 @@ tipp1 --- tipp2 --- -tipp3 +tipp3) [setup] -echo "event 1" > feature-list +echo "_(event 1)" > feature-list git add . git commit -m "Adding feature 1" -echo "event 2" >> feature-list +echo "_(event 2)" >> feature-list git add . git commit -m "Adding feature 2" -echo "event 3" >> feature-list +echo "_(event 3)" >> feature-list git add . git commit -m "Adding feature 3" @@ -38,7 +38,7 @@ git checkout --detach main [win] -# Did you create a new tag? +# _(Did you create a new tag?) 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 :) +_(Well done :\)) diff --git a/levels/tags/remote-tag b/levels/tags/remote-tag index 07269156..22d6eebc 100644 --- a/levels/tags/remote-tag +++ b/levels/tags/remote-tag @@ -1,33 +1,32 @@ -title = Remote Tags +title = _(Remote Tags) cards = pull push commit-auto checkout [description] -When you work with remote repositories, tags are not pushed or pulled automatically. +_(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: + +Deleting tags on your remote works with: git push --delete - -You can also sync - git fetch --prune --prune-tags +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. +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 +echo "_(toothbrush sharing)" > project-ideas git add . git commit -m "First idea" -echo "Is my phone upside down? App" >> project-ideas +echo "_(Is my phone upside down? App)" >> project-ideas git commit -am "Another idea" @@ -45,14 +44,14 @@ git branch -u friend/main main git tag v1 HEAD~1 [win] -# v1 tag in your repo +# _(v1 tag in your repo) test "$(git show v1 -s --format=%h)" = "$(git show HEAD~1 -s --format=%h)" -# v2 tag in your repo +# _(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 +# _(v2 tag in the remote) test "$(git show v2 -s --format=%h)" = "$(git show HEAD -s --format=%h)" diff --git a/levels/tags/remove-tag b/levels/tags/remove-tag index 98f2800d..c0357819 100644 --- a/levels/tags/remove-tag +++ b/levels/tags/remove-tag @@ -1,12 +1,12 @@ -title = Removing tags +title = _(Removing tags) cards = checkout commit-auto merge reset-hard [description] -You added way too many tags? No prob! Delete them with +_(You added way too many tags? No prob! Delete them with git tag -d - + Remove all tags in this repo! --- @@ -14,21 +14,21 @@ tipp1 --- tipp2 --- -tipp3 +tipp3) [setup] -echo "event 1" > feature-list +echo "_(event 1)" > feature-list git add . git commit -m "Adding feature 1" -echo "event 2" >> feature-list +echo "_(event 2)" >> feature-list git add . git commit -m "Adding feature 2" -echo "event 3" >> feature-list +echo "_(event 3)" >> feature-list git add . git commit -m "Adding feature 3" @@ -41,7 +41,7 @@ git checkout --detach main [win] -# Did you remove all tags? +# _(Did you remove all tags?) test "$(git tag -l | wc -l)" -eq 0 [actions] @@ -50,4 +50,4 @@ test "$(git tag -l | wc -l)" -eq 0 [congrats] -Well done :) +_(Well done :\)) diff --git a/levels/unused/checkout b/levels/unused/checkout index 9d9c9574..6d6b3c76 100644 --- a/levels/unused/checkout +++ b/levels/unused/checkout @@ -1,11 +1,11 @@ -title = Getting the last version +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! :/ +_(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`! +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] @@ -22,10 +22,10 @@ git commit -a -m "Even better version" echo "D" >> essay.txt git commit -a -m "Marvelous version" -echo "blarg -blaaaargh" > essay.txt +echo "_(blarg +blaaaargh)" > essay.txt [win] -# Restore the version from the last commit. +# _(Restore the version from the last commit.) cat essay.txt | grep D diff --git a/levels/unused/clone b/levels/unused/clone index 8459c082..8707185e 100644 --- a/levels/unused/clone +++ b/levels/unused/clone @@ -1,9 +1,9 @@ -title = Cloning a repo +title = _(Cloning a repo) cards = clone commit-auto pull push [description] -Get your friend's repo using clone, change something, push it back. +_(Get your friend's repo using `clone`, change something, push it back.) [setup] diff --git a/levels/unused/commit b/levels/unused/commit index fd84cc92..a3795653 100644 --- a/levels/unused/commit +++ b/levels/unused/commit @@ -1,9 +1,9 @@ -title = Make a commit \o/ +title = _(Make a commit \o/) cards = add reset checkout commit [description] -For practice, make a commit where all files contain an "x"! +_(For practice, make a commit where all files contain an "x"!) [setup] @@ -19,9 +19,9 @@ echo c > c [win] -# File a contains "x" in the last main commit. +# _(File a contains "x" in the last main commit.) test "$(git show main:a)" = x -# File b contains "x" in the last main commit. +# _(File b contains "x" in the last main commit.) test "$(git show main:b)" = x -# File c contains "x" in the last main commit. +# _(File c contains "x" in the last main commit.) test "$(git show main:c)" = x diff --git a/levels/unused/commit-a b/levels/unused/commit-a index 747a0094..b0ea69c6 100644 --- a/levels/unused/commit-a +++ b/levels/unused/commit-a @@ -1,13 +1,13 @@ -title = Make a commit, but faster! +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 +_(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. +This will automatically add all changes you made to local files! Very convenient.) [setup] @@ -22,5 +22,5 @@ echo x > c [win] -# Make a commit where all files contain "x". +# _(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/unused/fetch b/levels/unused/fetch index 377355ab..c98aa383 100644 --- a/levels/unused/fetch +++ b/levels/unused/fetch @@ -1,35 +1,35 @@ -title = Fetching from remotes +title = _(Fetching from remotes) cards = checkout fetch commit-auto [description] -Here, you already have two remotes configured! You can list them using `git remote`. +_(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. +Then, make a new commit on top of your original one that introduces a compromise.) [setup] -echo "The bikeshed should be ???" > proposal +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 +echo "_(The bikeshed should be green)" > proposal git commit -am "Green" [setup friend2] git pull yours main -echo "The bikeshed should be blue" > proposal +echo "_(The bikeshed should be blue)" > proposal git commit -am "Blue" [win] -# Your proposal is acceptable for friend1. +# _(Your proposal is acceptable for friend1.) git show main:proposal | git grep green -# Your proposal is acceptable for friend2. +# _(Your proposal is acceptable for friend2.) git show main:proposal | git grep blue diff --git a/levels/unused/files-move b/levels/unused/files-move index 8f657102..b55f8cfe 100644 --- a/levels/unused/files-move +++ b/levels/unused/files-move @@ -1,27 +1,27 @@ -title = No sleep required +title = _(No sleep required) cards = file-new file-delete file-rename [description] -Actually, you decide that you don't need any sleep. +_(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! +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 +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! +# _(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! +_(Neat! It even still looks a bit comfortable! -You head out, eager for your first lesson at time travel school! +You head out, eager for your first lesson at time travel school!) diff --git a/levels/unused/index-mv b/levels/unused/index-mv index 9ff72704..a2d2b3fe 100644 --- a/levels/unused/index-mv +++ b/levels/unused/index-mv @@ -1,18 +1,18 @@ -title = Rename a file in the next commit +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 +_(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. +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 "_(SPECIAL)" > b echo x > c git add . git commit -m "Initial commit" @@ -22,5 +22,5 @@ git add b [win] -# Make a commit where you rename the file b to "x". +# _(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/unused/init b/levels/unused/init index c76daa5e..1b18f339 100644 --- a/levels/unused/init +++ b/levels/unused/init @@ -1,4 +1,4 @@ -title = Welcome! +title = _(Welcome!) cards = init [description] @@ -10,5 +10,5 @@ rm -rf .git [win] -# Again, initialize your time machine! +# _(Again, initialize your time machine!) test -d .git diff --git a/levels/unused/pull-push b/levels/unused/pull-push index 71ce61d3..4c6affea 100644 --- a/levels/unused/pull-push +++ b/levels/unused/pull-push @@ -1,29 +1,29 @@ -title = Helping each other +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! +_(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! +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). +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 +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 +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 +echo "_(Had muesli with oats and strawberries for breakfast.)" > sam git add . git commit -m "Muesli!" @@ -37,7 +37,7 @@ git checkout main git merge pancakes git merge muesli -echo "Had pancakes with strawberries for breakfast." > sam +echo "_(Had pancakes with strawberries for breakfast.)" > sam git add . git commit -m "Let's make this breakfast compromise" --author="Sidekick " @@ -48,4 +48,4 @@ git rev-parse main^^ && test "$(git rev-parse main^^1^)" = "$(git rev-parse main [congrats] -In reality, in many cases, a lot of time agents work together to build a really good future together! :) +_(In reality, in many cases, a lot of time agents work together to build a really good future together! :)) diff --git a/levels/unused/remotes-add b/levels/unused/remotes-add index db24b7da..2fbe08bd 100644 --- a/levels/unused/remotes-add +++ b/levels/unused/remotes-add @@ -1,9 +1,9 @@ -title = Adding a remote +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 +_(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] @@ -13,7 +13,7 @@ When you've done that, you can get all commits from that remote using git pull friend -There's a letter for you! +There's a letter for you!) [setup] @@ -21,13 +21,13 @@ git remote remove friend [setup friend] -echo "I'm really committed to our friendship! <3" > love_letter +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. +# _(Add a remote that points to ../friend.) git remote -v | grep '../friend' -# Pull from the remote. +# _(Pull from the remote.) git show HEAD:love_letter | grep committed diff --git a/levels/unused/remotes-delete b/levels/unused/remotes-delete index c0262047..76feebb9 100644 --- a/levels/unused/remotes-delete +++ b/levels/unused/remotes-delete @@ -1,9 +1,9 @@ -title = Deleting and renaming a remote +title = _(Deleting and renaming a remote) cards = checkout [description] -Here, you already have two remotes configured! You can list them using `git remote`. +_(Here, you already have two remotes configured! You can list them using `git remote`.) [setup] @@ -15,9 +15,9 @@ git remote rename friend frend [win] -# Rename the remote with the typo (using `git remote rename [old name] [new name]`) +# _(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. +# _(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]`) +# _(Delete the remote you don't want to keep (using `git remote remove [remote]`)) ! grep 'enemy' <(git remote) diff --git a/levels/unused/restore b/levels/unused/restore index 1f9961e7..1193770b 100644 --- a/levels/unused/restore +++ b/levels/unused/restore @@ -1,11 +1,11 @@ -title = Looking into the past +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"! +_(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! +No problem, you can use the checkout card to restore your essay from an older commit!) [setup] @@ -13,16 +13,16 @@ echo "Initial version" > essay.txt git add . git commit -m "Initial commit" -echo "Improved version" > essay.txt +echo "_(Improved version)" > essay.txt git commit -a -m "Improved version" -echo "Best version" > essay.txt +echo "_(Best version)" > essay.txt git commit -a -m "Best version" -echo "Less-good version" > essay.txt +echo "_(Less-good version)" > essay.txt git commit -a -m "Less-good version" [win] -# For nostalgic reasons, restore the very first backup you made! +# _(For nostalgic reasons, restore the very first backup you made!) diff essay.txt <(echo "Best version") diff --git a/levels/unused/split b/levels/unused/split index 274b792b..9ff311eb 100644 --- a/levels/unused/split +++ b/levels/unused/split @@ -1,23 +1,23 @@ -title = Split a commit! +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. +_(Here, both changes happened in one commit! Split them to be in two commits instead.) [setup] -echo something > file1 -echo something else > file2 +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 +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 +echo "_(this is some other change)" >> file1 +echo "_(this is some other change)" >> file2 git commit -am "Something else" [win] diff --git a/levels/unused/steps b/levels/unused/steps index cb848615..6011d954 100644 --- a/levels/unused/steps +++ b/levels/unused/steps @@ -1,21 +1,21 @@ -title = One step after another +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. +_(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! +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 +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 +echo "_(this should happen first)" >> file1 +echo "_(and this should happen after that)" >> file2 [win] diff --git a/levels/unused/who-are-you b/levels/unused/who-are-you index f06137ca..f98eaf60 100644 --- a/levels/unused/who-are-you +++ b/levels/unused/who-are-you @@ -1,12 +1,12 @@ -title = Nice to meet you! +title = _(Nice to meet you!) cards = config-name config-email [description] -Introduce yourself using +_(Introduce yourself using git config --global user.name Firstname - git config --global user.email "your@mail.com" + git config --global user.email "your@mail.com") [setup] @@ -16,8 +16,8 @@ test "$(git config user.name)" != "You" && hint "Hey $(git config user.name), ni [win] -# Have a name configured. +# _(Have a name configured.) test "$(git config user.name)" != "You" -# Have an email address configured. +# _(Have an email address configured.) test "$(git config user.email)" != "you@time.agency" diff --git a/levels/workflows/gitignore b/levels/workflows/gitignore index dc55243c..2104870d 100644 --- a/levels/workflows/gitignore +++ b/levels/workflows/gitignore @@ -1,15 +1,15 @@ -title = Ignoring files +title = _(Ignoring files) [description] -That chicken is running around a lot, and changing often. We don't want to have it in our commits. +_(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 .`! +Add it to the file .gitignore, and try using `git add .`!) [setup] touch .gitignore -echo important > important +echo "_(important)" > important git add important git commit -m "Initial commit" diff --git a/levels/workflows/pr b/levels/workflows/pr index 2496c1fd..8ad85c25 100644 --- a/levels/workflows/pr +++ b/levels/workflows/pr @@ -1,9 +1,9 @@ -title = Cloning a repo +title = _(Cloning a repo) 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 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`.) [setup] @@ -12,7 +12,7 @@ rm -rf .git [setup friend] -echo "2 + 3 = " > file +echo "2 + 3 =" > file git add . git commit -m "Initial commit" diff --git a/locale/br.po b/locale/br.po new file mode 100644 index 00000000..f9f00d5b --- /dev/null +++ b/locale/br.po @@ -0,0 +1,2347 @@ +msgid "" +msgstr "" +"Project-Id-Version: oh-my-git\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: br\n" + +msgid "\"~ Why do you want to learn how to use time machines? ~\"" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "teacher" +msgstr "TRANSLATED" + +msgid "yellow" +msgstr "TRANSLATED" + +msgid "friend" +msgstr "TRANSLATED" + +msgid "ru" +msgstr "Русский" + +msgid "br" +msgstr "Brazil" + +msgid "en" +msgstr "English" + +msgid "team" +msgstr "TRANSLATED" + +msgid "(no description)" +msgstr "TRANSLATED" + +msgid "- 200g Sugar" +msgstr "TRANSLATED" + +msgid "- 4 Apples" +msgstr "TRANSLATED" + +msgid "- 500g Flour" +msgstr "TRANSLATED" + +msgid "- Pinch of Salt" +msgstr "TRANSLATED" + +msgid "" +"- Sam\n" +"- Alex" +msgstr "TRANSLATED" + +msgid "A big spider web sticks above your bed." +msgstr "TRANSLATED" + +msgid "A bottle, containing a clear liquid." +msgstr "TRANSLATED" + +msgid "A candle, burning with a blue flame." +msgstr "TRANSLATED" + +msgid "A comfortable, yellow bed with yellow cushions." +msgstr "TRANSLATED" + +msgid "" +"A commit can have multiple parents! You can specify the -p option multiple times, like this:\n" +"\n" +" git commit-tree -m \"Description\" -p -p \n" +"\n" +"Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them." +msgstr "TRANSLATED" + +msgid "A cozy bed." +msgstr "TRANSLATED" + +msgid "A hammer, balancing on its handle." +msgstr "TRANSLATED" + +msgid "A new day is starting" +msgstr "TRANSLATED" + +msgid "A really big yellow shelf." +msgstr "TRANSLATED" + +msgid "" +"A small child.\n" +"It really loves cats!" +msgstr "TRANSLATED" + +msgid "A small, but heavy glass ball." +msgstr "TRANSLATED" + +msgid "A smoke detector. It's absolutely silent." +msgstr "TRANSLATED" + +msgid "A thin book, that's standing upright." +msgstr "TRANSLATED" + +msgid "A tiny spider web is next to your window." +msgstr "TRANSLATED" + +msgid "A white sugar cube." +msgstr "TRANSLATED" + +msgid "A yellow cozy bed." +msgstr "TRANSLATED" + +msgid "A yellow cupboard with lots of drawers." +msgstr "TRANSLATED" + +msgid "A young girl with brown, curly hair." +msgstr "TRANSLATED" + +msgid "Aaah, let's merge later..." +msgstr "TRANSLATED" + +msgid "Abort a merge" +msgstr "TRANSLATED" + +msgid "Abort the current merge attempt, and reconstruct the previous state." +msgstr "TRANSLATED" + +msgid "" +"Actually, you decide that you don't need any sleep.\n" +"\n" +"Because of that, you won't require a bed, and can build some other piece of furniture from the wood!" +msgstr "TRANSLATED" + +msgid "Add a remote that points to ../friend." +msgstr "TRANSLATED" + +msgid "Add another line to form.txt!" +msgstr "TRANSLATED" + +msgid "Add another line to form2_really_final.txt!" +msgstr "TRANSLATED" + +msgid "Add new files to the index" +msgstr "TRANSLATED" + +msgid "Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b!" +msgstr "TRANSLATED" + +msgid "Add the candle." +msgstr "TRANSLATED" + +msgid "Add two more pieces of furniture" +msgstr "TRANSLATED" + +msgid "Add your name to the list of students" +msgstr "TRANSLATED" + +msgid "Adding a remote" +msgstr "TRANSLATED" + +msgid "Adding changes step by step" +msgstr "TRANSLATED" + +msgid "" +"After carefully building the index we want, it would be nice to save a permanent snapshot of it, right?\n" +"\n" +"This is what the second type of objects is for: trees! You can convert the index into a tree using\n" +"\n" +" git write-tree\n" +"\n" +"Try it! :)" +msgstr "TRANSLATED" + +msgid "Again, initialize your time machine!" +msgstr "TRANSLATED" + +msgid "Again, instead of using the card, you can also type the commands which are printed on it into the black terminal below!" +msgstr "TRANSLATED" + +msgid "All clear! :)" +msgstr "TRANSLATED" + +msgid "An extra thick spider web is right beside your door." +msgstr "TRANSLATED" + +msgid "And a third one." +msgstr "TRANSLATED" + +msgid "" +"And finally, to delete a ref, use\n" +"\n" +" git update-ref -d refs/\n" +"\n" +"Delete all refs! :P (Well, except for HEAD. HEAD is special.)" +msgstr "TRANSLATED" + +msgid "And make a commit!" +msgstr "TRANSLATED" + +msgid "And make a commit." +msgstr "TRANSLATED" + +msgid "And make a second commit!" +msgstr "TRANSLATED" + +msgid "And the history has not been modified." +msgstr "TRANSLATED" + +msgid "And to travel to the last commit, type `git checkout --detach name_of_the_branch`" +msgstr "TRANSLATED" + +msgid "And use `git push` to send it to your teacher!" +msgstr "TRANSLATED" + +msgid "Apple Pie:" +msgstr "TRANSLATED" + +msgid "" +"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\n" +"\n" +" git read-tree \n" +"\n" +"For , you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal!\n" +"\n" +"Try reading some of the trees in this repository into the index!" +msgstr "TRANSLATED" + +msgid "" +"At its core, Git is very simple. It stores \"objects\", which are basically files identified by an \"identifier\" (short: ID).\n" +"\n" +"There are four types of objects: blobs, trees, commits, and tags. The simplest type is a \"blob\", which is just a piece of text.\n" +"\n" +"Let's create some blobs! To do that, create a file with the desired content, and then use\n" +"\n" +" git hash-object -w \n" +"\n" +"The flag -w means \"write\", and tells Git to actually write the new blob to the disk.\n" +"\n" +"Create three new blobs!" +msgstr "TRANSLATED" + +msgid "Awesome!" +msgstr "TRANSLATED" + +msgid "Back" +msgstr "TRANSLATED" + +msgid "Be on a merge commit." +msgstr "TRANSLATED" + +msgid "Because you're kind of late, you start running. Someone throws a piano out of their windows, and it smashes you." +msgstr "TRANSLATED" + +msgid "Best version" +msgstr "TRANSLATED" + +msgid "Bisect" +msgstr "TRANSLATED" + +msgid "" +"Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name!\n" +"\n" +"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.\n" +"\n" +"The most convenient option to add an entry to the index is via an existing file:\n" +"\n" +" echo \"my content\" > file\n" +" git update-index --add file\n" +"\n" +"Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like \"directory/file\"?" +msgstr "TRANSLATED" + +msgid "Both you and your friend have been working on the file, and want to sync up!" +msgstr "TRANSLATED" + +msgid "Branch from stash" +msgstr "TRANSLATED" + +msgid "Branches" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Branches grow with you!" +msgstr "TRANSLATED" + +msgid "Build a situation where you consumed a baguette, a coffee, and a donut." +msgstr "TRANSLATED" + +msgid "But make sure you keep your bed!" +msgstr "TRANSLATED" + +msgid "But there's another way to interact with Git:" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Cards!" +msgstr "TRANSLATED" + +msgid "Change the contents of the glass!" +msgstr "TRANSLATED" + +msgid "Changing the Past" +msgstr "TRANSLATED" + +msgid "Checking out files from the index" +msgstr "TRANSLATED" + +msgid "Clear the Stash" +msgstr "TRANSLATED" + +msgid "Click on these files to edit them!" +msgstr "TRANSLATED" + +msgid "Cloning a repo" +msgstr "TRANSLATED" + +msgid "Commit your local changes." +msgstr "TRANSLATED" + +msgid "Commit your result." +msgstr "TRANSLATED" + +msgid "Complete the goal of this level" +msgstr "TRANSLATED" + +msgid "" +"Construct a chain of three trees, which don't point to anything else.\n" +"\n" +"This is hard! The git mktree command might be useful." +msgstr "TRANSLATED" + +msgid "Continue the current rebasing process." +msgstr "TRANSLATED" + +msgid "Contradictions" +msgstr "TRANSLATED" + +msgid "Cool!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Create a branch called 'birthday' that points to the birthday timeline." +msgstr "TRANSLATED" + +msgid "Create a branch called 'concert' that points to the concert timeline." +msgstr "TRANSLATED" + +msgid "Create a new branch at your current location." +msgstr "TRANSLATED" + +msgid "Create a new file." +msgstr "TRANSLATED" + +msgid "Create two trees pointing to the same blob!" +msgstr "TRANSLATED" + +msgid "Create your own copy of someone else's repo." +msgstr "TRANSLATED" + +msgid "Creating branches" +msgstr "TRANSLATED" + +msgid "Creating tags" +msgstr "TRANSLATED" + +msgid "Delete a branch." +msgstr "TRANSLATED" + +msgid "Delete a file both in the working directory, as well as the index." +msgstr "TRANSLATED" + +msgid "Delete a file in the next commit" +msgstr "TRANSLATED" + +msgid "Delete a file." +msgstr "TRANSLATED" + +msgid "" +"Delete all objects in this repository using git commands only!\n" +"\n" +"Useful commands:\n" +"\n" +" git prune\n" +" git reflog expire" +msgstr "TRANSLATED" + +msgid "Delete the remote you don't want to keep (using `git remote remove [remote]`)" +msgstr "который вы не хотите сохранять (используя `git remote remove [remote]`)" + +msgid "Deleting and renaming a remote" +msgstr "TRANSLATED" + +msgid "Deleting branches" +msgstr "TRANSLATED" + +msgid "Description" +msgstr "TRANSLATED" + +msgid "Did you clear stash stack?" +msgstr "TRANSLATED" + +msgid "Did you clear your stash stack?" +msgstr "TRANSLATED" + +msgid "Did you create a new branch from the stashed changes?" +msgstr "TRANSLATED" + +msgid "Did you create a new tag?" +msgstr "TRANSLATED" + +msgid "Did you drink a coffee on the coffee branch?" +msgstr "TRANSLATED" + +msgid "Did you eat a baguette on the baguette branch?" +msgstr "TRANSLATED" + +msgid "Did you eat a donut on the donut branch?" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Did you pop the changes from the stash stack?" +msgstr "TRANSLATED" + +msgid "Did you remove all tags?" +msgstr "TRANSLATED" + +msgid "Did you resolve the conflict and commit?" +msgstr "TRANSLATED" + +msgid "Did you stash the current changes?" +msgstr "TRANSLATED" + +msgid "Display a log of where the ref pointed to in the past." +msgstr "TRANSLATED" + +msgid "Don't you immediately feel more at home?" +msgstr "TRANSLATED" + +msgid "Drag this card into the empty space above to initialize the time machine!" +msgstr "чтобы инициализировать машину времени!" + +msgid "Drag this card to a commit or to a branch to travel to it!" +msgstr "TRANSLATED" + +msgid "Draw new cards" +msgstr "TRANSLATED" + +msgid "Empty sandbox" +msgstr "TRANSLATED" + +msgid "Enter the time machine" +msgstr "TRANSLATED" + +msgid "Feel free to reset the level and try the other strategy! Which one do you like better?" +msgstr "TRANSLATED" + +msgid "Fetching from remotes" +msgstr "TRANSLATED" + +msgid "File a contains \"x\" in the last main commit." +msgstr "TRANSLATED" + +msgid "File b contains \"x\" in the last main commit." +msgstr "TRANSLATED" + +msgid "File c contains \"x\" in the last main commit." +msgstr "TRANSLATED" + +msgid "Files" +msgstr "TRANSLATED" + +msgid "Fill out the enrollment form, and commit it!" +msgstr "TRANSLATED" + +msgid "Find out where you've been before, and go back there!" +msgstr "TRANSLATED" + +msgid "Find the bad branches and delete them. Keep only the best one." +msgstr "TRANSLATED" + +msgid "Find the last good commit" +msgstr "TRANSLATED" + +msgid "For nostalgic reasons, restore the very first backup you made!" +msgstr "TRANSLATED" + +msgid "For practice, make a commit where all files contain an \"x\"!" +msgstr "TRANSLATED" + +msgid "" +"For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful:\n" +"\n" +"ls\n" +"\n" +"echo content > file\n" +"\n" +"cat file\n" +"\n" +"mkdir dir\n" +"\n" +"Find the riddle in your current directory and put the answer into the file \"answer\"!" +msgstr "TRANSLATED" + +msgid "Friend" +msgstr "TRANSLATED" + +msgid "" +"Generally, git prune will be useful if you want to clean up some objects you made.\n" +"\n" +"Alternatively, you can also click the \"Reload\" button to restart a level." +msgstr "TRANSLATED" + +msgid "Get a someone else's version of the current timeline." +msgstr "TRANSLATED" + +msgid "Get someone else's version of the current timeline, and try to merge it into yours." +msgstr "TRANSLATED" + +msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." +msgstr "TRANSLATED" + +msgid "Get the first version of your essay, and make a new commit with it." +msgstr "TRANSLATED" + +msgid "Get the second commit from your teacher using git pull." +msgstr "TRANSLATED" + +msgid "Get your friend's repo using `clone`, change something, push it back." +msgstr "TRANSLATED" + +msgid "Getting the last version" +msgstr "TRANSLATED" + +msgid "Give the current timeline to someone else." +msgstr "TRANSLATED" + +msgid "Go back to where you were before" +msgstr "TRANSLATED" + +msgid "" +"Good job, you solved the level!\n" +"\n" +"Feel free to try a few more things or click 'Next level'." +msgstr "TRANSLATED" + +msgid "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`!" +msgstr "TRANSLATED" + +msgid "Got it!" +msgstr "TRANSLATED" + +msgid "Got the fourth line from your friend" +msgstr "TRANSLATED" + +msgid "Got the second line from your friend" +msgstr "TRANSLATED" + +msgid "Had blueberry pancakes with maple syrup for breakfast." +msgstr "TRANSLATED" + +msgid "Had muesli with oats and strawberries for breakfast." +msgstr "TRANSLATED" + +msgid "Had pancakes with strawberries for breakfast." +msgstr "TRANSLATED" + +msgid "Has 10 coins." +msgstr "TRANSLATED" + +msgid "Have a name configured." +msgstr "TRANSLATED" + +msgid "Have an email address configured." +msgstr "TRANSLATED" + +msgid "Helping each other" +msgstr "TRANSLATED" + +msgid "Here's a cool trick to go to the previous commit:" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +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" +"\n" +"Create and delete some tags!\n" +"\n" +"Make a timeline that's completely independent of the rest!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +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 "TRANSLATED" + +msgid "Here, both changes happened in one commit! Split them to be in two commits instead." +msgstr "TRANSLATED" + +msgid "Here, you already have two remotes configured! You can list them using `git remote`." +msgstr "TRANSLATED" + +msgid "" +"Here, you already have two remotes configured! You can list them using `git remote`.\n" +"\n" +"Fetch from both, and look at the suggestions.\n" +"\n" +"Then, make a new commit on top of your original one that introduces a compromise." +msgstr "TRANSLATED" + +msgid "Hide trees and blobs" +msgstr "TRANSLATED" + +msgid "I am precious" +msgstr "TRANSLATED" + +msgid "I pushed something broken" +msgstr "TRANSLATED" + +msgid "I wonder if you're more relaxed when you sleep in parallel timelines..." +msgstr "TRANSLATED" + +msgid "I'm really committed to our friendship! <3" +msgstr "TRANSLATED" + +msgid "I'm the left arm" +msgstr "TRANSLATED" + +msgid "I'm the left leg" +msgstr "TRANSLATED" + +msgid "I'm the right arm" +msgstr "TRANSLATED" + +msgid "I'm the right leg" +msgstr "TRANSLATED" + +msgid "" +"If you want to inspect your stash stack, use the command\n" +"\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" +"\n" +" git stash clear\n" +"\n" +"If you only want to discard a certain stash entry, you can use\n" +"\n" +" git stash drop \n" +"\n" +"Clear your stash stack!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "TRANSLATED" + +msgid "" +"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\n" +"\n" +" git stash branch \n" +"\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 "TRANSLATED" + +msgid "" +"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.\n" +"\n" +"If a file is modified, you'll need to reset these changes first/reset the files." +msgstr "TRANSLATED" + +msgid "Ignoring files" +msgstr "TRANSLATED" + +msgid "Improved version" +msgstr "TRANSLATED" + +msgid "In reality, in many cases, a lot of time agents work together to build a really good future together! :)" +msgstr "TRANSLATED" + +msgid "In the last main commit, the numbers file contains the numbers from 1 to 10." +msgstr "TRANSLATED" + +msgid "Index:" +msgstr "TRANSLATED" + +msgid "Initialize the time machine!" +msgstr "TRANSLATED" + +msgid "" +"Instead of pointing directly to objects, refs can also point to other refs!\n" +"\n" +"When that happens, they are called \"symbolic refs\". You can create or update a symbolic ref using\n" +"\n" +" git symbolic-ref \n" +"\n" +"Create a symbolic ref called \"refs/rainbow\"!" +msgstr "TRANSLATED" + +msgid "" +"Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry!\n" +"\n" +"Put the content you want in a file with a matching name, and then run\n" +"\n" +" git update-index \n" +"\n" +"This will create a new blob, and update the hash of the entry to that blob.\n" +"\n" +"Update an entry in the index!" +msgstr "TRANSLATED" + +msgid "Interesting!" +msgstr "TRANSLATED" + +msgid "Interior design" +msgstr "TRANSLATED" + +msgid "" +"Introduce yourself using\n" +"\n" +" git config --global user.name Firstname\n" +" git config --global user.email \"your@mail.com\"" +msgstr "TRANSLATED" + +msgid "Introduce yourself." +msgstr "TRANSLATED" + +msgid "Introduction" +msgstr "TRANSLATED" + +msgid "Is at work." +msgstr "TRANSLATED" + +msgid "Is holding a key in its beak." +msgstr "TRANSLATED" + +msgid "Is my phone upside down? App" +msgstr "TRANSLATED" + +msgid "Is on the ground." +msgstr "TRANSLATED" + +msgid "It's been blown out." +msgstr "TRANSLATED" + +msgid "It's burning!" +msgstr "TRANSLATED" + +msgid "It's holding a lollipop." +msgstr "TRANSLATED" + +msgid "It's sleeping." +msgstr "TRANSLATED" + +msgid "Jump to the commit, and update the index. Keep the current environment." +msgstr "TRANSLATED" + +msgid "Just woke up. Is hungry." +msgstr "TRANSLATED" + +msgid "Less-good version" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"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.\n" +"\n" +"You can create or update a ref with\n" +"\n" +" git update-ref refs/ \n" +"\n" +"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.\n" +"\n" +"Create refs that point to all objects in this repository!" +msgstr "TRANSLATED" + +msgid "" +"Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using\n" +"\n" +" git remote add [name] [URL]\n" +"\n" +"where `[name]` is an arbitrary, short name you pick for the remote.\n" +"\n" +"When you've done that, you can get all commits from that remote using\n" +"\n" +" git pull friend\n" +"\n" +"There's a letter for you!" +msgstr "TRANSLATED" + +msgid "Level description here!" +msgstr "TRANSLATED" + +msgid "Level name here!" +msgstr "TRANSLATED" + +msgid "Levels" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Line 1" +msgstr "TRANSLATED" + +msgid "Line 2" +msgstr "TRANSLATED" + +msgid "Line 2, gnihihi" +msgstr "TRANSLATED" + +msgid "Living dangerously" +msgstr "TRANSLATED" + +msgid "Look at your friend's suggestion, make a compromise, and push it back." +msgstr "TRANSLATED" + +msgid "Looking into the past" +msgstr "TRANSLATED" + +msgid "Looks happy. :)" +msgstr "TRANSLATED" + +msgid "Looks very hungry." +msgstr "TRANSLATED" + +msgid "Make a breakfast compromise in the 'main' branch." +msgstr "TRANSLATED" + +msgid "Make a change to the candle." +msgstr "TRANSLATED" + +msgid "Make a commit \\o/" +msgstr "TRANSLATED" + +msgid "Make a commit from the current index." +msgstr "TRANSLATED" + +msgid "Make a commit where all files are deleted ¯_(^^)/¯" +msgstr "TRANSLATED" + +msgid "Make a commit where all files contain \"x\"." +msgstr "TRANSLATED" + +msgid "Make a commit where you rename the file b to \"x\"." +msgstr "TRANSLATED" + +msgid "Make a commit, but faster!" +msgstr "TRANSLATED" + +msgid "Make a commit." +msgstr "TRANSLATED" + +msgid "Make a copy of a file." +msgstr "TRANSLATED" + +msgid "Make a new commit containing your current environment! Type in a description of what changed!" +msgstr "TRANSLATED" + +msgid "Make a new commit that reverts the changes of the specified commit." +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Make a second commit that only records a single change." +msgstr "TRANSLATED" + +msgid "Make a snapshot of the glass (a \"commit\")" +msgstr "TRANSLATED" + +msgid "Make changes to all files!" +msgstr "TRANSLATED" + +msgid "Make changes to all three objects, to form a logical sequence of events!" +msgstr "TRANSLATED" + +msgid "Make changes to the events in your current timeline, back to the commit you drag this to." +msgstr "TRANSLATED" + +msgid "Make parallel commits" +msgstr "TRANSLATED" + +msgid "Make sure that the child is happy." +msgstr "TRANSLATED" + +msgid "Make sure that the lion gets something to eat." +msgstr "TRANSLATED" + +msgid "Make sure the colors match your bed's color." +msgstr "TRANSLATED" + +msgid "Making backups" +msgstr "TRANSLATED" + +msgid "Merge the specified timeline into yours. If necessary, will create a merge commit." +msgstr "TRANSLATED" + +msgid "Merging" +msgstr "TRANSLATED" + +msgid "Merging popped stash" +msgstr "TRANSLATED" + +msgid "Merging timelines" +msgstr "TRANSLATED" + +msgid "Move the branch you're on to the specified commit." +msgstr "TRANSLATED" + +msgid "Moving branches around" +msgstr "TRANSLATED" + +msgid "Moving through time" +msgstr "TRANSLATED" + +msgid "My first parent's parents has to be the same as my second parent's parent." +msgstr "TRANSLATED" + +msgid "My master password is a1b2c3d4e5" +msgstr "TRANSLATED" + +msgid "" +"Neat! It even still looks a bit comfortable!\n" +"\n" +"You head out, eager for your first lesson at time travel school!" +msgstr "TRANSLATED" + +msgid "Next level" +msgstr "TRANSLATED" + +msgid "Nice stash you got there! :)" +msgstr "TRANSLATED" + +msgid "Nice to meet you!" +msgstr "TRANSLATED" + +msgid "Nice!" +msgstr "TRANSLATED" + +msgid "" +"Nice!\n" +"\n" +"Can you make a different tree? Modify the index, then call git write-tree again!" +msgstr "TRANSLATED" + +msgid "Nice! See that little owl squirrel that appeared? It will be your companion, and always show you where you are in time!" +msgstr "TRANSLATED" + +msgid "Nice! You can try making some additional commits. When you feel comfortable, click on \"Next Level\"." +msgstr "TRANSLATED" + +msgid "Nice! You tagged your first commit :)" +msgstr "TRANSLATED" + +msgid "No sleep required" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +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 "TRANSLATED" + +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 "TRANSLATED" + +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 "TRANSLATED" + +msgid "Oh My Git!" +msgstr "TRANSLATED" + +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" +"\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 "TRANSLATED" + +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 "TRANSLATED" + +msgid "Okay!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"Omnomnom!\n" +"\n" +"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. :)" +msgstr "TRANSLATED" + +msgid "On second thought, maybe you even prefer the ice cream timeline to the main one? :)" +msgstr "TRANSLATED" + +msgid "" +"On the command line, you can easily delete all files ending in -web using this command:\n" +"\n" +" rm *web" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Please enter a value:" +msgstr "TRANSLATED" + +msgid "One step after another" +msgstr "TRANSLATED" + +msgid "Only add one of these changes!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +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 "TRANSLATED" + +msgid "Order all tree branches into one and move the main branch ref" +msgstr "TRANSLATED" + +msgid "Original score by winniehell" +msgstr "TRANSLATED" + +msgid "" +"Other times, you might want to rename a file in the next commit. Use\n" +"\n" +" git mv [file] [new name]\n" +"\n" +"for that. The effect is very similar as if you had created a copy with a new name, and removed the old version." +msgstr "TRANSLATED" + +msgid "Pick the timeline that's clearer, and make the alarm go off!" +msgstr "TRANSLATED" + +msgid "Pop from Stash" +msgstr "TRANSLATED" + +msgid "Problems" +msgstr "TRANSLATED" + +msgid "Pull from the remote." +msgstr "TRANSLATED" + +msgid "Put the events in your current timeline on top of the specified one." +msgstr "TRANSLATED" + +msgid "Quit" +msgstr "TRANSLATED" + +msgid "Rebasing" +msgstr "TRANSLATED" + +msgid "Reload" +msgstr "TRANSLATED" + +msgid "Remote Tags" +msgstr "TRANSLATED" + +msgid "Remotes" +msgstr "TRANSLATED" + +msgid "Remove all changes in your local files!" +msgstr "TRANSLATED" + +msgid "Remove all spider webs." +msgstr "TRANSLATED" + +msgid "Removing tags" +msgstr "TRANSLATED" + +msgid "Rename a file in the next commit" +msgstr "TRANSLATED" + +msgid "Rename a file." +msgstr "TRANSLATED" + +msgid "Rename the bed into something else, and give it a new description!" +msgstr "TRANSLATED" + +msgid "Rename the remote with the typo (using `git remote rename [old name] [new name]`)" +msgstr "TRANSLATED" + +msgid "Reorder the commits to dress yourself in the correct way" +msgstr "TRANSLATED" + +msgid "Reordering events" +msgstr "TRANSLATED" + +msgid "Repeat the specified action on top of your current timeline." +msgstr "TRANSLATED" + +msgid "Repo name" +msgstr "TRANSLATED" + +msgid "Reset changes in a local file." +msgstr "TRANSLATED" + +msgid "Reset the changes in the green and blue candles!" +msgstr "TRANSLATED" + +msgid "Reset the index version of a file to the version in the commit you're on." +msgstr "TRANSLATED" + +msgid "Resetting files in the index" +msgstr "TRANSLATED" + +msgid "Restore a deleted file" +msgstr "TRANSLATED" + +msgid "Restore a file from the past" +msgstr "TRANSLATED" + +msgid "Restore sisterly peace." +msgstr "TRANSLATED" + +msgid "Restore the essay to contain \"important content\"" +msgstr "TRANSLATED" + +msgid "Restore the version from the last commit." +msgstr "TRANSLATED" + +msgid "Right! Having each change in its own commit makes it easier to understand what's going on! Let's learn how to do that!" +msgstr "TRANSLATED" + +msgid "SPECIAL" +msgstr "TRANSLATED" + +msgid "Same for its child! \\o/" +msgstr "TRANSLATED" + +msgid "Sandbox" +msgstr "TRANSLATED" + +msgid "Sandbox with a remote" +msgstr "TRANSLATED" + +msgid "Sandbox with three commits" +msgstr "TRANSLATED" + +msgid "Save" +msgstr "TRANSLATED" + +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 which past commit you were on before. How can you find out?\n" +"\n" +"There's a convenient command that shows you all the places your `HEAD` has pointed to in the past:\n" +"\n" +" git reflog" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Set your email address." +msgstr "TRANSLATED" + +msgid "" +"Set your name.\n" +"\n" +"(Will not change anything outside of this game.)" +msgstr "TRANSLATED" + +msgid "Show what changed in the commit." +msgstr "TRANSLATED" + +msgid "" +"So a tree describes a directory structure at a specific point in time.\n" +"\n" +"It would be nice if we could remember when that state existed, and who authored it, right?\n" +"\n" +"Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using\n" +"\n" +" git commit-tree -m \"Description of your commit\"\n" +"\n" +"Make a commit from the tree in this repository!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "So the tree has exactly one child, and it is a tree!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"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.\n" +"\n" +"This allows you to have smaller commits, that describe better what you changed!\n" +"\n" +"The command for this is the same - git add!" +msgstr "TRANSLATED" + +msgid "" +"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!\n" +"\n" +"What happens if you have already update the index, like in file c? You have to reset the index first!" +msgstr "TRANSLATED" + +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." +msgstr "TRANSLATED" + +msgid "" +"Sometimes you want to merge two commits, but a merge conflict occurs that you currently don't want to resolve.\n" +"\n" +"In these situations you can abort the merge to merge later. Use\n" +"git merge --abort\n" +"when you are in a merge process.\n" +"\n" +"Try to merge both commits and abort the merge afterwards." +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"Sometimes, you might want to record the order in which things changed, instead of making a single commit.\n" +"\n" +"What happened here? Make two commits from the changes (using the \"add\" card), in an order that makes sense!" +msgstr "TRANSLATED" + +msgid "Split a commit!" +msgstr "TRANSLATED" + +msgid "Start looking for the commit where things got bad." +msgstr "TRANSLATED" + +msgid "Stash" +msgstr "TRANSLATED" + +msgid "Stashed changes are in a new branch! :)" +msgstr "TRANSLATED" + +msgid "Stashing" +msgstr "TRANSLATED" + +msgid "State that the current commit is bad! When you're automatically transferred, keep playing the good and bad cards!" +msgstr "TRANSLATED" + +msgid "State that the current commit is good! When you're automatically transferred, keep playing the good and bad cards!" +msgstr "TRANSLATED" + +msgid "Step by step" +msgstr "TRANSLATED" + +msgid "Suddenly, you fall down, splash into stinking water, and are eaten by an alligator." +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Support us! (Open two browser tabs)" +msgstr "TRANSLATED" + +msgid "Sure, I'll install it!" +msgstr "TRANSLATED" + +msgid "Tagging later" +msgstr "TRANSLATED" + +msgid "Tags" +msgstr "TRANSLATED" + +msgid "Text here" +msgstr "TRANSLATED" + +msgid "Thanks!" +msgstr "TRANSLATED" + +msgid "" +"That chicken is running around a lot, and changing often. We don't want to have it in our commits.\n" +"\n" +"Add it to the file .gitignore, and try using `git add .`!" +msgstr "TRANSLATED" + +msgid "The Index" +msgstr "TRANSLATED" + +msgid "The ball is now touching the book." +msgstr "TRANSLATED" + +msgid "The bike shed should be ???" +msgstr "TRANSLATED" + +msgid "The bike shed should be blue" +msgstr "TRANSLATED" + +msgid "The bike shed should be green" +msgstr "TRANSLATED" + +msgid "The bikeshed should be ???" +msgstr "TRANSLATED" + +msgid "The bikeshed should be blue" +msgstr "TRANSLATED" + +msgid "The bikeshed should be green" +msgstr "TRANSLATED" + +msgid "The blue animal represents a concept known as the \"HEAD pointer\" in Git: It shows you which commit is the current one." +msgstr "TRANSLATED" + +msgid "The book has fallen over." +msgstr "TRANSLATED" + +msgid "The candle has been blown out." +msgstr "TRANSLATED" + +msgid "The candle is burning with a blue flame." +msgstr "TRANSLATED" + +msgid "The command line" +msgstr "TRANSLATED" + +msgid "The commit message of that commit is \"More numbers\"." +msgstr "TRANSLATED" + +msgid "The commit with the typo is not part of the main branch anymore." +msgstr "TRANSLATED" + +msgid "" +"The events and timelines you see are always only what your own time machine knows about!\n" +"\n" +"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.\n" +"\n" +"Then, add another event on top (what does Sam have for dinner?), and push the result, to transfer it back to your sidekick!\n" +"\n" +"You can only ever manipulate things in your own time machine (the one on the bottom)." +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "The friend got a fifth line from you" +msgstr "TRANSLATED" + +msgid "The friend got a third line from you" +msgstr "TRANSLATED" + +msgid "The glass is full of water." +msgstr "TRANSLATED" + +msgid "The index is really useful, because it allows us to be precise about which changes we want to include in each commit!" +msgstr "TRANSLATED" + +msgid "The remote with the typo is gone." +msgstr "TRANSLATED" + +msgid "The team's main branch no longer contains the bad thing." +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"There is a time-saving trick, where instead of a plain git commit, you can use\n" +"\n" +" git commit -a\n" +"\n" +"This will automatically add all changes you made to local files! Very convenient." +msgstr "TRANSLATED" + +msgid "" +"There's a simple command to remove all objects that are not referenced by anything:\n" +"\n" +" git prune\n" +"\n" +"Remove all blobs in this repository." +msgstr "TRANSLATED" + +msgid "" +"There's another way to add an entry to the index directly:\n" +"\n" +" git update-index --add --cacheinfo ,,\n" +"\n" +"The first three numbers of the mode describe the type of the entry, \"100\" is a regular file.\n" +"\n" +"The second three number describe the permissions. Only \"644\" (non-executable) and \"755\" (executable) are supported.\n" +"\n" +"You can insert the hash of an object into the terminal by right-clicking on it! :)" +msgstr "TRANSLATED" + +msgid "These are your cards! Drag them to highlighted areas to play them!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "This blob really should not exist" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "This is a virus" +msgstr "TRANSLATED" + +msgid "This is an empty sandbox you can play around in." +msgstr "TRANSLATED" + +msgid "This is not really a good test for the winning condition..." +msgstr "TRANSLATED" + +msgid "" +"This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3\n" +"\n" +"You can interact with the repository labelled \"yours\" by typing Bash commands in the terminal below! The visualization will show you its internal status.\n" +"\n" +"Let's get started by initializing an empty Git repository in the current directory by typing:\n" +"\n" +" git init" +msgstr "TRANSLATED" + +msgid "This is the time machine of another person! To interact with it, you need special commands!" +msgstr "TRANSLATED" + +msgid "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 "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"This piggy bank belongs to the big sister.\n" +"It contains 10 coins." +msgstr "TRANSLATED" + +msgid "" +"This piggy bank belongs to the big sister.\n" +"It is empty." +msgstr "TRANSLATED" + +msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!" +msgstr "TRANSLATED" + +msgid "This will insert the commit's unique identifier!" +msgstr "TRANSLATED" + +msgid "Tip!" +msgstr "TRANSLATED" + +msgid "" +"Tip: You can also use a command like this to create a blob in a single line:\n" +"\n" +" echo \"awesome content\" | git hash-object -w --stdin\n" +"\n" +"Did you already notice that you can drag and drop all objects? :)" +msgstr "TRANSLATED" + +msgid "To checkout a specific commit, type `git checkout`, then a space, and then right click on the commit you want!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"To remove an entry from the index, use a command like this:\n" +"\n" +" git update-index --force-remove \n" +"\n" +"Remove all entries from the index!" +msgstr "TRANSLATED" + +msgid "To the survey /o/" +msgstr "TRANSLATED" + +msgid "To travel to a branch, type `git checkout name_of_the_branch`" +msgstr "TRANSLATED" + +msgid "Toggle music" +msgstr "TRANSLATED" + +msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit" +msgstr "TRANSLATED" + +msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit." +msgstr "TRANSLATED" + +msgid "" +"Trees can also point to other trees! This way, they can describe nested directory structures.\n" +"\n" +"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.\n" +"\n" +"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." +msgstr "TRANSLATED" + +msgid "Try typing git init into the black terminal below, and pressing the enter key!" +msgstr "TRANSLATED" + +msgid "Undo a bad commit" +msgstr "TRANSLATED" + +msgid "Unexpected Roommates" +msgstr "TRANSLATED" + +msgid "Update" +msgstr "TRANSLATED" + +msgid "Update files in the index" +msgstr "TRANSLATED" + +msgid "Update the index version of the file to its current real content." +msgstr "TRANSLATED" + +msgid "Updating files in the index" +msgstr "TRANSLATED" + +msgid "Very useful!" +msgstr "TRANSLATED" + +msgid "Walking down the Main Lane." +msgstr "TRANSLATED" + +msgid "Walking down the Side Lane." +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"We're so glad to have you!\n" +"\n" +"Git can help you fix problems in the past! It allows you to collaborate with other students of time travel! It's really powerful, and it's really popular! I'll see you for your first lesson tomorrow!" +msgstr "TRANSLATED" + +msgid "Welcome to time travel school!" +msgstr "TRANSLATED" + +msgid "Welcome to time travel school! :) I'll see you for your first class tomorrow!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "Welcome!" +msgstr "TRANSLATED" + +msgid "Well done :)" +msgstr "TRANSLATED" + +msgid "" +"Well done!\n" +"\n" +"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!\n" +"\n" +"But first, let's look at some basics!\n" +"\n" +"(Click \"Next Level\" as soon as you're ready!)" +msgstr "TRANSLATED" + +msgid "Well done! :) The only problem is that you now have to walk all the way back home, again..." +msgstr "TRANSLATED" + +msgid "Well done! Try travelling between the commits using git checkout, so you can look at their contents again!" +msgstr "TRANSLATED" + +msgid "Whatever..." +msgstr "TRANSLATED" + +msgid "When Things Go Wrong" +msgstr "TRANSLATED" + +msgid "" +"When using the commit-tree command, you can optionally specify a parent:\n" +"\n" +" git commit-tree -m \"Description\" -p \n" +"\n" +"Make a string of three commits!\n" +"\n" +"Hint: You'll need a tree object. What could be the easiest way to obtain one?" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"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! :)\n" +"\n" +"What happens when you try pointing the symbolic ref directly to the blob using git update-ref?\n" +"\n" +"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!\n" +"\n" +"Weird, huh?" +msgstr "TRANSLATED" + +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" +"\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 "TRANSLATED" + +msgid "" +"When you want to re-apply your changes but you already continued working on your file, you might get a merge conflict! Let's practice this situation.\n" +"Pop the changes from the stash with\n" +"\n" +" git stash pop\n" +"\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 "TRANSLATED" + +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" +"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 "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs!\n" +"\n" +"You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :)\n" +"\n" +"Everything else is just convention and high-level commands that make interacting with the objects more convenient.\n" +"\n" +"We haven't covered:\n" +"\n" +"tag objects (they are the fourth object type - a bit like refs with a description and an author)\n" +"\n" +"configuration (allows you to specify remote repositories, for example)\n" +"\n" +"working with local files (which is, uh, arguably pretty important :P)\n" +"\n" +"Thanks for playing! You're welcome to check out the \"puzzle\" levels in the dropdown, some of them are more advanced!" +msgstr "TRANSLATED" + +msgid "Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations..." +msgstr "TRANSLATED" + +msgid "Workflows" +msgstr "TRANSLATED" + +msgid "Working together" +msgstr "TRANSLATED" + +msgid "Yay!" +msgstr "TRANSLATED" + +msgid "Yay, you got your changes back! :)" +msgstr "TRANSLATED" + +msgid "Yellow brick road" +msgstr "TRANSLATED" + +msgid "You aborted to merge?" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"You ate a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "TRANSLATED" + +msgid "You can also go back two commits by typing, for example:" +msgstr "TRANSLATED" + +msgid "You can drag these around with your mouse!" +msgstr "TRANSLATED" + +msgid "" +"You can point refs to a new location using the same command you use to create them:\n" +"\n" +" git update-ref refs/ \n" +"\n" +"As an exercise, make all refs in this repository point to the tree object!" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You ate a donut." +msgstr "TRANSLATED" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "TRANSLATED" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You have a donut." +msgstr "TRANSLATED" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You drank coffee.\n" +"\n" +"You do not have a donut." +msgstr "TRANSLATED" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You have coffee.\n" +"\n" +"You do not have a donut." +msgstr "TRANSLATED" + +msgid "You drink coffee." +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "You go to the birthday party!" +msgstr "TRANSLATED" + +msgid "You go to the concert!" +msgstr "TRANSLATED" + +msgid "" +"You have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "TRANSLATED" + +msgid "You hear a knock on the door." +msgstr "TRANSLATED" + +msgid "You jump over an manhole in the walkway, and arrive at school on time." +msgstr "TRANSLATED" + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are NOT wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are NOT wearing shoes." +msgstr "TRANSLATED" + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are NOT wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "TRANSLATED" + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "TRANSLATED" + +msgid "" +"You just woke up.\n" +"\n" +"You are wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "TRANSLATED" + +msgid "" +"You just woke up.\n" +"\n" +"You are wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "TRANSLATED" + +msgid "You leave your house and start walking to school." +msgstr "TRANSLATED" + +msgid "You still have your key." +msgstr "TRANSLATED" + +msgid "You tried to merge?" +msgstr "TRANSLATED" + +msgid "You wake up." +msgstr "TRANSLATED" + +msgid "You walk on the left side of the street." +msgstr "TRANSLATED" + +msgid "You walk on the right side of the street." +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"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.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "TRANSLATED" + +msgid "You wrap the birthday present, and grab your concert ticket." +msgstr "TRANSLATED" + +msgid "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." +msgstr "TRANSLATED" + +msgid "" +"You're still pretty confused by everything that's going on. The next day, you decide to enroll in time travel school!\n" +"\n" +"Your time travel teacher welcomes you: \"Hello there! Wanna tell us your name?\"" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "" +"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! :/\n" +"\n" +"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!" +msgstr "TRANSLATED" + +msgid "" +"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\"!\n" +"\n" +"No problem, you can use the checkout card to restore your essay from an older commit!" +msgstr "TRANSLATED" + +msgid "Your first commit" +msgstr "TRANSLATED" + +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 "TRANSLATED" + +msgid "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`." +msgstr "TRANSLATED" + +msgid "Your pocket is empty." +msgstr "TRANSLATED" + +msgid "Your proposal is acceptable for friend1." +msgstr "TRANSLATED" + +msgid "Your proposal is acceptable for friend2." +msgstr "TRANSLATED" + +msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" +msgstr "TRANSLATED" + +msgid "Yum, that sounds like a good breakfast!" +msgstr "TRANSLATED" + +msgid "`git checkout HEAD^`" +msgstr "TRANSLATED" + +msgid "`git checkout HEAD~2`" +msgstr "TRANSLATED" + +msgid "and this should happen after that" +msgstr "TRANSLATED" + +msgid "bad version" +msgstr "TRANSLATED" + +msgid "blabber" +msgstr "TRANSLATED" + +msgid "" +"blarg\n" +"blaaaargh" +msgstr "TRANSLATED" + +msgid "by bleeptrack & blinry" +msgstr "TRANSLATED" + +msgid "dir" +msgstr "TRANSLATED" + +msgid "event 1" +msgstr "TRANSLATED" + +msgid "event 2" +msgstr "TRANSLATED" + +msgid "event 3" +msgstr "TRANSLATED" + +msgid "file 1" +msgstr "TRANSLATED" + +msgid "file 2" +msgstr "TRANSLATED" + +msgid "file 3" +msgstr "TRANSLATED" + +msgid "file A" +msgstr "TRANSLATED" + +msgid "file B" +msgstr "TRANSLATED" + +msgid "file C" +msgstr "TRANSLATED" + +msgid "filename" +msgstr "TRANSLATED" + +msgid "good version" +msgstr "TRANSLATED" + +msgid "hello" +msgstr "TRANSLATED" + +msgid "important" +msgstr "TRANSLATED" + +msgid "important content" +msgstr "TRANSLATED" + +msgid "label" +msgstr "TRANSLATED" + +msgid "new content" +msgstr "TRANSLATED" + +msgid "object_id" +msgstr "TRANSLATED" + +msgid "root" +msgstr "TRANSLATED" + +msgid "something" +msgstr "TRANSLATED" + +msgid "something else" +msgstr "TRANSLATED" + +msgid "" +"this is fine\n" +"\n" +"?\n" +"\n" +"?\n" +"\n" +"?" +msgstr "TRANSLATED" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"?\n" +"\n" +"?" +msgstr "TRANSLATED" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"this is very bad\n" +"\n" +"?" +msgstr "TRANSLATED" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"this is very bad\n" +"\n" +"this is fine again" +msgstr "TRANSLATED" + +msgid "this is some other change" +msgstr "TRANSLATED" + +msgid "this should happen first" +msgstr "TRANSLATED" + +msgid "title" +msgstr "TRANSLATED" + +msgid "toothbrush sharing" +msgstr "TRANSLATED" + +msgid "v1 tag in your repo" +msgstr "TRANSLATED" + +msgid "v2 tag in the remote" +msgstr "TRANSLATED" + +msgid "v2 tag in your repo" +msgstr "TRANSLATED" + +msgid "very hungry" +msgstr "TRANSLATED" + +msgid "world" +msgstr "TRANSLATED" + +msgid "~ List of current students ~" +msgstr "TRANSLATED" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"(I still need to write this.)" +msgstr "TRANSLATED" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"- So that I can undo mistakes" +msgstr "TRANSLATED" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"- So that I can undo mistakes\n" +"- To track my projects over time" +msgstr "TRANSLATED" + +msgid "intro" +msgstr "TRANSLATED" + +msgid "files" +msgstr "TRANSLATED" + +msgid "branches" +msgstr "TRANSLATED" + +msgid "merge" +msgstr "TRANSLATED" + +msgid "index" +msgstr "TRANSLATED" + +msgid "remotes" +msgstr "TRANSLATED" + +msgid "changing-the-past" +msgstr "TRANSLATED" + +msgid "shit-happens" +msgstr "TRANSLATED" + +msgid "workflows" +msgstr "TRANSLATED" + +msgid "bisect" +msgstr "TRANSLATED" + +msgid "stash" +msgstr "TRANSLATED" + +msgid "tags" +msgstr "TRANSLATED" + +msgid "sandbox" +msgstr "TRANSLATED" diff --git a/locale/en.po b/locale/en.po new file mode 100644 index 00000000..5a687532 --- /dev/null +++ b/locale/en.po @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Project-Id-Version: oh-my-git\n" + +msgid "intro" +msgstr "Introduction" + +msgid "files" +msgstr "Files" + +msgid "branches" +msgstr "Branches" + +msgid "merge" +msgstr "Merging" + +msgid "index" +msgstr "The Index" + +msgid "remotes" +msgstr "Remotes" + +msgid "changing-the-past" +msgstr "Changing the Past" + +msgid "shit-happens" +msgstr "When Things Go Wrong" + +msgid "workflows" +msgstr "Workflows" + +msgid "bisect" +msgstr "Bisect" + +msgid "stash" +msgstr "Stash" + +msgid "tags" +msgstr "Tags" + +msgid "sandbox" +msgstr "Sandbox" + +msgid "ru" +msgstr "Русский" + +msgid "br" +msgstr "Brazil" + +msgid "en" +msgstr "English" diff --git a/locale/messages.pot b/locale/messages.pot new file mode 100644 index 00000000..c3293908 --- /dev/null +++ b/locale/messages.pot @@ -0,0 +1,2369 @@ +msgid "" +msgstr "" +"Project-Id-Version: oh-my-git\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" + +msgid "ru" +msgstr "" + +msgid "br" +msgstr "" + +msgid "en" +msgstr "" + +msgid "\"~ Why do you want to learn how to use time machines? ~\"" +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 "yellow" +msgstr "" + +msgid "very bad" +msgstr "" + +msgid "Flour" +msgstr "" + +msgid "Salt" +msgstr "" + +msgid "burning" +msgstr "" + +msgid "important content" +msgstr "" + +msgid "gnihihi" +msgstr "" + +msgid "blurbblubb" +msgstr "" + +msgid "You ate.*baguette" +msgstr "" + +msgid "You drank.*coffee" +msgstr "" + +msgid "You ate.*donut" +msgstr "" + +msgid "10 coins" +msgstr "" + +msgid "(no description)" +msgstr "" + +msgid "- 200g Sugar" +msgstr "" + +msgid "- 4 Apples" +msgstr "" + +msgid "- 500g Flour" +msgstr "" + +msgid "- Pinch of Salt" +msgstr "" + +msgid "" +"- Sam\n" +"- Alex" +msgstr "" + +msgid "A big spider web sticks above your bed." +msgstr "" + +msgid "A bottle, containing a clear liquid." +msgstr "" + +msgid "A candle, burning with a blue flame." +msgstr "" + +msgid "A comfortable, yellow bed with yellow cushions." +msgstr "" + +msgid "" +"A commit can have multiple parents! You can specify the -p option multiple times, like this:\n" +"\n" +" git commit-tree -m \"Description\" -p -p \n" +"\n" +"Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them." +msgstr "" + +msgid "A cozy bed." +msgstr "" + +msgid "A hammer, balancing on its handle." +msgstr "" + +msgid "A new day is starting" +msgstr "" + +msgid "A really big yellow shelf." +msgstr "" + +msgid "" +"A small child.\n" +"It really loves cats!" +msgstr "" + +msgid "A small, but heavy glass ball." +msgstr "" + +msgid "A smoke detector. It's absolutely silent." +msgstr "" + +msgid "A thin book, that's standing upright." +msgstr "" + +msgid "A tiny spider web is next to your window." +msgstr "" + +msgid "A white sugar cube." +msgstr "" + +msgid "A yellow cozy bed." +msgstr "" + +msgid "A yellow cupboard with lots of drawers." +msgstr "" + +msgid "A young girl with brown, curly hair." +msgstr "" + +msgid "Aaah, let's merge later..." +msgstr "" + +msgid "Abort a merge" +msgstr "" + +msgid "Abort the current merge attempt, and reconstruct the previous state." +msgstr "" + +msgid "" +"Actually, you decide that you don't need any sleep.\n" +"\n" +"Because of that, you won't require a bed, and can build some other piece of furniture from the wood!" +msgstr "" + +msgid "Add a remote that points to ../friend." +msgstr "" + +msgid "Add another line to form.txt!" +msgstr "" + +msgid "Add another line to form2_really_final.txt!" +msgstr "" + +msgid "Add new files to the index" +msgstr "" + +msgid "Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b!" +msgstr "" + +msgid "Add the candle." +msgstr "" + +msgid "Add two more pieces of furniture" +msgstr "" + +msgid "Add your name to the list of students" +msgstr "" + +msgid "Adding a remote" +msgstr "" + +msgid "Adding changes step by step" +msgstr "" + +msgid "" +"After carefully building the index we want, it would be nice to save a permanent snapshot of it, right?\n" +"\n" +"This is what the second type of objects is for: trees! You can convert the index into a tree using\n" +"\n" +" git write-tree\n" +"\n" +"Try it! :)" +msgstr "" + +msgid "Again, initialize your time machine!" +msgstr "" + +msgid "All clear! :)" +msgstr "" + +msgid "An extra thick spider web is right beside your door." +msgstr "" + +msgid "And a third one." +msgstr "" + +msgid "" +"And finally, to delete a ref, use\n" +"\n" +" git update-ref -d refs/\n" +"\n" +"Delete all refs! :P (Well, except for HEAD. HEAD is special.)" +msgstr "" + +msgid "And make a commit!" +msgstr "" + +msgid "And make a commit." +msgstr "" + +msgid "And make a second commit!" +msgstr "" + +msgid "And the history has not been modified." +msgstr "" + +msgid "And use `git push` to send it to your teacher!" +msgstr "" + +msgid "Apple Pie:" +msgstr "" + +msgid "" +"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\n" +"\n" +" git read-tree \n" +"\n" +"For , you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal!\n" +"\n" +"Try reading some of the trees in this repository into the index!" +msgstr "" + +msgid "" +"At its core, Git is very simple. It stores \"objects\", which are basically files identified by an \"identifier\" (short: ID).\n" +"\n" +"There are four types of objects: blobs, trees, commits, and tags. The simplest type is a \"blob\", which is just a piece of text.\n" +"\n" +"Let's create some blobs! To do that, create a file with the desired content, and then use\n" +"\n" +" git hash-object -w \n" +"\n" +"The flag -w means \"write\", and tells Git to actually write the new blob to the disk.\n" +"\n" +"Create three new blobs!" +msgstr "" + +msgid "Awesome!" +msgstr "" + +msgid "Back" +msgstr "" + +msgid "Be on a merge commit." +msgstr "" + +msgid "Because you're kind of late, you start running. Someone throws a piano out of their windows, and it smashes you." +msgstr "" + +msgid "Best version" +msgstr "" + +msgid "Bisect" +msgstr "" + +msgid "" +"Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name!\n" +"\n" +"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.\n" +"\n" +"The most convenient option to add an entry to the index is via an existing file:\n" +"\n" +" echo \"my content\" > file\n" +" git update-index --add file\n" +"\n" +"Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like \"directory/file\"?" +msgstr "" + +msgid "Both you and your friend have been working on the file, and want to sync up!" +msgstr "" + +msgid "Branch from stash" +msgstr "" + +msgid "Branches" +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 "Branches grow with you!" +msgstr "" + +msgid "Brazil" +msgstr "" + +msgid "Build a situation where you consumed a baguette, a coffee, and a donut." +msgstr "" + +msgid "But make sure you keep your bed!" +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 "Cards!" +msgstr "" + +msgid "Change the contents of the glass!" +msgstr "" + +msgid "Changing the Past" +msgstr "" + +msgid "Checking out files from the index" +msgstr "" + +msgid "Clear the Stash" +msgstr "" + +msgid "Click on these files to edit them!" +msgstr "" + +msgid "Cloning a repo" +msgstr "" + +msgid "Commit your local changes." +msgstr "" + +msgid "Commit your result." +msgstr "" + +msgid "Complete the goal of this level" +msgstr "" + +msgid "" +"Construct a chain of three trees, which don't point to anything else.\n" +"\n" +"This is hard! The git mktree command might be useful." +msgstr "" + +msgid "Continue the current rebasing process." +msgstr "" + +msgid "Contradictions" +msgstr "" + +msgid "Cool!" +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 "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 "Create a new branch at your current location." +msgstr "" + +msgid "Create a new file." +msgstr "" + +msgid "Create two trees pointing to the same blob!" +msgstr "" + +msgid "Create your own copy of someone else's repo." +msgstr "" + +msgid "Creating branches" +msgstr "" + +msgid "Creating tags" +msgstr "" + +msgid "Delete a branch." +msgstr "" + +msgid "Delete a file both in the working directory, as well as the index." +msgstr "" + +msgid "Delete a file in the next commit" +msgstr "" + +msgid "Delete a file." +msgstr "" + +msgid "" +"Delete all objects in this repository using git commands only!\n" +"\n" +"Useful commands:\n" +"\n" +" git prune\n" +" git reflog expire" +msgstr "" + +msgid "Delete the remote you don't want to keep (using `git remote remove [remote]`)" +msgstr "" + +msgid "Deleting and renaming a remote" +msgstr "" + +msgid "Deleting branches" +msgstr "" + +msgid "Description" +msgstr "" + +msgid "Did you clear stash stack?" +msgstr "" + +msgid "Did you clear your stash stack?" +msgstr "" + +msgid "Did you create a new branch from the stashed changes?" +msgstr "" + +msgid "Did you create a new tag?" +msgstr "" + +msgid "Did you drink a coffee on the coffee branch?" +msgstr "" + +msgid "Did you eat a baguette on the baguette branch?" +msgstr "" + +msgid "Did you eat a donut on the donut branch?" +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 "Did you pop the changes from the stash stack?" +msgstr "" + +msgid "Did you remove all tags?" +msgstr "" + +msgid "Did you resolve the conflict and commit?" +msgstr "" + +msgid "Did you stash the current changes?" +msgstr "" + +msgid "Display a log of where the ref pointed to in the past." +msgstr "" + +msgid "Don't you immediately feel more at home?" +msgstr "" + +msgid "Drag this card into the empty space above to initialize the time machine!" +msgstr "" + +msgid "Drag this card to a commit or to a branch to travel to it!" +msgstr "" + +msgid "Draw new cards" +msgstr "" + +msgid "Empty sandbox" +msgstr "" + +msgid "Enter the time machine" +msgstr "" + +msgid "Feel free to reset the level and try the other strategy! Which one do you like better?" +msgstr "" + +msgid "Fetching from remotes" +msgstr "" + +msgid "File a contains \"x\" in the last main commit." +msgstr "" + +msgid "File b contains \"x\" in the last main commit." +msgstr "" + +msgid "File c contains \"x\" in the last main commit." +msgstr "" + +msgid "Files" +msgstr "" + +msgid "Fill out the enrollment form, and commit it!" +msgstr "" + +msgid "Find out where you've been before, and go back there!" +msgstr "" + +msgid "Find the bad branches and delete them. Keep only the best one." +msgstr "" + +msgid "Find the last good commit" +msgstr "" + +msgid "For nostalgic reasons, restore the very first backup you made!" +msgstr "" + +msgid "For practice, make a commit where all files contain an \"x\"!" +msgstr "" + +msgid "" +"For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful:\n" +"\n" +"ls\n" +"\n" +"echo content > file\n" +"\n" +"cat file\n" +"\n" +"mkdir dir\n" +"\n" +"Find the riddle in your current directory and put the answer into the file \"answer\"!" +msgstr "" + +msgid "Friend" +msgstr "" + +msgid "" +"Generally, git prune will be useful if you want to clean up some objects you made.\n" +"\n" +"Alternatively, you can also click the \"Reload\" button to restart a level." +msgstr "" + +msgid "Get a someone else's version of the current timeline." +msgstr "" + +msgid "Get someone else's version of the current timeline, and try to merge it into yours." +msgstr "" + +msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." +msgstr "" + +msgid "Get the first version of your essay, and make a new commit with it." +msgstr "" + +msgid "Get the second commit from your teacher using git pull." +msgstr "" + +msgid "Get your friend's repo using `clone`, change something, push it back." +msgstr "" + +msgid "Getting the last version" +msgstr "" + +msgid "Give the current timeline to someone else." +msgstr "" + +msgid "Go back to where you were before" +msgstr "" + +msgid "" +"Good job, you solved the level!\n" +"\n" +"Feel free to try a few more things or click 'Next level'." +msgstr "" + +msgid "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`!" +msgstr "" + +msgid "Got it!" +msgstr "" + +msgid "Got the fourth line from your friend" +msgstr "" + +msgid "Got the second line from your friend" +msgstr "" + +msgid "Had blueberry pancakes with maple syrup for breakfast." +msgstr "" + +msgid "Had muesli with oats and strawberries for breakfast." +msgstr "" + +msgid "Had pancakes with strawberries for breakfast." +msgstr "" + +msgid "Has 10 coins." +msgstr "" + +msgid "Have a name configured." +msgstr "" + +msgid "Have an email address configured." +msgstr "" + +msgid "Helping each other" +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" +"\n" +"Create and delete some tags!\n" +"\n" +"Make a timeline that's completely independent of the rest!" +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 "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 "Here, both changes happened in one commit! Split them to be in two commits instead." +msgstr "" + +msgid "Here, you already have two remotes configured! You can list them using `git remote`." +msgstr "" + +msgid "" +"Here, you already have two remotes configured! You can list them using `git remote`.\n" +"\n" +"Fetch from both, and look at the suggestions.\n" +"\n" +"Then, make a new commit on top of your original one that introduces a compromise." +msgstr "" + +msgid "Hide trees and blobs" +msgstr "" + +msgid "I am precious" +msgstr "" + +msgid "I pushed something broken" +msgstr "" + +msgid "I wonder if you're more relaxed when you sleep in parallel timelines..." +msgstr "" + +msgid "I'm really committed to our friendship! <3" +msgstr "" + +msgid "I'm the left arm" +msgstr "" + +msgid "I'm the left leg" +msgstr "" + +msgid "I'm the right arm" +msgstr "" + +msgid "I'm the right leg" +msgstr "" + +msgid "" +"If you want to inspect your stash stack, use the command\n" +"\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" +"\n" +" git stash clear\n" +"\n" +"If you only want to discard a certain stash entry, you can use\n" +"\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 create a new branch from your stashed changes. Just use\n" +"\n" +" git stash branch \n" +"\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 "" +"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.\n" +"\n" +"If a file is modified, you'll need to reset these changes first/reset the files." +msgstr "" + +msgid "Ignoring files" +msgstr "" + +msgid "Improved version" +msgstr "" + +msgid "In reality, in many cases, a lot of time agents work together to build a really good future together! :)" +msgstr "" + +msgid "In the last main commit, the numbers file contains the numbers from 1 to 10." +msgstr "" + +msgid "Index:" +msgstr "" + +msgid "Initialize the time machine!" +msgstr "" + +msgid "" +"Instead of pointing directly to objects, refs can also point to other refs!\n" +"\n" +"When that happens, they are called \"symbolic refs\". You can create or update a symbolic ref using\n" +"\n" +" git symbolic-ref \n" +"\n" +"Create a symbolic ref called \"refs/rainbow\"!" +msgstr "" + +msgid "" +"Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry!\n" +"\n" +"Put the content you want in a file with a matching name, and then run\n" +"\n" +" git update-index \n" +"\n" +"This will create a new blob, and update the hash of the entry to that blob.\n" +"\n" +"Update an entry in the index!" +msgstr "" + +msgid "Interesting!" +msgstr "" + +msgid "Interior design" +msgstr "" + +msgid "" +"Introduce yourself using\n" +"\n" +" git config --global user.name Firstname\n" +" git config --global user.email \"your@mail.com\"" +msgstr "" + +msgid "Introduce yourself." +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "Is at work." +msgstr "" + +msgid "Is holding a key in its beak." +msgstr "" + +msgid "Is my phone upside down? App" +msgstr "" + +msgid "Is on the ground." +msgstr "" + +msgid "It's been blown out." +msgstr "" + +msgid "It's burning!" +msgstr "" + +msgid "It's holding a lollipop." +msgstr "" + +msgid "It's sleeping." +msgstr "" + +msgid "Jump to the commit, and update the index. Keep the current environment." +msgstr "" + +msgid "Just woke up. Is hungry." +msgstr "" + +msgid "Less-good version" +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 "" +"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.\n" +"\n" +"You can create or update a ref with\n" +"\n" +" git update-ref refs/ \n" +"\n" +"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.\n" +"\n" +"Create refs that point to all objects in this repository!" +msgstr "" + +msgid "" +"Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using\n" +"\n" +" git remote add [name] [URL]\n" +"\n" +"where `[name]` is an arbitrary, short name you pick for the remote.\n" +"\n" +"When you've done that, you can get all commits from that remote using\n" +"\n" +" git pull friend\n" +"\n" +"There's a letter for you!" +msgstr "" + +msgid "Level description here!" +msgstr "" + +msgid "Level name here!" +msgstr "" + +msgid "Levels" +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 "Line 1" +msgstr "" + +msgid "Line 2" +msgstr "" + +msgid "Line 2, gnihihi" +msgstr "" + +msgid "Living dangerously" +msgstr "" + +msgid "Look at your friend's suggestion, make a compromise, and push it back." +msgstr "" + +msgid "Looking into the past" +msgstr "" + +msgid "Looks happy. :)" +msgstr "" + +msgid "Looks very hungry." +msgstr "" + +msgid "Make a breakfast compromise in the 'main' branch." +msgstr "" + +msgid "Make a change to the candle." +msgstr "" + +msgid "Make a commit \\o/" +msgstr "" + +msgid "Make a commit from the current index." +msgstr "" + +msgid "Make a commit where all files are deleted ¯_(^^)/¯" +msgstr "" + +msgid "Make a commit where all files contain \"x\"." +msgstr "" + +msgid "Make a commit where you rename the file b to \"x\"." +msgstr "" + +msgid "Make a commit, but faster!" +msgstr "" + +msgid "Make a commit." +msgstr "" + +msgid "Make a copy of a file." +msgstr "" + +msgid "Make a new commit containing your current environment! Type in a description of what changed!" +msgstr "" + +msgid "Make a new commit that reverts the changes of the specified commit." +msgstr "" + +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 "" + +msgid "Make a second commit that only records a single change." +msgstr "" + +msgid "Make a snapshot of the glass (a \"commit\")" +msgstr "" + +msgid "Make changes to all files!" +msgstr "" + +msgid "Make changes to all three objects, to form a logical sequence of events!" +msgstr "" + +msgid "Make changes to the events in your current timeline, back to the commit you drag this to." +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 "Make sure the colors match your bed's color." +msgstr "" + +msgid "Making backups" +msgstr "" + +msgid "Merge the specified timeline into yours. If necessary, will create a merge commit." +msgstr "" + +msgid "Merging" +msgstr "" + +msgid "Merging popped stash" +msgstr "" + +msgid "Merging timelines" +msgstr "" + +msgid "Move the branch you're on to the specified commit." +msgstr "" + +msgid "Moving branches around" +msgstr "" + +msgid "Moving through time" +msgstr "" + +msgid "My first parent's parents has to be the same as my second parent's parent." +msgstr "" + +msgid "My master password is a1b2c3d4e5" +msgstr "" + +msgid "" +"Neat! It even still looks a bit comfortable!\n" +"\n" +"You head out, eager for your first lesson at time travel school!" +msgstr "" + +msgid "Next level" +msgstr "" + +msgid "Nice stash you got there! :)" +msgstr "" + +msgid "Nice to meet you!" +msgstr "" + +msgid "Nice!" +msgstr "" + +msgid "" +"Nice!\n" +"\n" +"Can you make a different tree? Modify the index, then call git write-tree again!" +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 "Nice! You can try making some additional commits. When you feel comfortable, click on \"Next Level\"." +msgstr "" + +msgid "Nice! You tagged your first commit :)" +msgstr "" + +msgid "No sleep required" +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 "" +"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 "" +"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 "" +"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 "Oh My Git!" +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" +"\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 "" +"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 "Okay!" +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 "" +"Omnomnom!\n" +"\n" +"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. :)" +msgstr "" + +msgid "On second thought, maybe you even prefer the ice cream timeline to the main one? :)" +msgstr "" + +msgid "" +"On the command line, you can easily delete all files ending in -web using this command:\n" +"\n" +" rm *web" +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 "One step after another" +msgstr "" + +msgid "Please enter a value:" +msgstr "" + +msgid "Only add one of these changes!" +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 "" +"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 "Order all tree branches into one and move the main branch ref" +msgstr "" + +msgid "Original score by winniehell" +msgstr "" + +msgid "" +"Other times, you might want to rename a file in the next commit. Use\n" +"\n" +" git mv [file] [new name]\n" +"\n" +"for that. The effect is very similar as if you had created a copy with a new name, and removed the old version." +msgstr "" + +msgid "Pick the timeline that's clearer, and make the alarm go off!" +msgstr "" + +msgid "Pop from Stash" +msgstr "" + +msgid "Problems" +msgstr "" + +msgid "Pull from the remote." +msgstr "" + +msgid "Put the events in your current timeline on top of the specified one." +msgstr "" + +msgid "Quit" +msgstr "" + +msgid "Rebasing" +msgstr "" + +msgid "Reload" +msgstr "" + +msgid "Remote Tags" +msgstr "" + +msgid "Remotes" +msgstr "" + +msgid "Remove all changes in your local files!" +msgstr "" + +msgid "Remove all spider webs." +msgstr "" + +msgid "Removing tags" +msgstr "" + +msgid "Rename a file in the next commit" +msgstr "" + +msgid "Rename a file." +msgstr "" + +msgid "Rename the bed into something else, and give it a new description!" +msgstr "" + +msgid "Rename the remote with the typo (using `git remote rename [old name] [new name]`)" +msgstr "" + +msgid "Reorder the commits to dress yourself in the correct way" +msgstr "" + +msgid "Reordering events" +msgstr "" + +msgid "Repeat the specified action on top of your current timeline." +msgstr "" + +msgid "Repo name" +msgstr "" + +msgid "Reset changes in a local file." +msgstr "" + +msgid "Reset the changes in the green and blue candles!" +msgstr "" + +msgid "Reset the index version of a file to the version in the commit you're on." +msgstr "" + +msgid "Resetting files in the index" +msgstr "" + +msgid "Restore a deleted file" +msgstr "" + +msgid "Restore a file from the past" +msgstr "" + +msgid "Restore sisterly peace." +msgstr "" + +msgid "Restore the essay to contain \"important content\"" +msgstr "" + +msgid "Restore the version from the last commit." +msgstr "" + +msgid "Right! Having each change in its own commit makes it easier to understand what's going on! Let's learn how to do that!" +msgstr "" + +msgid "SPECIAL" +msgstr "" + +msgid "Same for its child! \\o/" +msgstr "" + +msgid "Sandbox" +msgstr "" + +msgid "Sandbox with a remote" +msgstr "" + +msgid "Sandbox with three commits" +msgstr "" + +msgid "Save" +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 which past commit you were on before. How can you find out?\n" +"\n" +"There's a convenient command that shows you all the places your `HEAD` has pointed to in the past:\n" +"\n" +" git reflog" +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 "Set your email address." +msgstr "" + +msgid "" +"Set your name.\n" +"\n" +"(Will not change anything outside of this game.)" +msgstr "" + +msgid "Show what changed in the commit." +msgstr "" + +msgid "" +"So a tree describes a directory structure at a specific point in time.\n" +"\n" +"It would be nice if we could remember when that state existed, and who authored it, right?\n" +"\n" +"Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using\n" +"\n" +" git commit-tree -m \"Description of your commit\"\n" +"\n" +"Make a commit from the tree in this repository!" +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 "So the tree has exactly one child, and it is a tree!" +msgstr "" + +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 "" +"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.\n" +"\n" +"This allows you to have smaller commits, that describe better what you changed!\n" +"\n" +"The command for this is the same - git add!" +msgstr "" + +msgid "" +"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!\n" +"\n" +"What happens if you have already update the index, like in file c? You have to reset the index first!" +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." +msgstr "" + +msgid "" +"Sometimes you want to merge two commits, but a merge conflict occurs that you currently don't want to resolve.\n" +"\n" +"In these situations you can abort the merge to merge later. Use\n" +"git merge --abort\n" +"when you are in a merge process.\n" +"\n" +"Try to merge both commits and abort the merge afterwards." +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 "" +"Sometimes, you might want to record the order in which things changed, instead of making a single commit.\n" +"\n" +"What happened here? Make two commits from the changes (using the \"add\" card), in an order that makes sense!" +msgstr "" + +msgid "Split a commit!" +msgstr "" + +msgid "Start looking for the commit where things got bad." +msgstr "" + +msgid "Stash" +msgstr "" + +msgid "Stashed changes are in a new branch! :)" +msgstr "" + +msgid "Stashing" +msgstr "" + +msgid "State that the current commit is bad! When you're automatically transferred, keep playing the good and bad cards!" +msgstr "" + +msgid "State that the current commit is good! When you're automatically transferred, keep playing the good and bad cards!" +msgstr "" + +msgid "Step by step" +msgstr "" + +msgid "Suddenly, you fall down, splash into stinking water, and are eaten by an alligator." +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 "Support us! (Open two browser tabs)" +msgstr "" + +msgid "Sure, I'll install it!" +msgstr "" + +msgid "Tagging later" +msgstr "" + +msgid "Tags" +msgstr "" + +msgid "Text here" +msgstr "" + +msgid "Thanks!" +msgstr "" + +msgid "" +"That chicken is running around a lot, and changing often. We don't want to have it in our commits.\n" +"\n" +"Add it to the file .gitignore, and try using `git add .`!" +msgstr "" + +msgid "The Index" +msgstr "" + +msgid "The ball is now touching the book." +msgstr "" + +msgid "The bike shed should be ???" +msgstr "" + +msgid "The bike shed should be blue" +msgstr "" + +msgid "The bike shed should be green" +msgstr "" + +msgid "The bikeshed should be ???" +msgstr "" + +msgid "The bikeshed should be blue" +msgstr "" + +msgid "The bikeshed should be green" +msgstr "" + +msgid "The book has fallen over." +msgstr "" + +msgid "The candle has been blown out." +msgstr "" + +msgid "The candle is burning with a blue flame." +msgstr "" + +msgid "The command line" +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 "" +"The events and timelines you see are always only what your own time machine knows about!\n" +"\n" +"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.\n" +"\n" +"Then, add another event on top (what does Sam have for dinner?), and push the result, to transfer it back to your sidekick!\n" +"\n" +"You can only ever manipulate things in your own time machine (the one on the bottom)." +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 "The friend got a fifth line from you" +msgstr "" + +msgid "The friend got a third line from you" +msgstr "" + +msgid "The glass is full of water." +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 "The remote with the typo is gone." +msgstr "" + +msgid "The team's main branch no longer contains the bad thing." +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 "" +"There is a time-saving trick, where instead of a plain git commit, you can use\n" +"\n" +" git commit -a\n" +"\n" +"This will automatically add all changes you made to local files! Very convenient." +msgstr "" + +msgid "" +"There's a simple command to remove all objects that are not referenced by anything:\n" +"\n" +" git prune\n" +"\n" +"Remove all blobs in this repository." +msgstr "" + +msgid "" +"There's another way to add an entry to the index directly:\n" +"\n" +" git update-index --add --cacheinfo ,,\n" +"\n" +"The first three numbers of the mode describe the type of the entry, \"100\" is a regular file.\n" +"\n" +"The second three number describe the permissions. Only \"644\" (non-executable) and \"755\" (executable) are supported.\n" +"\n" +"You can insert the hash of an object into the terminal by right-clicking on it! :)" +msgstr "" + +msgid "These are your cards! Drag them to highlighted areas to play them!" +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 "This blob really should not exist" +msgstr "" + +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 "" + +msgid "This is a virus" +msgstr "" + +msgid "This is an empty sandbox you can play around in." +msgstr "" + +msgid "This is not really a good test for the winning condition..." +msgstr "" + +msgid "" +"This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3\n" +"\n" +"You can interact with the repository labelled \"yours\" by typing Bash commands in the terminal below! The visualization will show you its internal status.\n" +"\n" +"Let's get started by initializing an empty Git repository in the current directory by typing:\n" +"\n" +" git init" +msgstr "" + +msgid "This is the time machine of another person! To interact with it, you need special commands!" +msgstr "" + +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 "" + +msgid "" +"This piggy bank belongs to the big sister.\n" +"It contains 10 coins." +msgstr "" + +msgid "" +"This piggy bank belongs to the big sister.\n" +"It is empty." +msgstr "" + +msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!" +msgstr "" + +msgid "Tip!" +msgstr "" + +msgid "" +"Tip: You can also use a command like this to create a blob in a single line:\n" +"\n" +" echo \"awesome content\" | git hash-object -w --stdin\n" +"\n" +"Did you already notice that you can drag and drop all objects? :)" +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 "" +"To remove an entry from the index, use a command like this:\n" +"\n" +" git update-index --force-remove \n" +"\n" +"Remove all entries from the index!" +msgstr "" + +msgid "To the survey /o/" +msgstr "" + +msgid "Toggle music" +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 "" +"Trees can also point to other trees! This way, they can describe nested directory structures.\n" +"\n" +"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.\n" +"\n" +"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." +msgstr "" + +msgid "Undo a bad commit" +msgstr "" + +msgid "Unexpected Roommates" +msgstr "" + +msgid "Update" +msgstr "" + +msgid "Update files in the index" +msgstr "" + +msgid "Update the index version of the file to its current real content." +msgstr "" + +msgid "Updating files in the index" +msgstr "" + +msgid "Very useful!" +msgstr "" + +msgid "Walking down the Main Lane." +msgstr "" + +msgid "Walking down the Side Lane." +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 "" +"We're so glad to have you!\n" +"\n" +"Git can help you fix problems in the past! It allows you to collaborate with other students of time travel! It's really powerful, and it's really popular! I'll see you for your first lesson tomorrow!" +msgstr "" + +msgid "Welcome to time travel school!" +msgstr "" + +msgid "Welcome to time travel school! :) I'll see you for your first class tomorrow!" +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 "Welcome!" +msgstr "" + +msgid "Well done :)" +msgstr "" + +msgid "" +"Well done!\n" +"\n" +"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!\n" +"\n" +"But first, let's look at some basics!\n" +"\n" +"(Click \"Next Level\" as soon as you're ready!)" +msgstr "" + +msgid "Well done! :) The only problem is that you now have to walk all the way back home, again..." +msgstr "" + +msgid "Well done! Try travelling between the commits using git checkout, so you can look at their contents again!" +msgstr "" + +msgid "Whatever..." +msgstr "" + +msgid "When Things Go Wrong" +msgstr "" + +msgid "" +"When using the commit-tree command, you can optionally specify a parent:\n" +"\n" +" git commit-tree -m \"Description\" -p \n" +"\n" +"Make a string of three commits!\n" +"\n" +"Hint: You'll need a tree object. What could be the easiest way to obtain one?" +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 "" +"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! :)\n" +"\n" +"What happens when you try pointing the symbolic ref directly to the blob using git update-ref?\n" +"\n" +"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!\n" +"\n" +"Weird, huh?" +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" +"\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 "" +"When you want to re-apply your changes but you already continued working on your file, you might get a merge conflict! Let's practice this situation.\n" +"Pop the changes from the stash with\n" +"\n" +" git stash pop\n" +"\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 "" +"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" +"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 "" +"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 "" +"Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs!\n" +"\n" +"You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :)\n" +"\n" +"Everything else is just convention and high-level commands that make interacting with the objects more convenient.\n" +"\n" +"We haven't covered:\n" +"\n" +"tag objects (they are the fourth object type - a bit like refs with a description and an author)\n" +"\n" +"configuration (allows you to specify remote repositories, for example)\n" +"\n" +"working with local files (which is, uh, arguably pretty important :P)\n" +"\n" +"Thanks for playing! You're welcome to check out the \"puzzle\" levels in the dropdown, some of them are more advanced!" +msgstr "" + +msgid "Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations..." +msgstr "" + +msgid "Workflows" +msgstr "" + +msgid "Working together" +msgstr "" + +msgid "Yay!" +msgstr "" + +msgid "Yay, you got your changes back! :)" +msgstr "" + +msgid "Yellow brick road" +msgstr "" + +msgid "You aborted to merge?" +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 "" +"You ate a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "" + +msgid "You can drag these around with your mouse!" +msgstr "" + +msgid "" +"You can point refs to a new location using the same command you use to create them:\n" +"\n" +" git update-ref refs/ \n" +"\n" +"As an exercise, make all refs in this repository point to the tree object!" +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 "" + +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 "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You ate a donut." +msgstr "" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You have a donut." +msgstr "" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You drank coffee.\n" +"\n" +"You do not have a donut." +msgstr "" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You have coffee.\n" +"\n" +"You do not have a donut." +msgstr "" + +msgid "You drink coffee." +msgstr "" + +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 "" + +msgid "You go to the birthday party!" +msgstr "" + +msgid "You go to the concert!" +msgstr "" + +msgid "" +"You have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "" + +msgid "You hear a knock on the door." +msgstr "" + +msgid "You jump over an manhole in the walkway, and arrive at school on time." +msgstr "" + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are NOT wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are NOT wearing shoes." +msgstr "" + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are NOT wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "" + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "" + +msgid "" +"You just woke up.\n" +"\n" +"You are wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "" + +msgid "" +"You just woke up.\n" +"\n" +"You are wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "" + +msgid "You leave your house and start walking to school." +msgstr "" + +msgid "You still have your key." +msgstr "" + +msgid "You tried to merge?" +msgstr "" + +msgid "You wake up." +msgstr "" + +msgid "You walk on the left side of the street." +msgstr "" + +msgid "You walk on the right side of the street." +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 "" +"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.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" + +msgid "You wrap the birthday present, and grab your concert ticket." +msgstr "" + +msgid "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." +msgstr "" + +msgid "" +"You're still pretty confused by everything that's going on. The next day, you decide to enroll in time travel school!\n" +"\n" +"Your time travel teacher welcomes you: \"Hello there! Wanna tell us your name?\"" +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 "" +"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! :/\n" +"\n" +"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!" +msgstr "" + +msgid "" +"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\"!\n" +"\n" +"No problem, you can use the checkout card to restore your essay from an older commit!" +msgstr "" + +msgid "Your first 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 "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`." +msgstr "" + +msgid "Your pocket is empty." +msgstr "" + +msgid "Your proposal is acceptable for friend1." +msgstr "" + +msgid "Your proposal is acceptable for friend2." +msgstr "" + +msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" +msgstr "" + +msgid "Yum, that sounds like a good breakfast!" +msgstr "" + +msgid "and this should happen after that" +msgstr "" + +msgid "bad version" +msgstr "" + +msgid "blabber" +msgstr "" + +msgid "" +"blarg\n" +"blaaaargh" +msgstr "" + +msgid "by bleeptrack & blinry" +msgstr "" + +msgid "dir" +msgstr "" + +msgid "event 1" +msgstr "" + +msgid "event 2" +msgstr "" + +msgid "event 3" +msgstr "" + +msgid "file 1" +msgstr "" + +msgid "file 2" +msgstr "" + +msgid "file 3" +msgstr "" + +msgid "file A" +msgstr "" + +msgid "file B" +msgstr "" + +msgid "file C" +msgstr "" + +msgid "filename" +msgstr "" + +msgid "good version" +msgstr "" + +msgid "hello" +msgstr "" + +msgid "important" +msgstr "" + +msgid "important content" +msgstr "" + +msgid "label" +msgstr "" + +msgid "new content" +msgstr "" + +msgid "object_id" +msgstr "" + +msgid "root" +msgstr "" + +msgid "something" +msgstr "" + +msgid "something else" +msgstr "" + +msgid "" +"this is fine\n" +"\n" +"?\n" +"\n" +"?\n" +"\n" +"?" +msgstr "" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"?\n" +"\n" +"?" +msgstr "" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"this is very bad\n" +"\n" +"?" +msgstr "" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"this is very bad\n" +"\n" +"this is fine again" +msgstr "" + +msgid "this is some other change" +msgstr "" + +msgid "this should happen first" +msgstr "" + +msgid "title" +msgstr "" + +msgid "toothbrush sharing" +msgstr "" + +msgid "v1 tag in your repo" +msgstr "" + +msgid "v2 tag in the remote" +msgstr "" + +msgid "v2 tag in your repo" +msgstr "" + +msgid "very hungry" +msgstr "" + +msgid "world" +msgstr "" + +msgid "~ List of current students ~" +msgstr "" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"(I still need to write this.)" +msgstr "" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"- So that I can undo mistakes" +msgstr "" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"- So that I can undo mistakes\n" +"- To track my projects over time" +msgstr "" + +msgid "intro" +msgstr "" + +msgid "files" +msgstr "" + +msgid "branches" +msgstr "" + +msgid "merge" +msgstr "" + +msgid "index" +msgstr "" + +msgid "remotes" +msgstr "" + +msgid "changing-the-past" +msgstr "" + +msgid "shit-happens" +msgstr "" + +msgid "workflows" +msgstr "" + +msgid "bisect" +msgstr "" + +msgid "stash" +msgstr "" + +msgid "tags" +msgstr "" + +msgid "sandbox" +msgstr "" + +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 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 "" +"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 "" diff --git a/locale/ru.mo b/locale/ru.mo new file mode 100644 index 0000000000000000000000000000000000000000..1e1d58d2bfdd56bd8748544d9de19d795581a4d6 GIT binary patch literal 134665 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 literal 0 HcmV?d00001 diff --git a/locale/ru.po b/locale/ru.po new file mode 100644 index 00000000..d0bfee1d --- /dev/null +++ b/locale/ru.po @@ -0,0 +1,3086 @@ +msgid "" +msgstr "" +"Project-Id-Version: oh-my-git\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" + +msgid "\"~ Why do you want to learn how to use time machines? ~\"" +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 "" +"(Пожалуйста, немного уменьшите масштаб с помощью колеса мыши! :D)\n" +"\n" +"О нет! Вы потеряли свой ключ в какой-то момент в течение дня!\n" +"\n" +"Конечно, вы могли бы просмотреть каждый отдельный коммит в попытке найти его - но есть способ лучше: у вашей машины времени есть встроенный способ быстро найти момент времени, когда все пошло не так!\n" +"\n" +"Сначала сыграйте карту \"bisect start\". Затем перейдите к коммиту, где у вас нет ключа, и сыграйте карту \"bisect bad\". Аналогично, перейдите к раннему коммиту, где у вас есть ключ в кармане, и сыграйте карту \"bisect good\".\n" +"\n" +"После того, как вы найдете последний хороший коммит, сбросьте основную ветку на него. Что случилось с ключом после того, как вы его потеряли?" + +msgid "- 200g Sugar" +msgstr "- 200г сахара" + +msgid "Flour" +msgstr "муки" + +msgid "Salt" +msgstr "соли" + +msgid "burning" +msgstr "горит" + +msgid "very bad" +msgstr "очень плохо" + +msgid "important content" +msgstr "важное содержимое" + +msgid "yellow" +msgstr "Желтая" + +msgid "gnihihi" +msgstr "хихихи" + +msgid "Line 4, blurbblubb" +msgstr "Строка 4, брбрбрбрбр" + +msgid "Oh nice, I added a fourth line!" +msgstr "О, здорово, я добавил четвёртую строку!" + +msgid "blurbblubb" +msgstr "брбрбрбрбр" + +msgid "You ate.*baguette" +msgstr "Вы съели.*багет" + +msgid "You drank.*coffee" +msgstr "Вы выпили.*кофе" + +msgid "You ate.*donut" +msgstr "Вы съели.*пончик" + +msgid "10 coins" +msgstr "10 монет" + +msgid "- 4 Apples" +msgstr "- 4 яблока" + +msgid "- 500g Flour" +msgstr "- 500г муки" + +msgid "- Pinch of Salt" +msgstr "- Щепотка соли" + +msgid "" +"- Sam\n" +"- Alex" +msgstr "" +"- Сэм\n" +"- Алекс" + +msgid "A big spider web sticks above your bed." +msgstr "Большая паутина висит над вашей кроватью." + +msgid "A bottle, containing a clear liquid." +msgstr "Бутылка с прозрачной жидкостью." + +msgid "A candle, burning with a blue flame." +msgstr "Свеча, горящая синим пламенем." + +msgid "A comfortable, yellow bed with yellow cushions." +msgstr "Удобная, желтая кровать с желтыми подушками." + +msgid "" +"A commit can have multiple parents! You can specify the -p option multiple times, like this:\n" +"\n" +" git commit-tree -m \"Description\" -p -p \n" +"\n" +"Build a rhombus shape from commits, where two commits point to the same parent, and then a fourth commit points to both of them." +msgstr "" +"Коммит может иметь несколько родителей! Вы можете указать опцию -p несколько раз, вот так:\n" +"\n" +" git commit-tree <дерево> -m \"Описание\" -p <родитель1> -p <родитель2>\n" +"\n" +"Постройте ромбовидную форму из коммитов, где два коммита указывают на одного и того же родителя, а затем четвертый коммит указывает на них обоих." + +msgid "A cozy bed." +msgstr "Уютная кровать." + +msgid "A hammer, balancing on its handle." +msgstr "Молоток, балансирующий на рукоятке." + +msgid "A new day is starting" +msgstr "Начинается новый день" + +msgid "A really big yellow shelf." +msgstr "Очень большая желтая полка." + +msgid "" +"A small child.\n" +"It really loves cats!" +msgstr "" +"Маленький ребенок.\n" +"Он очень любит кошек!" + +msgid "A small, but heavy glass ball." +msgstr "Маленький, но тяжелый стеклянный шар." + +msgid "A smoke detector. It's absolutely silent." +msgstr "Детектор дыма. Он абсолютно бесшумен." + +msgid "A thin book, that's standing upright." +msgstr "Тонкая книга, которая стоит вертикально." + +msgid "A tiny spider web is next to your window." +msgstr "Крошечная паутина рядом с вашим окном." + +msgid "A white sugar cube." +msgstr "Белый кубик сахара." + +msgid "A yellow cozy bed." +msgstr "Желтая уютная кровать." + +msgid "A yellow cupboard with lots of drawers." +msgstr "Желтый шкаф с множеством ящиков." + +msgid "A young girl with brown, curly hair." +msgstr "Молодая девушка с каштановыми, вьющимися волосами." + +msgid "Aaah, let's merge later..." +msgstr "Ааа, давайте сольём позже..." + +msgid "Abort a merge" +msgstr "Прервать слияние" + +msgid "Abort the current merge attempt, and reconstruct the previous state." +msgstr "Прервать текущую попытку слияния и восстановить предыдущее состояние." + +msgid "" +"Actually, you decide that you don't need any sleep.\n" +"\n" +"Because of that, you won't require a bed, and can build some other piece of furniture from the wood!" +msgstr "" +"На самом деле, вы решаете, что вам не нужен сон.\n" +"\n" +"Из-за этого вам не понадобится кровать, и вы можете сделать какой-нибудь другой предмет мебели из дерева!" + +msgid "Add a remote that points to ../friend." +msgstr "Добавьте удаленный репозиторий, который указывает на `../friend`." + +msgid "Add another line to form.txt!" +msgstr "Добавьте еще одну строку в form.txt!" + +msgid "Add another line to form2_really_final.txt!" +msgstr "Добавьте еще одну строку в form2_really_final.txt!" + +msgid "Add new files to the index" +msgstr "Добавление новых файлов в индекс" + +msgid "Add only the changes of a and c, and make a commit! Finally, make a commit which captures the changes in b!" +msgstr "Добавьте только изменения файлов a и c и сделайте коммит! Наконец, сделайте коммит, который зафиксирует изменения в файле b!" + +msgid "Add the candle." +msgstr "Добавьте свечу." + +msgid "Add two more pieces of furniture" +msgstr "Добавьте еще два предмета мебели" + +msgid "Add your name to the list of students" +msgstr "Добавьте свое имя в список студентов" + +msgid "Adding a remote" +msgstr "Добавление удаленного репозитория" + +msgid "Adding changes step by step" +msgstr "Добавление изменений шаг за шагом" + +msgid "" +"After carefully building the index we want, it would be nice to save a permanent snapshot of it, right?\n" +"\n" +"This is what the second type of objects is for: trees! You can convert the index into a tree using\n" +"\n" +" git write-tree\n" +"\n" +"Try it! :)" +msgstr "" +"После того, как мы тщательно построили нужный нам индекс, было бы неплохо сохранить его постоянный снимок, верно?\n" +"\n" +"Для этого и предназначен второй тип объектов: деревья! Вы можете преобразовать индекс в дерево, используя\n" +"\n" +" git write-tree\n" +"\n" +"Попробуйте! :)" + +msgid "Again, initialize your time machine!" +msgstr "Снова инициализируйте вашу машину времени!" + +msgid "All clear! :)" +msgstr "Все чисто! :)" + +msgid "An extra thick spider web is right beside your door." +msgstr "Очень толстая паутина прямо у вашей двери." + +msgid "And a third one." +msgstr "И третий." + +msgid "" +"And finally, to delete a ref, use\n" +"\n" +" git update-ref -d refs/\n" +"\n" +"Delete all refs! :P (Well, except for HEAD. HEAD is special.)" +msgstr "" +"И, наконец, чтобы удалить ссылку, используйте\n" +"\n" +" git update-ref -d refs/<имя_ссылки>\n" +"\n" +"Удалите все ссылки! :P (Ну, кроме HEAD. HEAD - особенная.)" + +msgid "And make a commit!" +msgstr "И сделайте коммит!" + +msgid "And make a commit." +msgstr "И сделайте коммит." + +msgid "And make a second commit!" +msgstr "И сделайте второй коммит!" + +msgid "And the history has not been modified." +msgstr "И история не была изменена." + +msgid "And use `git push` to send it to your teacher!" +msgstr "Используй `git push` и отправь это своему учителю!" + +msgid "Apple Pie:" +msgstr "Яблочный пирог:" + +msgid "" +"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\n" +"\n" +" git read-tree \n" +"\n" +"For , you can provide the hash of any tree object - you can right-click one to insert its hash into the terminal!\n" +"\n" +"Try reading some of the trees in this repository into the index!" +msgstr "" +"Как только у вас появятся какие-либо объекты-деревья, вы всегда можете прочитать их и установить индекс в точности в соответствии с их содержимым! Неудивительно, что команда называется\n" +"\n" +" git read-tree <дерево>\n" +"\n" +"Для <дерева> вы можете указать хэш любого объекта-дерева - вы можете щелкнуть правой кнопкой мыши по одному из них, чтобы вставить его хэш в терминал!\n" +"\n" +"Попробуйте прочитать некоторые из деревьев в этом репозитории в индекс!" + +msgid "" +"At its core, Git is very simple. It stores \"objects\", which are basically files identified by an \"identifier\" (short: ID).\n" +"\n" +"There are four types of objects: blobs, trees, commits, and tags. The simplest type is a \"blob\", which is just a piece of text.\n" +"\n" +"Let's create some blobs! To do that, create a file with the desired content, and then use\n" +"\n" +" git hash-object -w \n" +"\n" +"The flag -w means \"write\", and tells Git to actually write the new blob to the disk.\n" +"\n" +"Create three new blobs!" +msgstr "" +"В своей основе Git очень прост. Он хранит \"объекты\", которые по сути являются файлами, идентифицируемыми \"идентификатором\" (сокращенно: ID).\n" +"\n" +"Существует четыре типа объектов: блобы, деревья, коммиты и теги. Самый простой тип - \"блоб\", который представляет собой просто фрагмент текста.\n" +"\n" +"Давайте создадим несколько блобов! Для этого создайте файл с желаемым содержимым, а затем используйте\n" +"\n" +" git hash-object -w <файл>\n" +"\n" +"Флаг -w означает \"запись\" и указывает Git фактически записать новый блоб на диск.\n" +"\n" +"Создайте три новых блоба!" + +msgid "Awesome!" +msgstr "Потрясающе!" + +msgid "Back" +msgstr "Назад" + +msgid "Be on a merge commit." +msgstr "Находитесь на коммите слияния." + +msgid "Because you're kind of late, you start running. Someone throws a piano out of their windows, and it smashes you." +msgstr "Поскольку вы немного опаздываете, вы начинаете бежать. Кто-то выбрасывает пианино из окна, и оно вас раздавливает." + +msgid "Best version" +msgstr "Лучшая версия" + +msgid "Bisect" +msgstr "Поиск ошибки (Bisect)" + +msgid "" +"Blobs usually represent the content of a file. But on their own, they don't have any metadata, not even a name!\n" +"\n" +"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.\n" +"\n" +"The most convenient option to add an entry to the index is via an existing file:\n" +"\n" +" echo \"my content\" > file\n" +" git update-index --add file\n" +"\n" +"Add three entries to the index! For a bonus challenge: can you add a file that is inside of a directory, like \"directory/file\"?" +msgstr "" +"Блобы обычно представляют содержимое файла. Но сами по себе они не имеют никаких метаданных, даже имени!\n" +"\n" +"У Git есть очень мощная концепция для хранения метаданных, связанных с блобами: индекс! Это список, который связывает блобы с именами файлов и правами доступа.\n" +"\n" +"Самый удобный способ добавить запись в индекс - через существующий файл:\n" +"\n" +" echo \"мое содержимое\" > файл\n" +" git update-index --add файл\n" +"\n" +"Добавьте три записи в индекс! Для дополнительного задания: можете ли вы добавить файл, который находится внутри каталога, например, \"каталог/файл\"?" + +msgid "Both you and your friend have been working on the file, and want to sync up!" +msgstr "И вы, и ваш друг работали над файлом и хотите синхронизироваться!" + +msgid "Branch from stash" +msgstr "Ветка из тайника" + +msgid "Branches" +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 "Ветки также значительно упрощают перемещение между разными местами с помощью командной строки! Как только у вас появится ветка с именем \"birthday\", вы сможете набрать `git checkout birthday`, чтобы переместиться на нее!" + +msgid "Branches grow with you!" +msgstr "Ветки растут вместе с вами!" + +msgid "Build a situation where you consumed a baguette, a coffee, and a donut." +msgstr "Создайте ситуацию, в которой вы съели багет, выпили кофе и съели пончик." + +msgid "But make sure you keep your bed!" +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 "" +"Но что делать, если вы забыли поставить тег на текущий коммит?\n" +"Нет проблем! Вы также можете ставить теги на более старые коммиты с помощью\n" +"\n" +" git tag <имя_тега> <хэш_коммита>\n" +"\n" +"Поставьте тег с именем \"v1\" на коммит \"Adding feature 2\"!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" + +msgid "Cards!" +msgstr "Карты!" + +msgid "Change the contents of the glass!" +msgstr "Измените содержимое стакана!" + +msgid "Changing the Past" +msgstr "Изменение прошлого" + +msgid "Checking out files from the index" +msgstr "Извлечение файлов из индекса" + +msgid "Clear the Stash" +msgstr "Очистить тайник (Clear the Stash)" + +msgid "Click on these files to edit them!" +msgstr "Нажмите на эти файлы, чтобы их отредактировать!" + +msgid "Cloning a repo" +msgstr "Клонирование репозитория" + +msgid "Commit your local changes." +msgstr "Закоммитьте ваши локальные изменения." + +msgid "Commit your result." +msgstr "Закоммитьте свой результат." + +msgid "Complete the goal of this level" +msgstr "Выполните цель этого уровня" + +msgid "" +"Construct a chain of three trees, which don't point to anything else.\n" +"\n" +"This is hard! The git mktree command might be useful." +msgstr "" +"Создайте цепочку из трех деревьев, которые не указывают ни на что другое.\n" +"\n" +"Это сложно! Команда git mktree может быть полезна." + +msgid "Continue the current rebasing process." +msgstr "Продолжить текущий процесс перебазирования." + +msgid "Contradictions" +msgstr "Противоречия" + +msgid "Cool!" +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 "" +"Круто! Вместо использования игральных карт вы также можете делать все через командную строку!\n" +"\n" +"Командная строка довольно мощная! Часто вы можете использовать ее для решения задач быстрее по сравнению с использованием графического интерфейса." + +msgid "Create a branch called 'birthday' that points to the birthday timeline." +msgstr "Создайте ветку с именем 'birthday', которая указывает на временную линию дня рождения." + +msgid "Create a branch called 'concert' that points to the concert timeline." +msgstr "Создайте ветку с именем 'concert', которая указывает на временную линию концерта." + +msgid "Create a new branch at your current location." +msgstr "Создать новую ветку в вашем текущем местоположении." + +msgid "Create a new file." +msgstr "Создать новый файл." + +msgid "Create two trees pointing to the same blob!" +msgstr "Создайте два дерева, указывающих на один и тот же блоб!" + +msgid "Create your own copy of someone else's repo." +msgstr "Создайте свою собственную копию чужого репозитория." + +msgid "Creating branches" +msgstr "Создание веток" + +msgid "Creating tags" +msgstr "Создание тегов" + +msgid "Delete a branch." +msgstr "Удалить ветку." + +msgid "Delete a file both in the working directory, as well as the index." +msgstr "Удалить файл как в рабочем каталоге, так и в индексе." + +msgid "Delete a file in the next commit" +msgstr "Удалить файл в следующем коммите" + +msgid "Delete a file." +msgstr "Удалить файл." + +msgid "" +"Delete all objects in this repository using git commands only!\n" +"\n" +"Useful commands:\n" +"\n" +" git prune\n" +" git reflog expire" +msgstr "" +"Удалите все объекты в этом репозитории, используя только команды git!\n" +"\n" +"Полезные команды:\n" +"\n" +" git prune\n" +" git reflog expire" + +msgid "Delete the remote you don't want to keep (using `git remote remove [remote]`)" +msgstr "Удалите удаленный репозиторий" + +msgid "Deleting and renaming a remote" +msgstr "Удаление и переименование удаленного репозитория" + +msgid "Deleting branches" +msgstr "Удаление веток" + +msgid "Description" +msgstr "Описание" + +msgid "Did you clear stash stack?" +msgstr "Вы очистили стек тайника?" + +msgid "Did you clear your stash stack?" +msgstr "Вы очистили свой стек тайника?" + +msgid "Did you create a new branch from the stashed changes?" +msgstr "Вы создали новую ветку из изменений в тайнике?" + +msgid "Did you create a new tag?" +msgstr "Вы создали новый тег?" + +msgid "Did you drink a coffee on the coffee branch?" +msgstr "Вы выпили кофе на ветке \"кофе\"?" + +msgid "Did you eat a baguette on the baguette branch?" +msgstr "Вы съели багет на ветке \"багет\"?" + +msgid "Did you eat a donut on the donut branch?" +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 "" +"Знаете ли вы, что создание параллельных временных линий совершенно законно и безопасно? Это правда!\n" +"\n" +"Сможете ли вы выяснить, когда в этом зоопарке все пошло не так? Затем вернитесь к последнему удачному коммиту и создайте параллельную вселенную, где все счастливы!" + +msgid "Did you pop the changes from the stash stack?" +msgstr "Вы извлекли изменения из стека тайника?" + +msgid "Did you remove all tags?" +msgstr "Вы удалили все теги?" + +msgid "Did you resolve the conflict and commit?" +msgstr "Вы разрешили конфликт и закоммитили?" + +msgid "Did you stash the current changes?" +msgstr "Вы сохранили текущие изменения в тайнике?" + +msgid "Display a log of where the ref pointed to in the past." +msgstr "Отобразить журнал того, куда указывала ссылка в прошлом." + +msgid "Don't you immediately feel more at home?" +msgstr "Разве вы не чувствуете себя сразу как дома?" + +msgid "Drag this card into the empty space above to initialize the time machine!" +msgstr "Перетащите эту карту в пустое пространство выше" + +msgid "Drag this card to a commit or to a branch to travel to it!" +msgstr "Перетащите эту карту на коммит или на ветку, чтобы переместиться к ней!" + +msgid "Draw new cards" +msgstr "Взять новые карты" + +msgid "Empty sandbox" +msgstr "Пустая песочница" + +msgid "Enter the time machine" +msgstr "Войдите в машину времени" + +msgid "Feel free to reset the level and try the other strategy! Which one do you like better?" +msgstr "Не стесняйтесь сбросить уровень и попробовать другую стратегию! Какая вам нравится больше?" + +msgid "Fetching from remotes" +msgstr "Получение данных с удаленных репозиториев" + +msgid "File a contains \"x\" in the last main commit." +msgstr "Файл a содержит \"x\" в последнем коммите ветки main." + +msgid "File b contains \"x\" in the last main commit." +msgstr "Файл b содержит \"x\" в последнем коммите ветки main." + +msgid "File c contains \"x\" in the last main commit." +msgstr "Файл c содержит \"x\" в последнем коммите ветки main." + +msgid "Files" +msgstr "Файлы" + +msgid "Fill out the enrollment form, and commit it!" +msgstr "Заполните форму зачисления и закоммитьте ее!" + +msgid "Find out where you've been before, and go back there!" +msgstr "Узнайте, где вы были раньше, и вернитесь туда!" + +msgid "Find the bad branches and delete them. Keep only the best one." +msgstr "Найдите плохие ветки и удалите их. Оставьте только лучшую." + +msgid "Find the last good commit" +msgstr "Найдите последний хороший коммит" + +msgid "For nostalgic reasons, restore the very first backup you made!" +msgstr "Из ностальгических соображений восстановите самую первую резервную копию, которую вы сделали!" + +msgid "For practice, make a commit where all files contain an \"x\"!" +msgstr "Для практики сделайте коммит, в котором все файлы содержат \"x\"!" + +msgid "" +"For this prototype, we assume you have some experience with the command line. Here are some commands that will be useful:\n" +"\n" +"ls\n" +"\n" +"echo content > file\n" +"\n" +"cat file\n" +"\n" +"mkdir dir\n" +"\n" +"Find the riddle in your current directory and put the answer into the file \"answer\"!" +msgstr "" +"Для этого прототипа мы предполагаем, что у вас есть некоторый опыт работы с командной строкой. Вот несколько команд, которые будут полезны:\n" +"\n" +"ls\n" +"\n" +"echo содержимое > файл\n" +"\n" +"cat файл\n" +"\n" +"mkdir папка\n" +"\n" +"Найдите загадку в вашем текущем каталоге и поместите ответ в файл \"answer\"!" + +msgid "Friend" +msgstr "Друг" + +msgid "" +"Generally, git prune will be useful if you want to clean up some objects you made.\n" +"\n" +"Alternatively, you can also click the \"Reload\" button to restart a level." +msgstr "" +"В общем, git prune будет полезен, если вы хотите очистить некоторые созданные вами объекты.\n" +"\n" +"В качестве альтернативы вы также можете нажать кнопку \"Перезагрузить\", чтобы перезапустить уровень." + +msgid "Get a someone else's version of the current timeline." +msgstr "Получить чужую версию текущей временной линии." + +msgid "Get someone else's version of the current timeline, and try to merge it into yours." +msgstr "Получите чужую версию текущей временной линии и попробуйте слить ее со своей." + +msgid "Get the file contents from the specified commits, and reset both the working directory, as well as the index, to it." +msgstr "Получить содержимое файла из указанных коммитов и сбросить к нему как рабочий каталог, так и индекс." + +msgid "Get the first version of your essay, and make a new commit with it." +msgstr "Получите первую версию вашего эссе и сделайте с ней новый коммит." + +msgid "Get the second commit from your teacher using git pull." +msgstr "Получите второй коммит от вашего учителя, используя git pull." + +msgid "Get your friend's repo using `clone`, change something, push it back." +msgstr "Получите репозиторий вашего друга с помощью `clone`, измените что-нибудь, отправьте обратно." + +msgid "Getting the last version" +msgstr "Получение последней версии" + +msgid "Give the current timeline to someone else." +msgstr "Передайте текущую временную линию кому-нибудь еще." + +msgid "Go back to where you were before" +msgstr "Вернуться туда, где вы были раньше" + +msgid "" +"Good job, you solved the level!\n" +"\n" +"Feel free to try a few more things or click 'Next level'." +msgstr "" +"Отличная работа, уровень пройден!\n" +"\n" +"Можешь ещё поэкспериментировать или нажми 'Следующий уровень'." + +msgid "ru" +msgstr "Русский" + +msgid "br" +msgstr "Brazil" + +msgid "en" +msgstr "English" + +msgid "(no description)" +msgstr "(нет описания)" + +msgid "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`!" +msgstr "Отлично! Индекс также иногда называют \"областью подготовки\" (staging area) — он содержит именно то, что попадёт в следующий коммит, когда вы используете `git commit`!" + +msgid "Got it!" +msgstr "Понятно!" + +msgid "Got the fourth line from your friend" +msgstr "Получил четвертую строку от друга" + +msgid "Got the second line from your friend" +msgstr "Получил вторую строку от друга" + +msgid "Had blueberry pancakes with maple syrup for breakfast." +msgstr "На завтрак были блины с черникой и кленовым сиропом." + +msgid "Had muesli with oats and strawberries for breakfast." +msgstr "На завтрак были мюсли с овсянкой и клубникой." + +msgid "Had pancakes with strawberries for breakfast." +msgstr "На завтрак были блины с клубникой." + +msgid "Has 10 coins." +msgstr "Имеет 10 монет." + +msgid "Have a name configured." +msgstr "Имя настроено." + +msgid "Have an email address configured." +msgstr "Адрес электронной почты настроен." + +msgid "Helping each other" +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 "" +"Вот песочница с удаленным репозиторием! Попробуйте pull, fetch или push!\n" +"\n" +"Как можно отправлять теги и ветки на удаленный репозиторий? Как их можно снова удалить?" + +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" +"\n" +"Create and delete some tags!\n" +"\n" +"Make a timeline that's completely independent of the rest!" +msgstr "" +"Вот песочница, в которой можно поиграть.\n" +"\n" +"Вы можете использовать как игральные карты, так и терминал. Это настоящий Git-терминал! Что можно попробовать:\n" +"\n" +"Сделать коммит, который объединяет три временные линии одновременно!\n" +"\n" +"Создать и удалить несколько тегов!\n" +"\n" +"Создать временную линию, полностью независимую от остальных!" + +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 "" +"Вот похожая проблема: вам очень понравилось эссе из самого первого коммита, и вы хотите его вернуть! Что ж, checkout также может восстанавливать вещи из более старых коммитов. Вот как:\n" +"\n" +" git checkout [коммит] [файл]" + +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 "Here, both changes happened in one commit! Split them to be in two commits instead." +msgstr "Здесь оба изменения произошли в одном коммите! Разделите их на два коммита." + +msgid "Here, you already have two remotes configured! You can list them using `git remote`." +msgstr "Здесь у вас уже настроено два удаленных репозитория! Вы можете их перечислить с помощью `git remote`" + +msgid "" +"Here, you already have two remotes configured! You can list them using `git remote`.\n" +"\n" +"Fetch from both, and look at the suggestions.\n" +"\n" +"Then, make a new commit on top of your original one that introduces a compromise." +msgstr "" +"Здесь у вас уже настроено два удаленных репозитория! Вы можете их перечислить, используя `git remote`.\n" +"\n" +"Получите данные с обоих и посмотрите на предложения.\n" +"\n" +"Затем сделайте новый коммит поверх вашего оригинального, который вводит компромисс." + +msgid "Hide trees and blobs" +msgstr "Скрыть деревья и блобы" + +msgid "I am precious" +msgstr "Я драгоценный" + +msgid "I pushed something broken" +msgstr "Я отправил что-то сломанное" + +msgid "I wonder if you're more relaxed when you sleep in parallel timelines..." +msgstr "Интересно, вы более расслаблены, когда спите в параллельных временных линиях..." + +msgid "I'm really committed to our friendship! <3" +msgstr "Я очень предан нашей дружбе! <3" + +msgid "I'm the left arm" +msgstr "Я левая рука" + +msgid "I'm the left leg" +msgstr "Я левая нога" + +msgid "I'm the right arm" +msgstr "Я правая рука" + +msgid "I'm the right leg" +msgstr "Я правая нога" + +msgid "" +"If you want to inspect your stash stack, use the command\n" +"\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" +"\n" +" git stash clear\n" +"\n" +"If you only want to discard a certain stash entry, you can use\n" +"\n" +" git stash drop \n" +"\n" +"Clear your stash stack!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" +"Если вы хотите просмотреть свой стек тайника, используйте команду\n" +"\n" +" git stash list\n" +"\n" +"О, вы не хотите сохранять свои изменения из тайника? Их слишком много? Тогда смело очищайте стек с помощью\n" +"\n" +" git stash clear\n" +"\n" +"Если вы хотите отбросить только определенную запись тайника, вы можете использовать\n" +"\n" +" git stash drop \n" +"\n" +"Очистите свой стек тайника!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" + +msgid "" +"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\n" +"\n" +" git stash branch \n" +"\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 "" +"Если вы хотите сохранить свои изменения, но они не относятся к основной ветке, вы можете легко\n" +"создать новую ветку из ваших изменений в тайнике. Просто используйте\n" +"\n" +" git stash branch <имя_ветки> \n" +"\n" +"Если вы просто хотите использовать последнюю запись из тайника, вы можете оставить опцию пустой.\n" +"\n" +"Создайте новую ветку из изменений в тайнике!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" + +msgid "" +"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.\n" +"\n" +"If a file is modified, you'll need to reset these changes first/reset the files." +msgstr "" +"Если вы хотите удалить файл в следующем коммите, вы можете использовать git rm! Это удалит файл как локально, так и в индексе.\n" +"\n" +"Если файл изменён, вам нужно сначала сбросить эти изменения/сбросить файлы." + +msgid "Ignoring files" +msgstr "Игнорирование файлов" + +msgid "Improved version" +msgstr "Улучшенная версия" + +msgid "In reality, in many cases, a lot of time agents work together to build a really good future together! :)" +msgstr "В реальности, во многих случаях, множество временных агентов работают вместе, чтобы построить действительно хорошее будущее! :)" + +msgid "In the last main commit, the numbers file contains the numbers from 1 to 10." +msgstr "В последнем коммите ветки main файл numbers содержит числа от 1 до 10." + +msgid "Index:" +msgstr "Индекс:" + +msgid "Initialize the time machine!" +msgstr "Инициализируйте машину времени!" + +msgid "" +"Instead of pointing directly to objects, refs can also point to other refs!\n" +"\n" +"When that happens, they are called \"symbolic refs\". You can create or update a symbolic ref using\n" +"\n" +" git symbolic-ref \n" +"\n" +"Create a symbolic ref called \"refs/rainbow\"!" +msgstr "" +"Вместо того чтобы указывать непосредственно на объекты, ссылки могут также указывать на другие ссылки!\n" +"\n" +"Когда это происходит, их называют \"символическими ссылками\". Вы можете создать или обновить символическую ссылку, используя\n" +"\n" +" git symbolic-ref <имя> <ссылка>\n" +"\n" +"Создайте символическую ссылку с именем \"refs/rainbow\"!" + +msgid "" +"Instead of removing an entry from the index and adding one with the same name, you can also directly update that entry!\n" +"\n" +"Put the content you want in a file with a matching name, and then run\n" +"\n" +" git update-index \n" +"\n" +"This will create a new blob, and update the hash of the entry to that blob.\n" +"\n" +"Update an entry in the index!" +msgstr "" +"Вместо удаления записи из индекса и добавления новой с тем же именем, вы также можете напрямую обновить эту запись!\n" +"\n" +"Поместите желаемое содержимое в файл с соответствующим именем, а затем выполните\n" +"\n" +" git update-index <файл>\n" +"\n" +"Это создаст новый блоб и обновит хэш записи до этого блоба.\n" +"\n" +"Обновите запись в индексе!" + +msgid "Interesting!" +msgstr "Интересно!" + +msgid "Interior design" +msgstr "Дизайн интерьера" + +msgid "" +"Introduce yourself using\n" +"\n" +" git config --global user.name Firstname\n" +" git config --global user.email \"your@mail.com\"" +msgstr "" +"Представьтесь, используя\n" +"\n" +" git config --global user.name Имя\n" +" git config --global user.email \"ваша@почта.com\"`" + +msgid "Introduce yourself." +msgstr "Представьтесь." + +msgid "Introduction" +msgstr "Введение" + +msgid "Is at work." +msgstr "На работе." + +msgid "Is holding a key in its beak." +msgstr "Держит ключ в клюве." + +msgid "Is my phone upside down? App" +msgstr "Приложение \"Мой телефон перевернут?\"" + +msgid "Is on the ground." +msgstr "Лежит на земле." + +msgid "It's been blown out." +msgstr "Ее задули." + +msgid "It's burning!" +msgstr "Она горит!" + +msgid "It's holding a lollipop." +msgstr "Он держит леденец." + +msgid "It's sleeping." +msgstr "Он спит." + +msgid "Jump to the commit, and update the index. Keep the current environment." +msgstr "Перейти к коммиту и обновить индекс. Сохранить текущее окружение." + +msgid "Just woke up. Is hungry." +msgstr "Только проснулся. Голоден." + +msgid "Less-good version" +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 "" +"Давайте добавим ваше имя в наш список студентов!\n" +"\n" +"У меня уже есть второй коммит этого в моей машине времени - давайте работать вместе!" + +msgid "" +"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.\n" +"\n" +"You can create or update a ref with\n" +"\n" +" git update-ref refs/ \n" +"\n" +"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.\n" +"\n" +"Create refs that point to all objects in this repository!" +msgstr "" +"Давайте посмотрим на \"ссылки\" (сокращенно от \"references\")! Ссылки - это не объекты, а скорее очень простые указатели на объекты! Они могут помочь вам отслеживать, что где находится.\n" +"\n" +"Вы можете создать или обновить ссылку с помощью\n" +"\n" +" git update-ref refs/<имя_ссылки> <новое_значение>\n" +"\n" +"Убедитесь, что имя ссылки всегда начинается с \"refs/\"! Это соглашение, которое помогает Git находить все созданные вами ссылки. Если вы забудете \"refs/\", вы не увидите ссылку.\n" +"\n" +"Создайте ссылки, которые указывают на все объекты в этом репозитории!" + +msgid "" +"Let's work together with others! Your friend has their own repo at the URL `../friend` - you can add it using\n" +"\n" +" git remote add [name] [URL]\n" +"\n" +"where `[name]` is an arbitrary, short name you pick for the remote.\n" +"\n" +"When you've done that, you can get all commits from that remote using\n" +"\n" +" git pull friend\n" +"\n" +"There's a letter for you!" +msgstr "" +"Давайте работать вместе с другими! У вашего друга есть свой собственный репозиторий по URL `../friend` - вы можете добавить его, используя\n" +"\n" +" git remote add [имя] [URL]\n" +"\n" +"где `[имя]` - это произвольное, короткое имя, которое вы выбираете для удаленного репозитория.\n" +"\n" +"Когда вы это сделаете, вы можете получить все коммиты с этого удаленного репозитория, используя\n" +"\n" +" git pull friend\n" +"\n" +"Для вас есть письмо!" + +msgid "Level description here!" +msgstr "Описание уровня здесь!" + +msgid "Level name here!" +msgstr "Название уровня здесь!" + +msgid "Levels" +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 "" +"Жизнь полна опасностей, верно? Даже по дороге в школу, кажется, много рисков!\n" +"\n" +"Этот понедельник особенно плох. Вы добрались до школы, но есть некоторые временные линии, которые вы определенно не хотите сохранять." + +msgid "Line 1" +msgstr "Строка 1" + +msgid "Line 2" +msgstr "Строка 2" + +msgid "Line 2, gnihihi" +msgstr "Строка 2, хихихи" + +msgid "Living dangerously" +msgstr "Жить опасно" + +msgid "Look at your friend's suggestion, make a compromise, and push it back." +msgstr "Посмотри на предложение твоего друга, найди компромисс и отправь его обратно." + +msgid "Looking into the past" +msgstr "Заглядывая в прошлое" + +msgid "Looks happy. :)" +msgstr "Выглядит счастливым. :)" + +msgid "Looks very hungry." +msgstr "Выглядит очень голодным." + +msgid "Make a breakfast compromise in the 'main' branch." +msgstr "Найдите компромисс по завтраку в ветке 'main'." + +msgid "Make a change to the candle." +msgstr "Измените свечу." + +msgid "Make a commit \\o/" +msgstr "Сделайте коммит \\o/" + +msgid "Make a commit from the current index." +msgstr "Сделать коммит из текущего индекса." + +msgid "Make a commit where all files are deleted ¯_(^^)/¯" +msgstr "Сделайте коммит, в котором удалены все файлы ¯_(^^)/¯" + +msgid "Make a commit where all files contain \"x\"." +msgstr "Сделайте коммит, в котором все файлы содержат \"x\"." + +msgid "Make a commit where you rename the file b to \"x\"." +msgstr "Сделайте коммит, в котором вы переименовываете файл b в \"x\"." + +msgid "Make a commit, but faster!" +msgstr "Сделай коммит, но быстрее!" + +msgid "Make a commit." +msgstr "Сделайте коммит." + +msgid "Make a copy of a file." +msgstr "Сделать копию файла." + +msgid "Make a new commit containing your current environment! Type in a description of what changed!" +msgstr "Сделайте новый коммит, содержащий ваше текущее окружение! Введите описание того, что изменилось!" + +msgid "Make a new commit that reverts the changes of the specified commit." +msgstr "Создайте новый коммит, который отменяет изменения указанного коммита." + +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 "" +"Сделайте новый коммит, автоматически добавив все изменения в индекс.\n" +"Вас попросят ввести краткое описание того, что вы изменили." + +msgid "Make a second commit that only records a single change." +msgstr "Сделайте второй коммит, который фиксирует только одно изменение." + +msgid "Make a snapshot of the glass (a \"commit\")" +msgstr "Сделайте снимок стакана (\"коммит\")" + +msgid "Make changes to all files!" +msgstr "Внесите изменения во все файлы!" + +msgid "Make changes to all three objects, to form a logical sequence of events!" +msgstr "Внесите изменения во все три объекта, чтобы сформировать логическую последовательность событий!" + +msgid "Make changes to the events in your current timeline, back to the commit you drag this to." +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 "Make sure the colors match your bed's color." +msgstr "Убедитесь, что цвета соответствуют цвету вашей кровати." + +msgid "Making backups" +msgstr "Создание резервных копий" + +msgid "Merge the specified timeline into yours. If necessary, will create a merge commit." +msgstr "Слейте указанную временную линию в свою. При необходимости будет создан коммит слияния." + +msgid "Merging" +msgstr "Слияние" + +msgid "Merging popped stash" +msgstr "Слияние извлеченных из тайника изменений" + +msgid "Merging timelines" +msgstr "Слияние временных линий" + +msgid "Move the branch you're on to the specified commit." +msgstr "Переместите ветку, на которой вы находитесь, к указанному коммиту." + +msgid "Moving branches around" +msgstr "Перемещение веток" + +msgid "Moving through time" +msgstr "Перемещение во времени" + +msgid "My first parent's parents has to be the same as my second parent's parent." +msgstr "Родители моего первого родителя должны быть такими же, как родитель моего второго родителя." + +msgid "My master password is a1b2c3d4e5" +msgstr "Мой мастер-пароль a1b2c3d4e5" + +msgid "" +"Neat! It even still looks a bit comfortable!\n" +"\n" +"You head out, eager for your first lesson at time travel school!" +msgstr "" +"Классно! Она даже все еще выглядит немного удобной!\n" +"\n" +"Вы отправляетесь, с нетерпением ожидая своего первого урока в школе путешествий во времени!" + +msgid "Next level" +msgstr "Следующий уровень" + +msgid "Nice stash you got there! :)" +msgstr "Хороший у вас тайник! :)" + +msgid "Nice to meet you!" +msgstr "Приятно познакомиться!" + +msgid "Nice!" +msgstr "Отлично!" + +msgid "" +"Nice!\n" +"\n" +"Can you make a different tree? Modify the index, then call git write-tree again!" +msgstr "" +"Отлично!\n" +"\n" +"Можете ли вы создать другое дерево? Измените индекс, затем снова вызовите git write-tree!" + +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 "Nice! You can try making some additional commits. When you feel comfortable, click on \"Next Level\"." +msgstr "Отлично! Вы можете попробовать сделать еще несколько коммитов. Когда почувствуете себя уверенно, нажмите \"Следующий уровень\"." + +msgid "Nice! You tagged your first commit :)" +msgstr "Отлично! Вы пометили свой первый коммит :)" + +msgid "No sleep required" +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 "" +"Обратите внимание, что есть два варианта \"переместиться в конец временной линии\":\n" +"\n" +"Во-первых, вы можете напрямую переместиться к коммиту, как мы делали это раньше.\n" +"\n" +"И во-вторых, вы можете переместиться к метке ветки. В этом случае, когда вы делаете новый коммит, ветка будет расти вместе с вами и по-прежнему указывать на конец временной линии!" + +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 "" +"Обратите внимание, как другие временные линии и коммиты все еще на месте - если что-то пойдет не так, вы также можете вернуться к ним.\n" +"\n" +"На самом деле очень трудно уничтожить что-либо с помощью вашей машины времени." + +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 "" +"Теперь, когда ваша комната выглядит опрятно, вы можете начать распаковывать свои вещи. Вы привезли с собой два новых предмета мебели и с яркой улыбкой\n" +"замечаете, что их цвета совпадают с цветом вашей кровати!\n" +"\n" +"Соберите свои два предмета мебели, сыграв карту touch.\n" +"Затем назовите свою мебель - вы можете выбрать любое название.\n" +"\n" +"Убедитесь, что цвета совпадают! Цвет кровати вы можете найти в ее описании.\n" +"Не забудьте также добавить цвет и описание для вашей новой мебели!" + +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 "" +"Теперь вы можете легко перемещаться между этими ветками (используя git checkout) - попробуйте!\n" +"\n" +"Ваш друг рад, что вы пришли на день рождения, и вы также получили автограф на билете на концерт. Ура!" + +msgid "Oh My Git!" +msgstr "Oh My Git!" + +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" +"\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 "" +"О нет, мы сделали плохой коммит! Как мы можем отменить создание коммита и вернуться к моменту, когда мы можем попробовать снова?\n" +"\n" +"Ответ — использование `git reset [коммит]`, которое делает две вещи:\n" +"\n" +"Сбрасывает ссылку текущей ветки на указанный вами коммит.\n" +"\n" +"И сбрасывает индекс к этому коммиту.\n" +"\n" +"Это никак не изменяет ваш рабочий каталог, что означает, что после этого вы можете снова попытаться сделать нужный коммит." + +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 "" +"Хорошо - оказывается, экономия времени по утрам за счет использования параллельных вселенных противоречит правилам Международной Ассоциации Путешествий во Времени. В конце концов, вам придется выполнять свои задачи последовательно.\n" +"\n" +"Видите карту \"rebase\"? Когда вы перетаскиваете ее на коммит, она скопирует события из вашей текущей временной линии после указанного! Таким образом, создайте чистую, линейную временную линию, где вы посещаете все три магазина.\n" +"\n" +"Опять же, мы хотим сделать это нашей базовой реальностью - ветка \"main\" должна указывать на эту временную линию!" + +msgid "Okay!" +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 "" +"Хорошо, это вроде бы работает.\n" +"\n" +"Но вы немного обеспокоены тем, что у вас окажутся сотни копий этой формы, и будет трудно отслеживать их все.\n" +"\n" +"И особенно при работе с другими людьми, отправка копий туда и обратно не кажется идеальным решением.\n" +"\n" +"Вам не терпится опробовать эти машины времени!" + +msgid "" +"Omnomnom!\n" +"\n" +"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. :)" +msgstr "" +"Омномном!\n" +"\n" +"По техническим причинам вы пока не можете использовать cd в этом прототипе. Но в любом случае взаимодействия с файловой системой будет немного. :)" + +msgid "On second thought, maybe you even prefer the ice cream timeline to the main one? :)" +msgstr "Хотя, если подумать, может быть, вы даже предпочитаете временную линию с мороженым основной? :)" + +msgid "" +"On the command line, you can easily delete all files ending in -web using this command:\n" +"\n" +" rm *web" +msgstr "" +"В командной строке вы можете легко удалить все файлы, заканчивающиеся на -web, используя эту команду:\n" +"\n" +" rm *web" + +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 "" +"Один из ваших коллег здесь напутал и поместил ветки в неправильные временные линии!\n" +"\n" +"Вы могли бы удалить и заново создать эти ветки, но вы также можете напрямую переместить их в другие коммиты, используя\n" +"\n" +" git checkout\n" +"\n" +"на именах веток, а затем используя\n" +"\n" +" git reset --hard\n" +"\n" +"на коммите, где вы хотите, чтобы была ветка.\n" +"\n" +"Ветка с пончиком находится в правильном месте, но временная линия все еще неполная - убедитесь, что вы действительно съели пончик в этой ветке!" + +msgid "Please enter a value:" +msgstr "Пожалуйста, введите значение:" + +msgid "One step after another" +msgstr "Шаг за шагом" + +msgid "Only add one of these changes!" +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 "" +"Ой - вы удалили файл \"эссе\", над которым работали всю ночь!\n" +"\n" +"К счастью, Git здесь, чтобы помочь! Вы можете использовать `git checkout`, чтобы восстановить файл!" + +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 "" +"Ой, похоже, здесь что-то напутано. Можете ли вы вернуть события в правильном порядке?\n" +"\n" +"Есть два способа сделать это: Вы можете перетащить карту \"interactive rebase\" на коммит перед тем, который вы хотите изменить, затем изменить порядок строк в открывшемся файле и сохранить его.\n" +"\n" +"Или вы можете сбросить основной тег на самый первый коммит, а затем выбрать отдельные коммиты (`cherry-pick`) в нужном порядке. У вас есть карты для обоих подходов!" + +msgid "Order all tree branches into one and move the main branch ref" +msgstr "Упорядочите все ветви дерева в одну и переместите ссылку основной ветви" + +msgid "Original score by winniehell" +msgstr "Оригинальная музыка от winniehell" + +msgid "" +"Other times, you might want to rename a file in the next commit. Use\n" +"\n" +" git mv [file] [new name]\n" +"\n" +"for that. The effect is very similar as if you had created a copy with a new name, and removed the old version." +msgstr "" +"В других случаях вы можете захотеть переименовать файл в следующем коммите. Используйте\n" +"\n" +" git mv [файл] [новое имя]\n" +"\n" +"для этого. Эффект очень похож на то, как если бы вы создали копию с новым именем и удалили старую версию." + +msgid "Pick the timeline that's clearer, and make the alarm go off!" +msgstr "Выберите более понятную ветку и включите будильник!" + +msgid "Pop from Stash" +msgstr "Извлечь из тайника (Pop from Stash)" + +msgid "Problems" +msgstr "Проблемы" + +msgid "Pull from the remote." +msgstr "Получите данные с удаленного репозитория." + +msgid "Put the events in your current timeline on top of the specified one." +msgstr "Поместите события из вашей текущей временной линии поверх указанной." + +msgid "Quit" +msgstr "Выход" + +msgid "Rebasing" +msgstr "Перебазирование (Rebasing)" + +msgid "Reload" +msgstr "Перезагрузить" + +msgid "Remote Tags" +msgstr "Удаленные теги" + +msgid "Remotes" +msgstr "Удалённые репозитории" + +msgid "Remove all changes in your local files!" +msgstr "Удалите все изменения в ваших локальных файлах!" + +msgid "Remove all spider webs." +msgstr "Уберите всю паутину." + +msgid "Removing tags" +msgstr "Удаление тегов" + +msgid "Rename a file in the next commit" +msgstr "Переименовать файл в следующем коммите" + +msgid "Rename a file." +msgstr "Переименовать файл." + +msgid "Rename the bed into something else, and give it a new description!" +msgstr "Переименуйте кровать во что-то другое и дайте ей новое описание!" + +msgid "Rename the remote with the typo (using `git remote rename [old name] [new name]`)" +msgstr "Переименуйте удаленный репозиторий с опечаткой (используя `git remote rename [старое имя] [новое имя]`)" + +msgid "Reorder the commits to dress yourself in the correct way" +msgstr "Измените порядок коммитов, чтобы одеться правильно" + +msgid "Reordering events" +msgstr "Изменение порядка событий" + +msgid "Repeat the specified action on top of your current timeline." +msgstr "Повторите указанное действие поверх вашей текущей временной линии." + +msgid "Repo name" +msgstr "Имя репозитория" + +msgid "Reset changes in a local file." +msgstr "Сбросить изменения в локальном файле." + +msgid "Reset the changes in the green and blue candles!" +msgstr "Сбросьте изменения в зелёной и синей свечах!" + +msgid "Reset the index version of a file to the version in the commit you're on." +msgstr "Сбросить версию файла в индексе до версии в коммите, на котором вы находитесь." + +msgid "Resetting files in the index" +msgstr "Сброс файлов в индексе" + +msgid "Restore a deleted file" +msgstr "Восстановить удаленный файл" + +msgid "Restore a file from the past" +msgstr "Восстановить файл из прошлого" + +msgid "Restore sisterly peace." +msgstr "Восстановите сестринский мир." + +msgid "Restore the essay to contain \"important content\"" +msgstr "Восстановите эссе, чтобы оно содержало \"важное содержимое\"" + +msgid "Restore the version from the last commit." +msgstr "Восстановите версию из последнего коммита." + +msgid "Right! Having each change in its own commit makes it easier to understand what's going on! Let's learn how to do that!" +msgstr "Верно! Наличие каждого изменения в собственном коммите облегчает понимание происходящего! Давайте научимся это делать!" + +msgid "SPECIAL" +msgstr "ОСОБЕННЫЙ" + +msgid "Same for its child! \\o/" +msgstr "То же самое для его дочернего элемента! \\o/" + +msgid "Sandbox" +msgstr "Песочница" + +msgid "Sandbox with a remote" +msgstr "Песочница с удаленным репозиторием" + +msgid "Sandbox with three commits" +msgstr "Песочница с тремя коммитами" + +msgid "Save" +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 which past commit you were on before. How can you find out?\n" +"\n" +"There's a convenient command that shows you all the places your `HEAD` has pointed to in the past:\n" +"\n" +" git reflog" +msgstr "" +"Допустим, вы смотрели что-то в прошлом, а затем переключились обратно на основную ветку.\n" +"\n" +"Но затем вы ооочень отвлеклись, и после обеденного перерыва не можете вспомнить, на каком прошлом коммите вы были. Как это выяснить?\n" +"\n" +"Есть удобная команда, которая показывает все места, на которые указывал ваш `HEAD` в прошлом:\n" +"\n" +" git reflog" + +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 "" +"Видите тёмную тень за иконками? Это версия файла в последнем коммите!\n" +"\n" +"Например, эти свечи были задуты, и это изменение было добавлено.\n" +"\n" +"Но вы решаете, что это была ошибка! Вы хотите задуть только красную свечу в следующем коммите!\n" +"\n" +"Если вы уже обновили индекс изменённым файлом, но хотите сбросить его, вы можете использовать `git reset`!" + +msgid "Set your email address." +msgstr "Установите свой адрес электронной почты." + +msgid "" +"Set your name.\n" +"\n" +"(Will not change anything outside of this game.)" +msgstr "" +"Установите свое имя.\n" +"\n" +"(Ничего не изменит вне этой игры.)" + +msgid "Show what changed in the commit." +msgstr "Показать, что изменилось в коммите." + +msgid "" +"So a tree describes a directory structure at a specific point in time.\n" +"\n" +"It would be nice if we could remember when that state existed, and who authored it, right?\n" +"\n" +"Enter: commits. They are objects that point to a tree and contain some additional metadata. You can create a commit using\n" +"\n" +" git commit-tree -m \"Description of your commit\"\n" +"\n" +"Make a commit from the tree in this repository!" +msgstr "" +"Итак, дерево описывает структуру каталогов в определенный момент времени.\n" +"\n" +"Было бы неплохо, если бы мы могли запомнить, когда это состояние существовало и кто его автор, верно?\n" +"\n" +"Представляем: коммиты. Это объекты, которые указывают на дерево и содержат некоторые дополнительные метаданные. Вы можете создать коммит, используя\n" +"\n" +" git commit-tree <дерево> -m \"Описание вашего коммита\"\n" +"\n" +"Сделайте коммит из дерева в этом репозитории!" + +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 "" +"До сих пор, когда мы делали коммит, мы всегда записывали текущее состояние всех объектов, верно?\n" +"\n" +"Но Git позволяет вам выбирать, какие изменения вы хотите поместить в коммит!\n" +"\n" +"Чтобы узнать, как это работает, нам нужно узнать об \"индексе\"! В индексе мы можем подготовить то, что будет в следующем коммите. В этой игре индекс представлен синей аурой вокруг иконок в файловом браузере!\n" +"\n" +"Изначально индекс пуст. Чтобы сделать коммит, содержащий новый файл, нам нужно его добавить!" + +msgid "So the tree has exactly one child, and it is a tree!" +msgstr "Итак, у дерева ровно один дочерний элемент, и это дерево!" + +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 "" +"Итак, вы решили подать заявление в школу путешествий во времени, чтобы научиться пользоваться этой машиной времени под названием \"Git\"!\n" +"\n" +"Как захватывающе!\n" +"\n" +"Вы почти закончили с документами! Вам просто нужно указать еще одну причину, почему вы хотите изучать Git." + +msgid "" +"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.\n" +"\n" +"This allows you to have smaller commits, that describe better what you changed!\n" +"\n" +"The command for this is the same - git add!" +msgstr "" +"Итак, вы начинаете работать и вносите изменения в свои файлы! Git позволяет вам выбрать, какие из этих изменений вы хотите поместить в следующий коммит. Это похоже на обновление версии файла в индексе до новой версии.\n" +"\n" +"Это позволяет вам делать более мелкие коммиты, которые лучше описывают, что вы изменили!\n" +"\n" +"Команда для этого та же - git add!" + +msgid "" +"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!\n" +"\n" +"What happens if you have already update the index, like in file c? You have to reset the index first!" +msgstr "" +"Итак, вы внесли изменения в свои файлы, но решили, что не хотите их сохранять! Для этого можно использовать git checkout!\n" +"\n" +"Что произойдет, если вы уже обновили индекс, как в файле c? Сначала нужно сбросить индекс!" + +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." +msgstr "" +"Некоторые из ваших коммитов могут быть особенными. Возможно, вы достигли важной вехи или нового номера версии.\n" +"\n" +"Вы можете пометить эти коммиты специальным флагом, называемым 'тег'.\n" +"\n" +"Напишите\n" +"\n" +" git tag <имя-тега>\n" +"\n" +"чтобы пометить ваш коммит." + +msgid "" +"Sometimes you want to merge two commits, but a merge conflict occurs that you currently don't want to resolve.\n" +"\n" +"In these situations you can abort the merge to merge later. Use\n" +"git merge --abort\n" +"when you are in a merge process.\n" +"\n" +"Try to merge both commits and abort the merge afterwards." +msgstr "" +"Иногда вы хотите слить два коммита, но возникает конфликт слияния, который вы в данный момент не хотите разрешать.\n" +"\n" +"В таких ситуациях вы можете прервать слияние, чтобы выполнить его позже. Используйте\n" +"git merge --abort\n" +"когда вы находитесь в процессе слияния.\n" +"\n" +"Попробуйте слить оба коммита, а затем прервать слияние." + +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 "" +"Иногда временные линии противоречат друг другу.\n" +"\n" +"Например, в данном случае один из наших клиентов хочет слить эти временные линии, но в обеих он ел разные вещи на завтрак.\n" +"\n" +"Попробуйте слить их! Вы заметите, что возникнет конфликт! Машина времени оставит решение за вами: вы можете отредактировать проблемный элемент, она покажет вам конфликтующие разделы. Вы можете сохранить любую из двух версий или создать их комбинацию! Удалите маркеры >>>, <<< и === и сделайте новый коммит для завершения слияния!\n" +"\n" +"Пусть ваша окончательная временная линия будет \"main\"." + +msgid "" +"Sometimes, you might want to record the order in which things changed, instead of making a single commit.\n" +"\n" +"What happened here? Make two commits from the changes (using the \"add\" card), in an order that makes sense!" +msgstr "" +"Иногда вы можете захотеть записать порядок, в котором происходили изменения, вместо того, чтобы делать один коммит.\n" +"\n" +"Что здесь произошло? Сделайте два коммита из изменений (используя карту \"add\"), в осмысленном порядке!" + +msgid "Split a commit!" +msgstr "Разделить коммит!" + +msgid "Start looking for the commit where things got bad." +msgstr "Начать поиск коммита, в котором все пошло не так." + +msgid "Stash" +msgstr "Тайник (Stash)" + +msgid "Stashed changes are in a new branch! :)" +msgstr "Изменения из тайника теперь в новой ветке! :)" + +msgid "Stashing" +msgstr "Сохранение в тайнике (Stashing)" + +msgid "State that the current commit is bad! When you're automatically transferred, keep playing the good and bad cards!" +msgstr "Укажите, что текущий коммит плохой! Когда вас автоматически перенесут, продолжайте играть картами good и bad!" + +msgid "State that the current commit is good! When you're automatically transferred, keep playing the good and bad cards!" +msgstr "Укажите, что текущий коммит хороший! Когда вас автоматически перенесут, продолжайте играть картами good и bad!" + +msgid "Step by step" +msgstr "Шаг за шагом" + +msgid "Suddenly, you fall down, splash into stinking water, and are eaten by an alligator." +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 "" +"Внезапно ваша кошка запрыгивает на стол, хватает анкету и убегает! О нет. Вся ваша тяжелая работа насмарку!\n" +"\n" +"Вам явно нужно лучшее решение.\n" +"\n" +"(Нажмите \"Следующий уровень\", как только будете готовы!)" + +msgid "Support us! (Open two browser tabs)" +msgstr "Поддержите нас! (Откроются две вкладки браузера)" + +msgid "Sure, I'll install it!" +msgstr "Конечно, я установлю!" + +msgid "Tagging later" +msgstr "Добавление тега позже" + +msgid "Tags" +msgstr "Метки" + +msgid "Text here" +msgstr "Текст здесь" + +msgid "Thanks!" +msgstr "Спасибо!" + +msgid "" +"That chicken is running around a lot, and changing often. We don't want to have it in our commits.\n" +"\n" +"Add it to the file .gitignore, and try using `git add .`!" +msgstr "" +"Эта курица много бегает и часто меняется. Мы не хотим, чтобы она была в наших коммитах.\n" +"\n" +"Добавьте ее в файл .gitignore и попробуйте использовать `git add .`!" + +msgid "The Index" +msgstr "Индекс" + +msgid "The ball is now touching the book." +msgstr "Шар теперь касается книги." + +msgid "The bike shed should be ???" +msgstr "Велосипедный сарай должен быть ???" + +msgid "The bike shed should be blue" +msgstr "Велосипедный сарай должен быть синим" + +msgid "The bike shed should be green" +msgstr "Велосипедный сарай должен быть зеленым" + +msgid "The bikeshed should be ???" +msgstr "Велосипедный сарай должен быть ???" + +msgid "The bikeshed should be blue" +msgstr "Велосипедный сарай должен быть синим" + +msgid "The bikeshed should be green" +msgstr "Велосипедный сарай должен быть зеленым" + +msgid "The book has fallen over." +msgstr "Книга упала." + +msgid "The candle has been blown out." +msgstr "Свечу задули." + +msgid "The candle is burning with a blue flame." +msgstr "Свеча горит синим пламенем." + +msgid "The command line" +msgstr "Командная строка" + +msgid "The commit message of that commit is \"More numbers\"." +msgstr "Сообщение этого коммита — \"More numbers\"." + +msgid "The commit with the typo is not part of the main branch anymore." +msgstr "Коммит с опечаткой больше не является частью основной ветки." + +msgid "" +"The events and timelines you see are always only what your own time machine knows about!\n" +"\n" +"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.\n" +"\n" +"Then, add another event on top (what does Sam have for dinner?), and push the result, to transfer it back to your sidekick!\n" +"\n" +"You can only ever manipulate things in your own time machine (the one on the bottom)." +msgstr "" +"События и временные линии, которые вы видите, - это всегда только то, что знает ваша собственная машина времени!\n" +"\n" +"Конечно, временные агенты не обязаны работать в одиночку! Здесь ваш помощник уже подготовил для вас слияние! Вы можете использовать карту \"pull\", чтобы перенести его в свою машину времени.\n" +"\n" +"Затем добавьте еще одно событие сверху (что Сэм ест на ужин?) и push результат, чтобы передать его обратно вашему помощнику!\n" +"\n" +"Вы можете манипулировать вещами только в своей собственной машине времени (той, что внизу)." + +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 "" +"Первый день в Школе Путешествий во Времени подходит к концу, и вы получаете ключ от своей комнаты.\n" +"Полные восторга, вы открываете дверь и обнаруживаете... паутину! Паутина повсюду!\n" +"\n" +"Уберите всю паутину, которую сможете найти, с помощью карты удаления!" + +msgid "The friend got a fifth line from you" +msgstr "Друг получил от тебя пятую строку" + +msgid "The friend got a third line from you" +msgstr "Друг получил от тебя третью строку" + +msgid "The glass is full of water." +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 "The remote with the typo is gone." +msgstr "Удаленный репозиторий с опечаткой исчез." + +msgid "The team's main branch no longer contains the bad thing." +msgstr "Командная ветка main больше не содержит плохой вещи." + +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 "" +"Желтые ящики - это застывшие моменты времени, мы называем их \"коммитами\"! Вы можете путешествовать между ними, используя карту \"checkout\"! (Попробуйте!)\n" +"\n" +"Сможете ли вы выяснить, что здесь произошло? Затем, находясь на последнем коммите, отредактируйте файлы, чтобы исправить проблему, и сделайте новый коммит!" + +msgid "" +"There is a time-saving trick, where instead of a plain git commit, you can use\n" +"\n" +" git commit -a\n" +"\n" +"This will automatically add all changes you made to local files! Very convenient." +msgstr "" +"Есть трюк для экономии времени, где вместо обычного git commit вы можете использовать\n" +"\n" +" git commit -a\n" +"\n" +"Это автоматически добавит все изменения, которые вы внесли в локальные файлы! Очень удобно." + +msgid "" +"There's a simple command to remove all objects that are not referenced by anything:\n" +"\n" +" git prune\n" +"\n" +"Remove all blobs in this repository." +msgstr "" +"Есть простая команда для удаления всех объектов, на которые ничего не ссылается:\n" +"\n" +" git prune\n" +"\n" +"Удалите все блобы в этом репозитории." + +msgid "" +"There's another way to add an entry to the index directly:\n" +"\n" +" git update-index --add --cacheinfo ,,\n" +"\n" +"The first three numbers of the mode describe the type of the entry, \"100\" is a regular file.\n" +"\n" +"The second three number describe the permissions. Only \"644\" (non-executable) and \"755\" (executable) are supported.\n" +"\n" +"You can insert the hash of an object into the terminal by right-clicking on it! :)" +msgstr "" +"Есть еще один способ добавить запись в индекс напрямую:\n" +"\n" +" git update-index --add --cacheinfo <режим>,<хэш_блоба>,<имя>\n" +"\n" +"Первые три числа режима описывают тип записи, \"100\" - это обычный файл.\n" +"\n" +"Вторые три числа описывают права доступа. Поддерживаются только \"644\" (неисполняемый) и \"755\" (исполняемый).\n" +"\n" +"Вы можете вставить хэш объекта в терминал, щелкнув по нему правой кнопкой мыши! :)" + +msgid "These are your cards! Drag them to highlighted areas to play them!" +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 "Эти игральные карты разработаны так, чтобы их было легко использовать и запоминать! Мы бы посоветовали придерживаться их, если у вас не так много опыта работы с Git!" + +msgid "This blob really should not exist" +msgstr "Этого blob действительно не должно существовать" + +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 "Это подсказка! Это подсказка! Это подсказка! Это подсказка! Это подсказка! Это подсказка! Это подсказка! Это подсказка! Это подсказка!" + +msgid "This is a virus" +msgstr "Это вирус" + +msgid "This is an empty sandbox you can play around in." +msgstr "Это пустая песочница, в которой вы можете поиграть." + +msgid "This is not really a good test for the winning condition..." +msgstr "Это не очень хороший тест для условия победы..." + +msgid "" +"This is prototype #1 for the Git learning game by @bleeptrack and @blinry. Thanks for checking it out! <3\n" +"\n" +"You can interact with the repository labelled \"yours\" by typing Bash commands in the terminal below! The visualization will show you its internal status.\n" +"\n" +"Let's get started by initializing an empty Git repository in the current directory by typing:\n" +"\n" +" git init" +msgstr "" +"Это прототип №1 обучающей игры по Git от @bleeptrack и @blinry. Спасибо, что заглянули! <3\n" +"\n" +"Вы можете взаимодействовать с репозиторием с меткой \"yours\", вводя команды Bash в терминале ниже! Визуализация покажет вам его внутреннее состояние.\n" +"\n" +"Давайте начнем с инициализации пустого репозитория Git в текущем каталоге, набрав:\n" +"\n" +" git init" + +msgid "This is the time machine of another person! To interact with it, you need special commands!" +msgstr "Это машина времени другого человека! Чтобы взаимодействовать с ней, нужны особые команды!" + +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 "Это ваш терминал! Все команды выполняются здесь, и вы видите их вывод. Вы также можете вводить здесь свои собственные команды!" + +msgid "" +"This piggy bank belongs to the big sister.\n" +"It contains 10 coins." +msgstr "" +"Эта копилка принадлежит старшей сестре.\n" +"В ней 10 монет." + +msgid "" +"This piggy bank belongs to the big sister.\n" +"It is empty." +msgstr "" +"Эта копилка принадлежит старшей сестре.\n" +"Она пуста." + +msgid "This time, you're making a lot of backup copies - you can look at them by clicking on them!" +msgstr "На этот раз вы делаете много резервных копий - вы можете посмотреть их, кликнув по ним!" + +msgid "Tip!" +msgstr "Подсказка!" + +msgid "" +"Tip: You can also use a command like this to create a blob in a single line:\n" +"\n" +" echo \"awesome content\" | git hash-object -w --stdin\n" +"\n" +"Did you already notice that you can drag and drop all objects? :)" +msgstr "" +"Совет: Вы также можете использовать команду вроде этой, чтобы создать блоб в одну строку:\n" +"\n" +" echo \"отличное содержимое\" | git hash-object -w --stdin\n" +"\n" +"Вы уже заметили, что можете перетаскивать все объекты? :)" + +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 "" +"To remove an entry from the index, use a command like this:\n" +"\n" +" git update-index --force-remove \n" +"\n" +"Remove all entries from the index!" +msgstr "" +"Чтобы удалить запись из индекса, используйте команду вроде этой:\n" +"\n" +" git update-index --force-remove <файл>\n" +"\n" +"Удалите все записи из индекса!" + +msgid "To the survey /o/" +msgstr "К опросу /o/" + +msgid "Toggle music" +msgstr "Вкл/выкл музыку" + +msgid "Travel directly to the last yellow commit of the birthday timeline, make a change to 'you', and make a commit" +msgstr "Переместитесь напрямую к последнему желтому коммиту временной линии дня рождения, внесите изменение в 'you' и сделайте коммит" + +msgid "Travel to the blue 'concert' branch, make a change to 'you', and a commit." +msgstr "Переместитесь к синей ветке 'concert', внесите изменение в 'you' и сделайте коммит." + +msgid "" +"Trees can also point to other trees! This way, they can describe nested directory structures.\n" +"\n" +"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.\n" +"\n" +"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." +msgstr "" +"Деревья также могут указывать на другие деревья! Таким образом, они могут описывать вложенные структуры каталогов.\n" +"\n" +"Когда вы добавляете файл внутри каталога в индекс, а затем вызываете `git write-tree`, это создаст вложенное дерево для каталога и прикрепит к нему блоб.\n" +"\n" +"Чтобы решить этот уровень, постройте маленькую фигурку из палочек, как показано слева - дерево, которое указывает на два блоба, а также на дерево, которое указывает на два блоба." + +msgid "Undo a bad commit" +msgstr "Отменить плохой коммит" + +msgid "Unexpected Roommates" +msgstr "Неожиданные соседи по комнате" + +msgid "Update" +msgstr "Обновить" + +msgid "Update files in the index" +msgstr "Обновление файлов в индексе" + +msgid "Update the index version of the file to its current real content." +msgstr "Обновите версию файла в индексе до его текущего реального содержимого." + +msgid "Updating files in the index" +msgstr "Обновление файлов в индексе" + +msgid "Very useful!" +msgstr "Очень полезно!" + +msgid "Walking down the Main Lane." +msgstr "Прогулка по Основной линии." + +msgid "Walking down the Side Lane." +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 "Мы говорили о том, как отменить коммит и исправить его. Это помогает только тогда, когда вы еще не отправили его на удаленный репозиторий. Когда это произошло, и вы хотите полностью отменить эффекты коммита, ваш лучший вариант — `git revert`" + +msgid "" +"We're so glad to have you!\n" +"\n" +"Git can help you fix problems in the past! It allows you to collaborate with other students of time travel! It's really powerful, and it's really popular! I'll see you for your first lesson tomorrow!" +msgstr "" +"Мы так рады видеть вас!\n" +"\n" +"Git может помочь вам исправить проблемы в прошлом! Он позволяет вам сотрудничать с другими учениками путешествий во времени! Он действительно мощный и очень популярный! Увидимся на вашем первом уроке завтра!" + +msgid "Welcome to time travel school!" +msgstr "Добро пожаловать в школу путешествий во времени!" + +msgid "Welcome to time travel school! :) I'll see you for your first class tomorrow!" +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 "" +"Добро пожаловать на сегодняшний урок! Мы научимся делать коммиты с большей точностью!\n" +"\n" +"Взгляните на эти две временные линии. У них абсолютно одинаковый результат. Но одна из них значительно облегчает понимание того, что произошло." + +msgid "Welcome!" +msgstr "Добро пожаловать!" + +msgid "Well done :)" +msgstr "Отлично :)" + +msgid "" +"Well done!\n" +"\n" +"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!\n" +"\n" +"But first, let's look at some basics!\n" +"\n" +"(Click \"Next Level\" as soon as you're ready!)" +msgstr "" +"Отлично!\n" +"\n" +"Пустой репозиторий Git... ну, довольно пустой. Единственное, что всегда существует, это ссылка под названием \"HEAD\" - мы узнаем, что это такое, позже!\n" +"\n" +"Но сначала давайте рассмотрим некоторые основы!\n" +"\n" +"(Нажмите \"Следующий уровень\", как только будете готовы!)" + +msgid "Well done! :) The only problem is that you now have to walk all the way back home, again..." +msgstr "Отлично! :) Единственная проблема в том, что теперь вам снова придется идти пешком до самого дома..." + +msgid "Well done! Try travelling between the commits using git checkout, so you can look at their contents again!" +msgstr "Отлично! Попробуйте перемещаться между коммитами с помощью git checkout, чтобы снова посмотреть их содержимое!" + +msgid "Whatever..." +msgstr "Как скажешь..." + +msgid "When Things Go Wrong" +msgstr "Когда всё идёт не так" + +msgid "" +"When using the commit-tree command, you can optionally specify a parent:\n" +"\n" +" git commit-tree -m \"Description\" -p \n" +"\n" +"Make a string of three commits!\n" +"\n" +"Hint: You'll need a tree object. What could be the easiest way to obtain one?" +msgstr "" +"При использовании команды commit-tree вы можете опционально указать родителя:\n" +"\n" +" git commit-tree <дерево> -m \"Описание\" -p <родительский коммит>\n" +"\n" +"Создайте цепочку из трех коммитов!\n" +"\n" +"Подсказка: Вам понадобится объект-дерево. Какой самый простой способ его получить?" + +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 "" +"Когда мы меняем файлы, индекс сам по себе не изменится. Мы должны использовать `git add`, чтобы обновить индекс до изменённой версии файла.\n" +"\n" +"Давайте попробуем!\n" +"\n" +"Иконки в файловом браузере показывают, когда фактический файл (белый) и версия в индексе (синий) отличаются, и когда они одинаковы!" + +msgid "" +"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! :)\n" +"\n" +"What happens when you try pointing the symbolic ref directly to the blob using git update-ref?\n" +"\n" +"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!\n" +"\n" +"Weird, huh?" +msgstr "" +"Когда у вас есть символическая ссылка (ссылка, указывающая на другую ссылку), и вы решаете, что хотите, чтобы она снова стала обычной ссылкой (указывающей на объект), вас ждут неприятности! :)\n" +"\n" +"Что произойдет, если вы попытаетесь указать символическую ссылку прямо на блоб с помощью git update-ref?\n" +"\n" +"Ой! Оказывается, когда вы ссылаетесь на символическую ссылку, она ведет себя так, как если бы вы указали ссылку, на которую она указывает. Чтобы \"де-символизировать\" ее, используйте опцию --no-deref сразу после update-ref!\n" +"\n" +"Странно, да?" + +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" +"\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 "" +"Когда вы спрятали изменения в тайник и хотите вернуть их в рабочую директорию, используйте\n" +" git stash pop\n" +"\n" +"Это удалит изменения из стека тайника. Если вы хотите оставить их в стеке, используйте\n" +" git stash apply\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" + +msgid "" +"When you want to re-apply your changes but you already continued working on your file, you might get a merge conflict! Let's practice this situation.\n" +"Pop the changes from the stash with\n" +"\n" +" git stash pop\n" +"\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 "" +"Когда вы хотите повторно применить свои изменения, но уже продолжили работу над файлом, вы можете получить конфликт слияния! Давайте попрактикуемся в этой ситуации.\n" +"Извлеките изменения из тайника с помощью\n" +"\n" +" git stash pop\n" +"\n" +"и разрешите конфликт слияния. Закоммитьте разрешенные изменения и после этого очистите стек тайника.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" + +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" +"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 "" +"При работе с удаленными репозиториями теги не отправляются и не загружаются автоматически.\n" +"\n" +"Вы можете отправить тег с помощью\n" +" git push <удаленный_репозиторий> <имя_тега>\n" +"\n" +"Или все теги с помощью:\n" +" git push <удаленный_репозиторий> --tags\n" +"\n" +"Удаление тегов на удаленном репозитории работает с помощью:\n" +" git push <удаленный_репозиторий> --delete <имя_тега>\n" +"\n" +"Вы также можете синхронизировать\n" +" git fetch <удаленный_репозиторий> --prune --prune-tags\n" +"\n" +"Добавьте тег с именем \"v2\" к последнему коммиту и отправьте его на удаленный репозиторий. Также загрузите тег v1 в свой локальный репозиторий." + +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 "" +"Уф, хорошая работа! Это кажется гораздо лучшим исходом.\n" +"\n" +"Не стесняйтесь добавлять больше параллельных временных линий или делать их длиннее.\n" +"\n" +"Если вы готовы, наша следующая миссия уже ждет..." + +msgid "" +"Whew, we've covered a lot of things: Blobs! The index! Trees! Commits! Refs!\n" +"\n" +"You now know about almost everything about how Git repositories look like on the inside! We think that's pretty cool! :)\n" +"\n" +"Everything else is just convention and high-level commands that make interacting with the objects more convenient.\n" +"\n" +"We haven't covered:\n" +"\n" +"tag objects (they are the fourth object type - a bit like refs with a description and an author)\n" +"\n" +"configuration (allows you to specify remote repositories, for example)\n" +"\n" +"working with local files (which is, uh, arguably pretty important :P)\n" +"\n" +"Thanks for playing! You're welcome to check out the \"puzzle\" levels in the dropdown, some of them are more advanced!" +msgstr "" +"Уф, мы рассмотрели много всего: Блобы! Индекс! Деревья! Коммиты! Ссылки!\n" +"\n" +"Теперь вы знаете почти все о том, как репозитории Git выглядят изнутри! Мы думаем, это довольно круто! :)\n" +"\n" +"Все остальное - это просто соглашения и высокоуровневые команды, которые делают взаимодействие с объектами более удобным.\n" +"\n" +"Мы не рассмотрели:\n" +"\n" +"объекты-теги (это четвертый тип объектов - немного похожи на ссылки с описанием и автором)\n" +"\n" +"конфигурация (позволяет указывать удаленные репозитории, например)\n" +"\n" +"работа с локальными файлами (что, э-э, пожалуй, довольно важно :P)\n" +"\n" +"Спасибо за игру! Вы можете ознакомиться с уровнями-\"загадками\" в выпадающем списке, некоторые из них более продвинутые!" + +msgid "Wonderful! Now that you're getting familiar with the time machine, let's look at some more complicated situations..." +msgstr "Замечательно! Теперь, когда вы осваиваетесь с машиной времени, давайте рассмотрим несколько более сложных ситуаций..." + +msgid "Workflows" +msgstr "Рабочие процессы" + +msgid "Working together" +msgstr "Работаем вместе" + +msgid "Yay!" +msgstr "Ура!" + +msgid "Yay, you got your changes back! :)" +msgstr "Ура, вы вернули свои изменения! :)" + +msgid "Yellow brick road" +msgstr "Дорога из желтого кирпича" + +msgid "You aborted to merge?" +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 "" +"Вы добавили слишком много тегов? Нет проблем! Удалите их с помощью\n" +"\n" +" git tag -d <имя_тега>\n" +"\n" +"Удалите все теги в этом репозитории!\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" + +msgid "" +"You ate a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "" +"Вы съели багет.\n" +"\n" +"У вас нет кофе.\n" +"\n" +"У вас нет пончика." + +msgid "You can also go back two commits by typing, for example:" +msgstr "Вы также можете вернуться на два коммита назад, набрав, например:" + +msgid "You can drag these around with your mouse!" +msgstr "Вы можете перетаскивать их мышкой!" + +msgid "" +"You can point refs to a new location using the same command you use to create them:\n" +"\n" +" git update-ref refs/ \n" +"\n" +"As an exercise, make all refs in this repository point to the tree object!" +msgstr "" +"Вы можете указать ссылкам на новое местоположение, используя ту же команду, которую вы используете для их создания:\n" +"\n" +" git update-ref refs/<имя_ссылки> <объект>\n" +"\n" +"В качестве упражнения, сделайте так, чтобы все ссылки в этом репозитории указывали на объект-дерево!" + +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 "Вы можете использовать автодополнение по Tab в терминале! Начните вводить имя файла, затем нажмите клавишу Tab, чтобы дополнить его имя. Это часто сэкономит вам время!" + +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 "" +"Вы можете использовать свою машину времени, чтобы делать снимки объектов вокруг вас! Давайте попрактикуемся!\n" +"\n" +"(Ваш учитель наливает немного воды в стакан.)" + +msgid "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You ate a donut." +msgstr "" +"У вас нет багета.\n" +"\n" +"У вас нет кофе.\n" +"\n" +"Вы съели пончик." + +msgid "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "" +"У вас нет багета.\n" +"\n" +"У вас нет кофе.\n" +"\n" +"У вас нет пончика." + +msgid "" +"You do not have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You have a donut." +msgstr "" +"У вас нет багета.\n" +"\n" +"У вас нет кофе.\n" +"\n" +"У вас есть пончик." + +msgid "" +"You do not have a baguette.\n" +"\n" +"You drank coffee.\n" +"\n" +"You do not have a donut." +msgstr "" +"У вас нет багета.\n" +"\n" +"Вы выпили кофе.\n" +"\n" +"У вас нет пончика." + +msgid "" +"You do not have a baguette.\n" +"\n" +"You have coffee.\n" +"\n" +"You do not have a donut." +msgstr "" +"У вас нет багета.\n" +"\n" +"У вас есть кофе.\n" +"\n" +"У вас нет пончика." + +msgid "You drink coffee." +msgstr "Вы пьете кофе." + +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 "Вы получаете золотой значок за каждый уровень, решенный без игральных карт! Сможете ли вы пройти их все, используя только командную строку?" + +msgid "You go to the birthday party!" +msgstr "Вы идете на вечеринку в честь дня рождения!" + +msgid "You go to the concert!" +msgstr "Вы идете на концерт!" + +msgid "" +"You have a baguette.\n" +"\n" +"You do not have coffee.\n" +"\n" +"You do not have a donut." +msgstr "" +"У вас есть багет.\n" +"\n" +"У вас нет кофе.\n" +"\n" +"У вас нет пончика." + +msgid "You hear a knock on the door." +msgstr "Вы слышите стук в дверь." + +msgid "You jump over an manhole in the walkway, and arrive at school on time." +msgstr "Вы перепрыгиваете через люк на тротуаре и приходите в школу вовремя." + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are NOT wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are NOT wearing shoes." +msgstr "" +"Вы только что проснулись.\n" +"\n" +"На вас НЕТ нижнего белья.\n" +"\n" +"На вас НЕТ штанов.\n" +"\n" +"На вас НЕТ рубашки.\n" +"\n" +"На вас НЕТ обуви." + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are NOT wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "" +"Вы только что проснулись.\n" +"\n" +"На вас НЕТ нижнего белья.\n" +"\n" +"На вас НЕТ штанов.\n" +"\n" +"На вас НЕТ рубашки.\n" +"\n" +"На вас ЕСТЬ обувь." + +msgid "" +"You just woke up.\n" +"\n" +"You are NOT wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "" +"Вы только что проснулись.\n" +"\n" +"На вас НЕТ нижнего белья.\n" +"\n" +"На вас ЕСТЬ штаны.\n" +"\n" +"На вас НЕТ рубашки.\n" +"\n" +"На вас ЕСТЬ обувь." + +msgid "" +"You just woke up.\n" +"\n" +"You are wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are NOT wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "" +"Вы только что проснулись.\n" +"\n" +"На вас ЕСТЬ нижнее белье.\n" +"\n" +"На вас ЕСТЬ штаны.\n" +"\n" +"На вас НЕТ рубашки.\n" +"\n" +"На вас ЕСТЬ обувь." + +msgid "" +"You just woke up.\n" +"\n" +"You are wearing underwear.\n" +"\n" +"You are wearing pants.\n" +"\n" +"You are wearing a shirt.\n" +"\n" +"You are wearing shoes." +msgstr "" +"Вы только что проснулись.\n" +"\n" +"На вас ЕСТЬ нижнее белье.\n" +"\n" +"На вас ЕСТЬ штаны.\n" +"\n" +"На вас ЕСТЬ рубашка.\n" +"\n" +"На вас ЕСТЬ обувь." + +msgid "You leave your house and start walking to school." +msgstr "Вы выходите из дома и идете в школу." + +msgid "You still have your key." +msgstr "У вас все еще есть ключ." + +msgid "You tried to merge?" +msgstr "Вы пытались выполнить слияние?" + +msgid "You wake up." +msgstr "Вы просыпаетесь." + +msgid "You walk on the left side of the street." +msgstr "Вы идете по левой стороне улицы." + +msgid "You walk on the right side of the street." +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 "" +"Вас пригласили на две вечеринки! На одной из них играет ваша любимая группа, а другая — день рождения вашего лучшего друга. Куда пойти? Не беспокойтесь — как стажер-агент по путешествиям во времени, вы можете пойти на обе вечеринки!\n" +"\n" +"Чтобы было легче различать временные линии, вы можете создавать временные порталы! (Мы называем их \"ветками\".)" + +msgid "" +"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.\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" +msgstr "" +"Вы столкнетесь с ситуациями, в которых вы работаете над своим проектом, но вам нужно временно отложить текущие изменения. Для этого вы можете использовать функцию stash. Используйте `git stash push` чтобы добавить ваши текущие изменения в стек тайника (stash).\n" +"\n" +"---\n" +"tipp1\n" +"---\n" +"tipp2\n" +"---\n" +"tipp3" + +msgid "You wrap the birthday present, and grab your concert ticket." +msgstr "Вы заворачиваете подарок на день рождения и берете билет на концерт." + +msgid "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." +msgstr "Вы не торопитесь и идете медленно. По дороге вы даже покупаете мороженое. Вы приходите в школу слишком поздно, ваш учитель злится, и вас исключают." + +msgid "" +"You're still pretty confused by everything that's going on. The next day, you decide to enroll in time travel school!\n" +"\n" +"Your time travel teacher welcomes you: \"Hello there! Wanna tell us your name?\"" +msgstr "" +"Вы все еще в замешательстве от всего происходящего. На следующий день вы решаете записаться в школу путешествий во времени!\n" +"\n" +"Ваш учитель по путешествиям во времени приветствует вас: \"Привет! Хочешь сказать нам свое имя?\"" + +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 "" +"Вас приняли в школу путешествий во времени! Ура! Это ваш первый день! Ваш учитель объясняет:\n" +"\n" +"\"Чтобы что-то делать с машиной времени, сначала нужно ее инициализировать!\"\n" +"\n" +"Перетащите эту синюю карту вверх, чтобы сыграть ею!" + +msgid "" +"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! :/\n" +"\n" +"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!" +msgstr "" +"Вы уже некоторое время работаете над своим эссе. Но - ух! Теперь ваша кошка прошлась по клавиатуре и \"помогла вам\", так что теперь все испорчено! :/\n" +"\n" +"Но Git здесь, чтобы помочь! Чтобы отменить все изменения, которые сделала ваша кошка, и вернуться к версии в последнем коммите, используйте checkout!" + +msgid "" +"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\"!\n" +"\n" +"No problem, you can use the checkout card to restore your essay from an older commit!" +msgstr "" +"Вы уже некоторое время работаете над своим эссе. Но вы недовольны недавними изменениями. Вы хотите вернуться к версии под названием \"Лучшая версия\"!\n" +"\n" +"Нет проблем, вы можете использовать карту checkout, чтобы восстановить свое эссе из более старого коммита!" + +msgid "Your first 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 "" +"Ваш друг добавил еще одну строку в ваше эссе! Получите ее, добавьте третью и отправьте ему!\n" +"\n" +"Делайте это по очереди, пока у вас не будет пяти строк!" + +msgid "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`." +msgstr "У вашего друга проблема! Клонируйте репозиторий, находящийся в ../friend, создайте ветку с именем \"solution\" и исправьте проблему в этой ветке. Когда будете готовы, сделайте \"Pull Request\", используя `git tag pr`." + +msgid "Your pocket is empty." +msgstr "Ваш карман пуст." + +msgid "Your proposal is acceptable for friend1." +msgstr "Ваше предложение приемлемо для friend1." + +msgid "Your proposal is acceptable for friend2." +msgstr "Ваше предложение приемлемо для friend2." + +msgid "Your room looks now very tidy and cozy! Time to unpack your stuff!" +msgstr "Ваша комната теперь выглядит очень опрятной и уютной! Время распаковывать вещи!" + +msgid "Yum, that sounds like a good breakfast!" +msgstr "Мм, звучит как хороший завтрак!" + +msgid "and this should happen after that" +msgstr "а это должно произойти после" + +msgid "bad version" +msgstr "плохая версия" + +msgid "blabber" +msgstr "болтовня" + +msgid "" +"blarg\n" +"blaaaargh" +msgstr "" +"блаарг\n" +"блааааргх" + +msgid "by bleeptrack & blinry" +msgstr "от bleeptrack & blinry" + +msgid "dir" +msgstr "папка" + +msgid "event 1" +msgstr "событие 1" + +msgid "event 2" +msgstr "событие 2" + +msgid "event 3" +msgstr "событие 3" + +msgid "file 1" +msgstr "файл 1" + +msgid "file 2" +msgstr "файл 2" + +msgid "file 3" +msgstr "файл 3" + +msgid "file A" +msgstr "файл A" + +msgid "file B" +msgstr "файл B" + +msgid "file C" +msgstr "файл C" + +msgid "filename" +msgstr "имя_файла" + +msgid "good version" +msgstr "хорошая версия" + +msgid "hello" +msgstr "привет" + +msgid "important" +msgstr "важно" + +msgid "important content" +msgstr "важное содержимое" + +msgid "label" +msgstr "метка" + +msgid "new content" +msgstr "новое содержимое" + +msgid "object_id" +msgstr "id_объекта" + +msgid "root" +msgstr "корень" + +msgid "something" +msgstr "что-то" + +msgid "something else" +msgstr "что-то еще" + +msgid "" +"this is fine\n" +"\n" +"?\n" +"\n" +"?\n" +"\n" +"?" +msgstr "" +"это нормально\n" +"\n" +"?\n" +"\n" +"?\n" +"\n" +"?" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"?\n" +"\n" +"?" +msgstr "" +"это нормально\n" +"\n" +"это тоже нормально\n" +"\n" +"?\n" +"\n" +"?" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"this is very bad\n" +"\n" +"?" +msgstr "" +"это нормально\n" +"\n" +"это тоже нормально\n" +"\n" +"это очень плохо\n" +"\n" +"?" + +msgid "" +"this is fine\n" +"\n" +"this is also fine\n" +"\n" +"this is very bad\n" +"\n" +"this is fine again" +msgstr "" +"это нормально\n" +"\n" +"это тоже нормально\n" +"\n" +"это очень плохо\n" +"\n" +"это снова нормально" + +msgid "this is some other change" +msgstr "это какое-то другое изменение" + +msgid "this should happen first" +msgstr "это должно произойти сначала" + +msgid "title" +msgstr "заголовок" + +msgid "toothbrush sharing" +msgstr "совместное использование зубной щетки" + +msgid "v1 tag in your repo" +msgstr "тег v1 в вашем репозитории" + +msgid "v2 tag in the remote" +msgstr "тег v2 в удалённом репозитории" + +msgid "v2 tag in your repo" +msgstr "тег v2 в вашем репозитории" + +msgid "very hungry" +msgstr "очень голодным" + +msgid "world" +msgstr "мир" + +msgid "~ List of current students ~" +msgstr "~ Список текущих студентов ~" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"(I still need to write this.)" +msgstr "" +"~ Почему я хочу изучить Git ~\n" +"\n" +"(Мне еще нужно это написать.)" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"- So that I can undo mistakes" +msgstr "" +"~ Почему я хочу изучить Git ~\n" +"\n" +"- Чтобы я мог отменять ошибки" + +msgid "" +"~ Why I want to learn Git ~\n" +"\n" +"- So that I can undo mistakes\n" +"- To track my projects over time" +msgstr "" +"~ Почему я хочу изучить Git ~\n" +"\n" +"- Чтобы я мог отменять ошибки\n" +"- Чтобы отслеживать свои проекты со временем" + +msgid "intro" +msgstr "Введение" + +msgid "files" +msgstr "Файлы" + +msgid "branches" +msgstr "Ветви" + +msgid "merge" +msgstr "Слияние" + +msgid "index" +msgstr "Индекс" + +msgid "remotes" +msgstr "Удалённые репозитории" + +msgid "changing-the-past" +msgstr "Изменение прошлого" + +msgid "shit-happens" +msgstr "Когда всё идёт не так" + +msgid "workflows" +msgstr "Рабочие процессы" + +msgid "bisect" +msgstr "Поиск ошибки (Bisect)" + +msgid "stash" +msgstr "Тайник (Stash)" + +msgid "tags" +msgstr "Метки" + +msgid "sandbox" +msgstr "Песочница" + +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 "" +"Но есть и другой способ взаимодействия с Git:\n" +"\n" +"Попробуйте ввести `git init` в черный терминал внизу и нажать клавишу Enter!" + +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 "" +"Опять же, вместо использования карточки, вы также можете вводить команды, напечатанные на ней, в черный терминал внизу!\n" +"\n" +"Это совершенно необязательно! Но это будет суперполезный навык в реальном мире - и он даст вам сверкающий золотой значок! :)" + +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 "" +"Чтобы переключиться на конкретный коммит, введите `git checkout`, затем пробел, а затем нажмите правой кнопкой мыши на нужный коммит!\n" +"\n" +"Это вставит уникальный идентификатор коммита!" + +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 "" +"Синее животное представляет собой концепцию, известную в Git как \"указатель HEAD\": он показывает, какой коммит является текущим.\n" +"\n" +"Вот классный трюк для перехода к предыдущему коммиту:\n" +"\n" +" git checkout HEAD^\n" +"\n" +"Вы также можете вернуться на два коммита назад, набрав, например:\n" +"\n" +" git checkout HEAD~2" + +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 "" +"Чтобы переместиться на ветку, введите `git checkout имя_ветки`\n" +"\n" +"А чтобы переместиться на последний коммит, введите `git checkout --detach имя_ветки`" diff --git a/nodes/blob.svg.import b/nodes/blob.svg.import index 725b562c..bcb068aa 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 d47ebc67..86b4574d 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 4c5b7391..d038a7ff 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 f0116190..db9e9e9f 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 0888d00d..6ad89b10 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 92a04d20..f1fd364c 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 7ba33f45..1641097d 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/pop.wav.import b/nodes/pop.wav.import index f7152c58..e59a702a 100644 --- a/nodes/pop.wav.import +++ b/nodes/pop.wav.import @@ -17,5 +17,7 @@ force/max_rate=false force/max_rate_hz=44100 edit/trim=false edit/normalize=false -edit/loop=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 compress/mode=0 diff --git a/nodes/ref.svg.import b/nodes/ref.svg.import index 1ad858de..a7b3421c 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 8192b20a..f613eafb 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 ce54de4f..eece0b17 100644 --- a/project.godot +++ b/project.godot @@ -105,22 +105,22 @@ down={ } click={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"doubleclick":false,"script":null) ] } zoom_in={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"pressed":false,"doubleclick":false,"script":null) +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"doubleclick":false,"script":null) ] } zoom_out={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null) +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"doubleclick":false,"script":null) ] } right_click={ "deadzone": 0.5, -"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"pressed":false,"doubleclick":false,"script":null) +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":2,"canceled":false,"pressed":false,"doubleclick":false,"script":null) ] } tab_complete={ @@ -149,6 +149,10 @@ mute={ ] } +[locale] + +translations=PoolStringArray( "res://locale/br.po", "res://locale/ru.po", "res://locale/en.po" ) + [network] limits/debugger_stdout/max_chars_per_second=100000 diff --git a/resources/cards.json b/resources/cards.json index 631a7e59..3b1fdf25 100644 --- a/resources/cards.json +++ b/resources/cards.json @@ -117,12 +117,12 @@ { "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": "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": "State that the current commit is bad! When you're automatically transferred, keep playing the `good` and `bad` cards!" + "description": "State that the current commit is bad! When you're automatically transferred, keep playing the good and bad cards!" }, { "id": "add", @@ -179,4 +179,4 @@ "command": "cp [file] [string]", "description": "Make a copy of a file." } -] +] \ No newline at end of file diff --git a/scenes/arrow.tscn b/scenes/arrow.tscn index 53c1d62c..55bcb536 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,8 +43,8 @@ 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__ = { diff --git a/scenes/card.gd b/scenes/card.gd index 8c97c5a7..cd5623f6 100644 --- a/scenes/card.gd +++ b/scenes/card.gd @@ -104,9 +104,9 @@ func set_command(new_command): #$Label.text = command func set_description(new_description): - description = new_description + description = tr(new_description) $Description.text = description - + func set_energy(new_energy): energy = new_energy if energy_label: diff --git a/scenes/card.tscn b/scenes/card.tscn index 55c230fc..892fcd1c 100644 --- a/scenes/card.tscn +++ b/scenes/card.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=14 format=2] [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=1] [ext_resource path="res://nodes/blob.svg" type="Texture" id=2] @@ -6,7 +6,7 @@ [ext_resource path="res://sounds/swish.wav" type="AudioStream" id=4] [ext_resource path="res://sounds/swoosh.wav" type="AudioStream" id=5] [ext_resource path="res://sounds/poof.wav" type="AudioStream" id=6] -[ext_resource path="res://fonts/small.tres" type="DynamicFont" id=7] +[ext_resource path="res://fonts/iosevka-regular.ttf" type="DynamicFontData" id=7] [sub_resource type="StyleBoxFlat" id=1] bg_color = Color( 0.45098, 0.584314, 0.843137, 1 ) @@ -49,9 +49,10 @@ corner_radius_top_right = 10 corner_radius_bottom_right = 10 corner_radius_bottom_left = 10 -[node name="Card" type="Node2D" groups=[ -"cards", -]] +[sub_resource type="DynamicFont" id=6] +font_data = ExtResource( 7 ) + +[node name="Card" type="Node2D" groups=["cards"]] script = ExtResource( 3 ) [node name="Panel" type="Panel" parent="."] @@ -120,13 +121,10 @@ margin_left = -92.0 margin_top = -98.0 margin_right = 90.0 margin_bottom = -14.0 -custom_fonts/font = ExtResource( 7 ) custom_colors/font_color = Color( 0, 0, 0, 1 ) +custom_fonts/font = SubResource( 6 ) text = "Description" autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} [node name="Sprite" type="Sprite" parent="."] visible = false @@ -170,5 +168,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 4448d6c1..2001a9c7 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("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 1fc2fcc0..dbade8d9 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 @@ -49,4 +46,5 @@ text = "3" __meta__ = { "_edit_use_anchors_": false } + [connection signal="pressed" from="Button" to="." method="redraw_all_cards"] diff --git a/scenes/cli_badge.tscn b/scenes/cli_badge.tscn index 740e2a33..37bbb261 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 ed564e65..9326dc4d 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 ) @@ -45,5 +43,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.gd b/scenes/file_browser.gd index 1af3fa20..2c189cfe 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(tr("Click on these files to edit them!"), self, "file-browser") if false: match mode: diff --git a/scenes/file_browser.tscn b/scenes/file_browser.tscn index cbc6bec7..31861522 100644 --- a/scenes/file_browser.tscn +++ b/scenes/file_browser.tscn @@ -1,20 +1,21 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://scenes/file_browser.gd" type="Script" id=1] [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", -]] +[sub_resource type="StyleBoxEmpty" id=1] +content_margin_left = 10.0 +content_margin_right = 145.0 +content_margin_top = 10.0 +content_margin_bottom = 10.0 + +[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 @@ -91,6 +92,7 @@ __meta__ = { visible = false anchor_right = 1.0 anchor_bottom = 1.0 +custom_styles/normal = SubResource( 1 ) wrap_enabled = true __meta__ = { "_edit_use_anchors_": false @@ -105,6 +107,7 @@ margin_left = -114.396 margin_top = -59.399 margin_right = -14.3955 margin_bottom = -14.399 +grow_horizontal = 0 focus_mode = 0 custom_fonts/font = ExtResource( 2 ) enabled_focus_mode = 0 @@ -131,5 +134,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 d623e756..6a8149d6 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 @@ -122,4 +119,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/game.gd b/scenes/game.gd index 5c62ab3f..c7279a96 100644 --- a/scenes/game.gd +++ b/scenes/game.gd @@ -12,6 +12,9 @@ var current_chapter = 0 var current_level = 0 var skipped_title = false +var available_languages = [] +var current_language + var _file = "user://savegame.json" var state = {} @@ -30,6 +33,7 @@ func _ready(): start_remote_shell() global_shell = new_shell() + _set_initial_language() # var cmd = global_shell.run("echo hi") # print(cmd) # cmd = global_shell.run("seq 1 10") @@ -119,7 +123,8 @@ func notify(text, target=null, hint_slug=null): return var notification = preload("res://scenes/notification.tscn").instance() - notification.text = text + notification.get_node("Notification/Panel/Label").text = text + if not target: target = get_tree().root target.call_deferred("add_child", notification) @@ -160,3 +165,29 @@ func new_shell(): return BetterShell.new() else: return Shell.new() + +func _set_initial_language(): + var system_language = OS.get_locale_language() + + available_languages = get_available_languages() + if system_language in available_languages: + current_language = system_language + else: + current_language = "English" + + TranslationServer.set_locale(current_language) + +func get_available_languages() -> Array: + var locales = Array(TranslationServer.get_loaded_locales()) + + if not "en" in locales: + locales.push_front("en") + return locales + +func _update_title_ui(): + get_tree().reload_current_scene() + +func change_language(new_language: String): + current_language = new_language + TranslationServer.set_locale(new_language) + _update_title_ui() diff --git a/scenes/global_menu.gd b/scenes/global_menu.gd new file mode 100644 index 00000000..79c32d1a --- /dev/null +++ b/scenes/global_menu.gd @@ -0,0 +1,39 @@ +extends HBoxContainer + +signal back_pressed +signal reload_pressed +signal cards_toggle_pressed +signal new_tip_pressed +signal next_level_pressed +signal hide_cli +signal hide_next_level + +export var show_next_level_button = true +export var show_cli_badge = true + +func _ready(): + $NextLevelButton.visible = show_next_level_button + $CLIBadge.visible = show_cli_badge + + $BackButton.text = tr("Back") + $ReloadButton2.text = tr("Reload") + $CardsButton.text = tr("Cards!") + $"Tip!".text = tr("Tip!") + $Button3.text = tr("Toggle music") + $NextLevelButton.text = tr("Next level") + +func _on_BackButton_pressed(): + emit_signal("back_pressed") + +func _on_ReloadButton2_pressed(): + emit_signal("reload_pressed") + +func _on_Tip_pressed(): + emit_signal("new_tip_pressed") + +func _on_CardsButton_pressed(): + emit_signal("cards_toggle_pressed") + +func _on_NextLevelButton_pressed(): + emit_signal("next_level_pressed") + diff --git a/scenes/global_menu.tscn b/scenes/global_menu.tscn new file mode 100644 index 00000000..b7b0747b --- /dev/null +++ b/scenes/global_menu.tscn @@ -0,0 +1,102 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://scenes/global_menu.gd" type="Script" id=1] +[ext_resource path="res://scenes/music_button.tscn" type="PackedScene" id=3] +[ext_resource path="res://scenes/cli_badge.tscn" type="PackedScene" id=4] +[ext_resource path="res://styles/alert_button.tres" type="StyleBox" id=5] + +[sub_resource type="StyleBoxFlat" id=2] +content_margin_left = 10.0 +content_margin_right = 10.0 +content_margin_top = 5.0 +content_margin_bottom = 5.0 +bg_color = Color( 0.847059, 0.0666667, 0.0666667, 1 ) +corner_radius_top_left = 3 +corner_radius_top_right = 3 +corner_radius_bottom_right = 3 +corner_radius_bottom_left = 3 + +[node name="Menu" type="HBoxContainer"] +margin_left = 3.86392 +margin_top = 5.13129 +margin_right = 636.864 +margin_bottom = 44.1313 +custom_constants/separation = 8 +script = ExtResource( 1 ) + +[node name="BackButton" type="Button" parent="."] +margin_right = 42.0 +margin_bottom = 39.0 +focus_mode = 0 +enabled_focus_mode = 0 +text = "Back" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="ReloadButton2" type="Button" parent="."] +margin_left = 50.0 +margin_right = 105.0 +margin_bottom = 39.0 +focus_mode = 0 +enabled_focus_mode = 0 +text = "Reload" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CardsButton" type="Button" parent="."] +visible = false +margin_left = 337.0 +margin_right = 493.0 +margin_bottom = 39.0 +focus_mode = 0 +enabled_focus_mode = 0 +text = "Cards!" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Tip!" type="Button" parent="."] +visible = false +margin_left = 113.0 +margin_right = 148.0 +margin_bottom = 39.0 +focus_mode = 0 +enabled_focus_mode = 0 +text = "Tip!" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Button3" parent="." instance=ExtResource( 3 )] +margin_left = 113.0 +margin_top = 0.0 +margin_right = 209.0 +margin_bottom = 39.0 + +[node name="CLIBadge" parent="." instance=ExtResource( 4 )] +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 217.0 +margin_right = 262.0 +margin_bottom = 39.0 + +[node name="NextLevelButton" type="Button" parent="."] +margin_left = 270.0 +margin_right = 355.0 +margin_bottom = 39.0 +focus_mode = 0 +custom_styles/hover = SubResource( 2 ) +custom_styles/normal = ExtResource( 5 ) +enabled_focus_mode = 0 +text = "Next level" +__meta__ = { +"_edit_use_anchors_": false +} + +[connection signal="pressed" from="BackButton" to="." method="_on_BackButton_pressed"] +[connection signal="pressed" from="ReloadButton2" to="." method="_on_ReloadButton2_pressed"] +[connection signal="pressed" from="CardsButton" to="." method="_on_CardsButton_pressed"] +[connection signal="pressed" from="Tip!" to="." method="_on_Tip_pressed"] +[connection signal="pressed" from="NextLevelButton" to="." method="_on_NextLevelButton_pressed"] diff --git a/scenes/input_dialog.tscn b/scenes/input_dialog.tscn index 17876b91..73963e7c 100644 --- a/scenes/input_dialog.tscn +++ b/scenes/input_dialog.tscn @@ -1,6 +1,13 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://scripts/input_dialog.gd" type="Script" id=1] +[ext_resource path="res://fonts/Moderustic-VariableFont_wght.ttf" type="DynamicFontData" id=2] + +[sub_resource type="DynamicFont" id=1] +font_data = ExtResource( 2 ) + +[sub_resource type="DynamicFont" id=2] +font_data = ExtResource( 2 ) [node name="InputDialog" type="WindowDialog"] anchor_right = 1.0 @@ -9,6 +16,7 @@ margin_left = 816.0 margin_top = 446.0 margin_right = -826.0 margin_bottom = -591.0 +custom_fonts/title_font = SubResource( 1 ) window_title = "Please enter a value:" script = ExtResource( 1 ) __meta__ = { @@ -18,7 +26,9 @@ __meta__ = { [node name="LineEdit" type="LineEdit" parent="."] anchor_right = 1.0 anchor_bottom = 1.0 +custom_fonts/font = SubResource( 2 ) __meta__ = { "_edit_use_anchors_": false } + [connection signal="text_entered" from="LineEdit" to="." method="_text_entered"] diff --git a/scenes/level.gd b/scenes/level.gd index 97c17466..8478c371 100644 --- a/scenes/level.gd +++ b/scenes/level.gd @@ -17,32 +17,33 @@ func load(path): var dir = Directory.new() if dir.file_exists(path): - # This is a new-style level. var config = helpers.parse(path) - title = config.get("title", slug) - description = config.get("description", "(no description)") - - # Surround all lines indented with four spaces with [code] tags. + title = translate_string(config.get("title", slug)) + var description_text = translate_string(config.get("description", "_((no description))")) + congrats = translate_string(config.get("congrats", "_(Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.)")) + + var cli_hints = translate_string(config.get("cli", "")) + var monospace_regex = RegEx.new() monospace_regex.compile("\\n ([^\\n]*)") - description = monospace_regex.sub(description, "\n [code][color=#e1e160]$1[/color][/code]", true) - description = description.split("---") - - var cli_hints = config.get("cli", "") - # 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("`([^`]+)`") - description[0] = monospace_inline_regex.sub(description[0], "[code][color=#e1e160]$1[/color][/code]") - cli_hints = monospace_inline_regex.sub(cli_hints, "[code][color=#bbbb5d]$1[/color][/code]", true) + + if description_text != null: + description_text = monospace_regex.sub(description_text, "\n [code][color=#e1e160]$1[/color][/code]", true) + description_text = monospace_inline_regex.sub(description_text, "[code][color=#e1e160]$1[/color][/code]") + else: + description_text = "" - if cli_hints != "": - description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]" + description = description_text.split("---") - congrats = config.get("congrats", "Good job, you solved the level!\n\nFeel free to try a few more things or click 'Next level'.") + if cli_hints != null and cli_hints != "": + cli_hints = monospace_regex.sub(cli_hints, "\n [code][color=#bbbb5d]$1[/color][/code]", true) + cli_hints = monospace_inline_regex.sub(cli_hints, "[code][color=#bbbb5d]$1[/color][/code]", true) + if description.size() > 0: + description[0] = description[0] + "\n\n[color=#787878]"+cli_hints+"[/color]" + cards = Array(config.get("cards", "").split(" ")) if cards == [""]: cards = [] @@ -69,8 +70,8 @@ func load(path): repo = "yours" if not repos.has(repo): repos[repo] = LevelRepo.new() - repos[repo].setup_commands = config[k] - + repos[repo].setup_commands = translate_string(config[k]) + for k in repo_wins: var repo if " " in k: @@ -78,14 +79,19 @@ func load(path): else: repo = "yours" - var desc = "Complete the goal of this level" + if not repos.has(repo): + repos[repo] = LevelRepo.new() + + var desc = translate_string(config.get("win_desc", "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) + var hint_key = line.substr(1).strip_edges(true, true) + desc = translate_string(hint_key) else: + var translated_line = translate_string(line) if not repos[repo].win_conditions.has(desc): repos[repo].win_conditions[desc] = "" - repos[repo].win_conditions[desc] += line+"\n" + repos[repo].win_conditions[desc] += translated_line+"\n" for k in repo_actions: var repo @@ -94,11 +100,8 @@ func load(path): else: repo = "yours" - repos[repo].action_commands = config[k] + repos[repo].action_commands = translate_string(config[k]) -# for desc in repos[repo].win_conditions: -# print("Desc: " + desc) -# print("Commands: " + repos[repo].win_conditions[desc]) else: helpers.crash("Level %s does not exist." % path) @@ -106,7 +109,6 @@ func load(path): repos[repo].path = game.tmp_prefix+"repos/%s/" % repo repos[repo].slug = repo - func construct(): for r in repos: @@ -144,3 +146,52 @@ func check_win(): var won = game.global_shell.run("function win { %s\n}; win 2>/dev/null >/dev/null && echo yes || echo no" % commands) == "yes\n" win_states[description] = won return win_states + +func translate_string(text): + if typeof(text) != TYPE_STRING: + return text + + var result = "" + var i = 0 + var length = text.length() + + while i < length: + if text.substr(i, 2) == "_(": + var content_start = i + 2 + var current = content_start + var depth = 1 + var found_end = false + + while current < length: + var char_at = text[current] + + if char_at == "\\": + current += 2 + continue + + if char_at == "(": + depth += 1 + elif char_at == ")": + depth -= 1 + + if depth == 0: + found_end = true + break + + current += 1 + + if found_end: + var key = text.substr(content_start, current - content_start) + + key = key.replace("\\)", ")").replace("\\(", "(") + + result += tr(key) + i = current + 1 + else: + result += text[i] + i += 1 + else: + result += text[i] + i += 1 + + return result diff --git a/scenes/level_select.gd b/scenes/level_select.gd index acd08669..f7e2a8f4 100644 --- a/scenes/level_select.gd +++ b/scenes/level_select.gd @@ -26,7 +26,7 @@ func reload(): var level_id = 0 var l = Label.new() - l.text = chapter.slug + l.text = tr(chapter.slug) l.set("custom_fonts/font", preload("res://fonts/big.tres")) l.align = HALIGN_CENTER level_list.add_child(l) @@ -56,7 +56,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(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 2f8e4f3a..b5d36183 100644 --- a/scenes/level_select.tscn +++ b/scenes/level_select.tscn @@ -3,7 +3,7 @@ [ext_resource path="res://styles/theme.tres" type="Theme" id=1] [ext_resource path="res://scenes/level_select.gd" type="Script" id=2] [ext_resource path="res://styles/alert_button.tres" type="StyleBox" id=3] -[ext_resource path="res://scenes/music_button.tscn" type="PackedScene" id=4] +[ext_resource path="res://scenes/global_menu.tscn" type="PackedScene" id=4] [sub_resource type="StyleBoxFlat" id=1] bg_color = Color( 0.54902, 0.0392157, 0.0392157, 1 ) @@ -17,16 +17,10 @@ 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 anchor_bottom = 1.0 -__meta__ = { -"_edit_use_anchors_": false -} [node name="MarginContainer" type="MarginContainer" parent="ScrollContainer"] margin_right = 1920.0 @@ -42,30 +36,6 @@ 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 @@ -90,6 +60,15 @@ 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="Menu" parent="." instance=ExtResource( 4 )] +margin_left = 15.0 +margin_top = 15.0 +margin_right = 1288.0 +margin_bottom = 54.0 +show_next_level_button = false +show_cli_badge = false + [connection signal="pressed" from="HelpLabel/Button3" to="." method="onSurveyPressed"] +[connection signal="back_pressed" from="Menu" to="." method="back"] +[connection signal="reload_pressed" from="Menu" to="." method="reload"] diff --git a/scenes/levels.gd b/scenes/levels.gd index 593b728b..2753e4d9 100644 --- a/scenes/levels.gd +++ b/scenes/levels.gd @@ -23,6 +23,7 @@ func reload(): dir.list_dir_end() chapter_names.sort() + print_debug(chapter_names) var final_chapter_sequence = [] diff --git a/scenes/main.gd b/scenes/main.gd index 0e401342..1f293a7c 100644 --- a/scenes/main.gd +++ b/scenes/main.gd @@ -49,7 +49,7 @@ func _process(delta): if _hint_server.is_connection_available(): _hint_client_connection = _hint_server.take_connection() var length = _hint_client_connection.get_u32() - var message = _hint_client_connection.get_string(length) + var message = _hint_client_connection.get_utf8_string(length) game.notify(message) # if game.used_cards: # $Menu/CLIBadge.impossible = true @@ -227,3 +227,5 @@ func new_tip(): func back(): get_tree().change_scene("res://scenes/level_select.tscn") + + diff --git a/scenes/main.tscn b/scenes/main.tscn index e19dec2e..134c26e2 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -1,31 +1,22 @@ -[gd_scene load_steps=14 format=2] +[gd_scene load_steps=12 format=2] [ext_resource path="res://scenes/terminal.tscn" type="PackedScene" id=1] [ext_resource path="res://scenes/main.gd" type="Script" id=2] [ext_resource path="res://scenes/cards.tscn" type="PackedScene" id=3] -[ext_resource path="res://styles/alert_button.tres" type="StyleBox" id=4] +[ext_resource path="res://scenes/global_menu.tscn" type="PackedScene" id=4] [ext_resource path="res://scenes/file_browser.tscn" type="PackedScene" id=5] [ext_resource path="res://styles/theme.tres" type="Theme" id=6] -[ext_resource path="res://fonts/big.tres" type="DynamicFont" id=7] +[ext_resource path="res://fonts/Moderustic-VariableFont_wght.ttf" type="DynamicFontData" id=7] [ext_resource path="res://sounds/success.wav" type="AudioStream" id=8] [ext_resource path="res://scenes/cursor.gd" type="Script" id=9] -[ext_resource path="res://scenes/cli_badge.tscn" type="PackedScene" id=10] -[ext_resource path="res://scenes/music_button.tscn" type="PackedScene" id=11] + +[sub_resource type="DynamicFont" id=2] +size = 46 +font_data = ExtResource( 7 ) [sub_resource type="CircleShape2D" id=1] radius = 1.0 -[sub_resource type="StyleBoxFlat" id=2] -content_margin_left = 10.0 -content_margin_right = 10.0 -content_margin_top = 5.0 -content_margin_bottom = 5.0 -bg_color = Color( 0.847059, 0.0666667, 0.0666667, 1 ) -corner_radius_top_left = 3 -corner_radius_top_right = 3 -corner_radius_bottom_right = 3 -corner_radius_bottom_left = 3 - [node name="Main" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 @@ -101,7 +92,7 @@ margin_right = 633.0 margin_bottom = 60.0 rect_min_size = Vector2( 0, 60 ) size_flags_stretch_ratio = 0.0 -custom_fonts/normal_font = ExtResource( 7 ) +custom_fonts/normal_font = SubResource( 2 ) text = "Level name here!" fit_content_height = true scroll_active = false @@ -122,9 +113,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,97 +177,23 @@ 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 ) -[node name="Menu" type="HBoxContainer" parent="."] -margin_left = 3.86392 -margin_top = 5.13129 -margin_right = 636.864 -margin_bottom = 44.1313 -custom_constants/separation = 8 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="BackButton" type="Button" parent="Menu"] -margin_right = 65.0 -margin_bottom = 39.0 -focus_mode = 0 -enabled_focus_mode = 0 -text = "Back" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="ReloadButton2" type="Button" parent="Menu"] -margin_left = 73.0 -margin_right = 161.0 -margin_bottom = 39.0 -focus_mode = 0 -enabled_focus_mode = 0 -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_bottom = 39.0 -focus_mode = 0 -enabled_focus_mode = 0 -text = "Cards!" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Tip!" type="Button" parent="Menu"] -visible = false -margin_left = 169.0 -margin_right = 225.0 -margin_bottom = 39.0 -focus_mode = 0 -enabled_focus_mode = 0 -text = "Tip!" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Button3" parent="Menu" instance=ExtResource( 11 )] -margin_left = 169.0 -margin_top = 0.0 -margin_right = 315.0 -margin_bottom = 39.0 +[node name="Menu" parent="." instance=ExtResource( 4 )] +margin_left = 7.0 +margin_top = 7.0 +margin_right = 1280.0 +margin_bottom = 46.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_bottom = 39.0 - -[node name="NextLevelButton" type="Button" parent="Menu"] -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" -__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/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"] +[connection signal="back_pressed" from="Menu" to="." method="back"] +[connection signal="cards_toggle_pressed" from="Menu" to="." method="toggle_cards"] +[connection signal="new_tip_pressed" from="Menu" to="." method="new_tip"] +[connection signal="next_level_pressed" from="Menu" to="." method="load_next_level"] +[connection signal="reload_pressed" from="Menu" to="." method="reload_level"] diff --git a/scenes/music_button.gd b/scenes/music_button.gd index 6cc4e03e..4d8fdc81 100644 --- a/scenes/music_button.gd +++ b/scenes/music_button.gd @@ -4,6 +4,5 @@ extends Button func _ready(): pass - func toggle_music(): game.toggle_music() diff --git a/scenes/music_button.tscn b/scenes/music_button.tscn index 70f47b04..9f0cb8b1 100644 --- a/scenes/music_button.tscn +++ b/scenes/music_button.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=2] -[ext_resource path="res://scenes/music_button.gd" type="Script" id=1] +[ext_resource path="res://scenes/music_button.gd" type="Script" id=2] [node name="Button3" type="Button"] margin_left = 241.005 @@ -10,8 +10,6 @@ margin_bottom = 97.856 focus_mode = 0 enabled_focus_mode = 0 text = "Toggle music" -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +script = ExtResource( 2 ) + [connection signal="pressed" from="." to="." method="toggle_music"] diff --git a/scenes/node.gd b/scenes/node.gd index f19e66a4..f8fb23ae 100644 --- a/scenes/node.gd +++ b/scenes/node.gd @@ -15,6 +15,9 @@ var hovered = false var arrow = preload("res://scenes/arrow.tscn") func _ready(): + if content_label: + content_label.set_message_translation(false) + content_set(content) type_set(type) id_set(id) @@ -80,7 +83,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(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 643a44cf..0905cc22 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,12 +75,13 @@ 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 } + [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.gd b/scenes/notification.gd index 8825be25..07f83adb 100644 --- a/scenes/notification.gd +++ b/scenes/notification.gd @@ -1,11 +1,27 @@ -extends Node2D +extends PanelContainer var text setget _set_text -var button_texts = ["Got it!", "Interesting!", "Very useful!", "Cool!", "Nice!", "Thanks!", "Whatever...", "Okay!", "Yay!", "Awesome!"] +var button_texts = [ + "Got it!", + "Interesting!", + "Very useful!", + "Cool!", + "Nice!", + "Thanks!", + "Whatever...", + "Okay!", + "Yay!", + "Awesome!" +] func _ready(): - button_texts.shuffle() - $Panel/CenterContainer/OK.text = button_texts[0] + var translated_button_texts = [] + for key in button_texts: + translated_button_texts.push_back(tr(key)) + + translated_button_texts.shuffle() + $Panel/CenterContainer/OK.text = translated_button_texts[0] + #func _gui_input(event): # if event is InputEventMouseButton: diff --git a/scenes/notification.tscn b/scenes/notification.tscn index 5d944e0d..37fea495 100644 --- a/scenes/notification.tscn +++ b/scenes/notification.tscn @@ -5,59 +5,60 @@ [ext_resource path="res://scenes/notification.gd" type="Script" id=3] [sub_resource type="StyleBoxFlat" id=1] +content_margin_left = 16.0 +content_margin_right = 16.0 +content_margin_top = 13.0 +content_margin_bottom = 13.0 bg_color = Color( 0.0431373, 0.368627, 0.141176, 0.843137 ) corner_radius_top_left = 8 corner_radius_top_right = 8 corner_radius_bottom_right = 8 corner_radius_bottom_left = 8 -[node name="Notification" type="Node2D"] +[node name="Node2D" type="Node2D"] z_index = 4096 -script = ExtResource( 3 ) -[node name="Panel" type="Panel" parent="."] +[node name="Notification" type="PanelContainer" parent="."] margin_left = 8.0 margin_top = 8.0 margin_right = 492.0 margin_bottom = 170.0 -theme = ExtResource( 2 ) custom_styles/panel = SubResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} +script = ExtResource( 3 ) -[node name="Label" type="Label" parent="Panel"] -anchor_right = 1.0 -anchor_bottom = 1.0 +[node name="Panel" type="VBoxContainer" parent="Notification"] margin_left = 16.0 margin_top = 13.0 -margin_right = -15.0 -margin_bottom = -15.0 +margin_right = 468.0 +margin_bottom = 155.0 +theme = ExtResource( 2 ) +custom_constants/separation = 10 + +[node name="Label" type="Label" parent="Notification/Panel"] +margin_right = 452.0 +margin_bottom = 93.0 +size_flags_vertical = 7 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 -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_top = -58.0 +[node name="CenterContainer" type="CenterContainer" parent="Notification/Panel"] +margin_top = 103.0 +margin_right = 452.0 +margin_bottom = 142.0 __meta__ = { "_edit_use_anchors_": false } -[node name="OK" type="Button" parent="Panel/CenterContainer"] -margin_left = 202.0 -margin_top = 9.0 -margin_right = 282.0 -margin_bottom = 48.0 +[node name="OK" type="Button" parent="Notification/Panel/CenterContainer"] +margin_left = 183.0 +margin_right = 269.0 +margin_bottom = 39.0 focus_mode = 0 enabled_focus_mode = 0 text = "Got it!" __meta__ = { "_edit_use_anchors_": false } -[connection signal="pressed" from="Panel/CenterContainer/OK" to="." method="confirm"] + +[connection signal="pressed" from="Notification/Panel/CenterContainer/OK" to="Notification" method="confirm"] diff --git a/scenes/optionbutton.gd b/scenes/optionbutton.gd new file mode 100644 index 00000000..0a88d030 --- /dev/null +++ b/scenes/optionbutton.gd @@ -0,0 +1,28 @@ +extends OptionButton + +func _ready(): + var languages = game.get_available_languages() + + for i in range(languages.size()): + var locale = languages[i] + add_item(_get_language_name(locale), i) + set_item_metadata(i, locale) + + _select_current_language() + + connect("item_selected", self, "_on_language_selected") + + +func _select_current_language(): + var current = TranslationServer.get_locale() + for i in range(get_item_count()): + if get_item_metadata(i) == current: + select(i) + break + +func _on_language_selected(index: int): + var selected_language = get_item_metadata(index) + game.change_language(selected_language) + +func _get_language_name(locale: String) -> String: + return tr(locale) diff --git a/scenes/repository.gd b/scenes/repository.gd index 916bb03b..f6ee6e3d 100644 --- a/scenes/repository.gd +++ b/scenes/repository.gd @@ -89,8 +89,8 @@ 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") - label_node.text = new_label + game.notify(tr("This is the time machine of another person! To interact with it, you need special commands!"), self, "remote") + label_node.text = tr(new_label) func random_position(): return Vector2(rand_range(0, rect_size.x), rand_range(0, rect_size.y)) diff --git a/scenes/repository.tscn b/scenes/repository.tscn index 566b5e88..b669fbe9 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 @@ -113,6 +110,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"] diff --git a/scenes/sandbox.tscn b/scenes/sandbox.tscn index ee28577c..e0546a93 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 @@ -48,4 +45,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/shell.gd b/scenes/shell.gd index 83988472..3ead78ae 100644 --- a/scenes/shell.gd +++ b/scenes/shell.gd @@ -29,7 +29,7 @@ func run(command, crash_on_fail=true): func run_async(command, pretty_command=null, crash_on_fail=true): var shell_command = ShellCommand.new() shell_command.command = command - shell_command.pretty_command = command + shell_command.pretty_command = shell_command.command if pretty_command: shell_command.pretty_command = pretty_command shell_command.crash_on_fail = crash_on_fail diff --git a/scenes/terminal.gd b/scenes/terminal.gd index 527635a7..73fe2866 100644 --- a/scenes/terminal.gd +++ b/scenes/terminal.gd @@ -171,7 +171,7 @@ func command_done(cmd): add_ansi_command(output, cmd) if cmd.output.length() <= 1000: add_ansi_output(output, cmd) - game.notify("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") + 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: var pager = $Pager/Text pager.clear() diff --git a/scenes/terminal.tscn b/scenes/terminal.tscn index 2e8d6fa9..38fc96e1 100644 --- a/scenes/terminal.tscn +++ b/scenes/terminal.tscn @@ -34,16 +34,10 @@ 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 anchor_bottom = 1.0 -__meta__ = { -"_edit_use_anchors_": false -} [node name="TopHalf" type="Control" parent="Rows"] margin_right = 1920.0 @@ -56,12 +50,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 @@ -147,6 +138,7 @@ volume_db = -10.0 [node name="OkSound" type="AudioStreamPlayer" parent="."] stream = ExtResource( 2 ) volume_db = -5.0 + [connection signal="item_selected" from="Rows/TopHalf/Completions" to="." method="_completion_selected"] [connection signal="pressed" from="Rows/VBoxContainer/Button" to="Rows/VBoxContainer/Button" method="pressed"] [connection signal="pressed" from="Rows/VBoxContainer/Button2" to="Rows/VBoxContainer/Button2" method="pressed"] diff --git a/scenes/text_editor.tscn b/scenes/text_editor.tscn index 732784fe..f57409aa 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 ) @@ -13,9 +11,6 @@ text = "Text here" syntax_highlighting = true wrap_enabled = true script = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="SaveButton" type="Button" parent="."] anchor_left = 1.0 @@ -26,6 +21,7 @@ margin_left = -114.396 margin_top = -59.399 margin_right = -14.3955 margin_bottom = -14.399 +grow_horizontal = 0 focus_mode = 0 custom_fonts/font = ExtResource( 1 ) enabled_focus_mode = 0 @@ -48,5 +44,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 f2374af2..ffe9fb8d 100644 --- a/scenes/title.gd +++ b/scenes/title.gd @@ -5,6 +5,13 @@ func _ready(): game.skipped_title = true get_tree().change_scene("res://scenes/level_select.tscn") + $Label2.text = tr("by bleeptrack & blinry") + $Label3.text = tr("Original score by winniehell") + $VBoxContainer/Button.text = tr("Levels") + $VBoxContainer/Button3.text = tr("Sandbox") + $VBoxContainer/Button2.text = tr("Quit") + + func quit(): get_tree().quit() diff --git a/scenes/title.tscn b/scenes/title.tscn index 17aa86f1..f0112b56 100644 --- a/scenes/title.tscn +++ b/scenes/title.tscn @@ -1,9 +1,11 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=7 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/optionbutton.gd" type="Script" id=4] [ext_resource path="res://fonts/default.tres" type="DynamicFont" id=5] +[ext_resource path="res://styles/option_button.tres" type="StyleBox" id=6] [node name="Title" type="Control"] anchor_right = 1.0 @@ -33,18 +35,12 @@ 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__ = { -"_edit_use_anchors_": false -} [node name="VBoxContainer" type="VBoxContainer" parent="."] margin_left = 784.553 margin_top = 702.517 margin_right = 1136.55 margin_bottom = 885.517 -__meta__ = { -"_edit_use_anchors_": false -} [node name="Button" type="Button" parent="VBoxContainer"] margin_right = 351.0 @@ -57,10 +53,23 @@ margin_right = 351.0 margin_bottom = 83.0 text = "Sandbox" -[node name="Button2" type="Button" parent="VBoxContainer"] +[node name="OptionButton" type="OptionButton" parent="VBoxContainer"] margin_top = 88.0 margin_right = 351.0 margin_bottom = 127.0 +custom_constants/hseparation = 0 +custom_styles/hover = ExtResource( 6 ) +custom_styles/pressed = ExtResource( 6 ) +custom_styles/focus = ExtResource( 6 ) +custom_styles/disabled = ExtResource( 6 ) +custom_styles/normal = ExtResource( 6 ) +align = 1 +script = ExtResource( 4 ) + +[node name="Button2" type="Button" parent="VBoxContainer"] +margin_top = 132.0 +margin_right = 351.0 +margin_bottom = 171.0 text = "Quit" [node name="Sprite" type="Sprite" parent="."] diff --git a/sounds/buzzer.wav.import b/sounds/buzzer.wav.import index 0df076df..081434c2 100644 --- a/sounds/buzzer.wav.import +++ b/sounds/buzzer.wav.import @@ -17,5 +17,7 @@ force/max_rate=false force/max_rate_hz=44100 edit/trim=false edit/normalize=false -edit/loop=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 compress/mode=0 diff --git a/sounds/poof.wav.import b/sounds/poof.wav.import index 57110c6f..0eba4d0a 100644 --- a/sounds/poof.wav.import +++ b/sounds/poof.wav.import @@ -17,5 +17,7 @@ force/max_rate=false force/max_rate_hz=44100 edit/trim=false edit/normalize=false -edit/loop=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 compress/mode=0 diff --git a/sounds/success.wav.import b/sounds/success.wav.import index b6da387e..4f12acd1 100644 --- a/sounds/success.wav.import +++ b/sounds/success.wav.import @@ -17,5 +17,7 @@ force/max_rate=false force/max_rate_hz=44100 edit/trim=false edit/normalize=false -edit/loop=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 compress/mode=0 diff --git a/sounds/swish.wav.import b/sounds/swish.wav.import index 6eda4c47..1a6b4120 100644 --- a/sounds/swish.wav.import +++ b/sounds/swish.wav.import @@ -17,5 +17,7 @@ force/max_rate=false force/max_rate_hz=44100 edit/trim=false edit/normalize=false -edit/loop=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 compress/mode=0 diff --git a/sounds/swoosh.wav.import b/sounds/swoosh.wav.import index 78d86f82..f71cf6aa 100644 --- a/sounds/swoosh.wav.import +++ b/sounds/swoosh.wav.import @@ -17,5 +17,7 @@ force/max_rate=false force/max_rate_hz=44100 edit/trim=false edit/normalize=false -edit/loop=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 compress/mode=0 diff --git a/sounds/typewriter_ding.wav.import b/sounds/typewriter_ding.wav.import index 59f1cf7a..922ee3db 100644 --- a/sounds/typewriter_ding.wav.import +++ b/sounds/typewriter_ding.wav.import @@ -17,5 +17,7 @@ force/max_rate=false force/max_rate_hz=44100 edit/trim=false edit/normalize=false -edit/loop=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 compress/mode=0 diff --git a/styles/option_button.tres b/styles/option_button.tres new file mode 100644 index 00000000..0ccc1cc9 --- /dev/null +++ b/styles/option_button.tres @@ -0,0 +1,11 @@ +[gd_resource type="StyleBoxFlat" format=2] + +[resource] +content_margin_left = 11.0 +content_margin_top = 5.0 +content_margin_bottom = 5.0 +bg_color = Color( 0.227451, 0.227451, 0.227451, 1 ) +corner_radius_top_left = 5 +corner_radius_top_right = 5 +corner_radius_bottom_right = 5 +corner_radius_bottom_left = 5 diff --git a/styles/theme.tres b/styles/theme.tres index 35315aa3..a56c333f 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