diff --git a/src/levels/mixed/describe.js b/src/levels/mixed/describe.js index 1eefde4d..76c6c7ef 100644 --- a/src/levels/mixed/describe.js +++ b/src/levels/mixed/describe.js @@ -17,7 +17,8 @@ exports.level = { "ko" : "Git describe(묘사)", "uk" : "Git Describe", "vi": "Git Describe(mô tả)", - "sl_SI": "Git Describe" + "sl_SI": "Git Describe", + "pl": "Git Describe" }, "hint": { "en_US": "Just commit once on bugFix when you're ready to move on", @@ -34,7 +35,8 @@ exports.level = { "ko" : "다음으로 넘어가고 싶으면 bugFix를 한번 커밋하면 됩니다.", "uk" : "Просто зроби один коміт в bugFix коли ти будеш готовий іти далі", "vi": "Đơn giản là hãy commit một lẩn ở bugFix là xong rồi", - "sl_SI": "Commitaj enkrat na bugFix, ko boš pripravljen za nadaljevanje." + "sl_SI": "Commitaj enkrat na bugFix, ko boš pripravljen za nadaljevanje.", + "pl": "Zcommituj raz na bugFix kiedy jesteś gotowy, aby przejść dalej", }, "startDialog": { "en_US": { @@ -985,6 +987,69 @@ exports.level = { } } ] + }, + "pl": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "### Git Describe", + "", + "Ponieważ znaczniki służą jako tak wspaniałe \"kotwice\" w bazie kodu, git ma polecenie *opisujące*, gdzie jesteś w stosunku do najbliższej \"kotwicy\". Ta komenda nazywa się `git describe`!", + "", + "`Git describe` może pomóc Ci zorientować się w sytuacji, gdy przesunąłeś wiele commitów wstecz lub do przodu w historii; może się to zdarzyć po wykonaniu bisekcji git (na potrzeby debugowania) lub gdy siedzisz przy komputerze współpracownika, który właśnie wrócił z wakacji." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Git describe przyjmuje postać:", + "", + "`git describe `", + "", + "Gdzie `` jest czymkolwiek, co git może przekształcić w commit. Jeśli nie podasz ``, git użyje miejsca, w którym jesteś teraz zcheckoutowany (`HEAD`).", + "", + "Wynik polecenia wygląda następująco:", + "", + "`__g`", + "", + "Gdzie `tag` jest najbliższym tagiem przodka w historii, `numCommits` jest liczbą commitów od tego tagu, a `` jest hashem opisywanego commitu." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Przyjrzyjmy się szybkiemu przykładowi. Dla tego drzewa poniżej:" + ], + "afterMarkdowns": [ + "Polecenie `git describe main` dałoby wynik:", + "", + "`v1_2_gC2`", + "", + "Gdzie `git describe side` dałoby wynik:", + "", + "`v2_1_gC4`" + ], + "command": "git tag v2 C3", + "beforeCommand": "git commit; go -b side HEAD~1; gc; gc; git tag v1 C0" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "To w zasadzie wszystko, co jest musisz wiedzieć o `git describe`! Spróbuj opisać kilka miejsc na tym poziomie, aby wyczuć to polecenie.", + "", + "Kiedy będziesz gotowy, po prostu zrób jeden commit, aby ukończyć poziom. Dajemy Ci bonusa :P" + ] + } + } + ] } } }; diff --git a/src/levels/mixed/grabbingOneCommit.js b/src/levels/mixed/grabbingOneCommit.js index 7408627c..8740d591 100644 --- a/src/levels/mixed/grabbingOneCommit.js +++ b/src/levels/mixed/grabbingOneCommit.js @@ -28,7 +28,8 @@ exports.level = { "ru_RU": "Выберем один коммит.", "uk": "Вибираємо всього один коміт", "vi": "Chỉ lấy 1 commit", - "sl_SI": "Izbiranje Samo Enega Commita" + "sl_SI": "Izbiranje Samo Enega Commita", + "pl": "Wzięcie tylko 1 commita", }, "hint": { "en_US": "Remember, interactive rebase or cherry-pick is your friend here", @@ -45,7 +46,8 @@ exports.level = { "ru_RU": "Не забывай, что интерактивный rebase и cherry-pick – это твои друзья!", "uk": "Не забувай, що інтерактивний rebase та cherry-pick -- це твої друзі!", "vi": "Hãy nhớ 2 anh bạn tương tác rebase và cherry-pick!", - "sl_SI": "Pomni, interaktivni rebase ali cherry-pick sta tu tvoja prijatelja." + "sl_SI": "Pomni, interaktivni rebase ali cherry-pick sta tu tvoja prijatelja.", + "pl": "Pamiętaj, interaktywny rebase oraz cherry-picking są tu twoimi przyjaciółmi", }, "startDialog": { "en_US": { @@ -632,6 +634,45 @@ exports.level = { } } ] - } + }, + "pl": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Lokalnie nałożone commity", + "", + "Oto sytuacja, która często się zdarza podczas pisania kodu: próbuję wytropić błąd, ale jest on dość nieuchwytny. Aby pomóc sobie w mojej pracy detektywistycznej, umieszczam kilka poleceń debugowania i kilka instrukcji print.", + "", + "Wszystkie te polecenia debugowania / drukowania znajdują się w osobnych commitach. W końcu namierzam błąd, naprawiam go i cieszę się!", + "", + "Jedynym problemem jest to, że teraz muszę przywrócić mój `bugFix` do gałęzi `main`. Jeśli po prostu zrobiłbym fast-foward `main`, wtedy `main` dostałby wszystkie moje deklaracje debugowania, czego bym nie chciał. Musi być na to inny sposób. . ." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Musimy powiedzieć gitowi, żeby skopiował tylko jeden z commitów. Dokładnie w ten sam sposób jak we wcześniejszych poziomach z przenoszeniem pracy -- używając tych samych komend:", + "", + "* `git rebase -i`", + "* `git cherry-pick`", + "", + "Aby osiągnać ten cel." + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Jest to wyższy poziom, więc pozostawimy Ci decyzję, której komendy chcesz użyć, ale aby ukończyć poziom, upewnij się, że `main` otrzyma commit, do którego odwołuje się `bugFix`." + ] + } + } + ] + }, } }; diff --git a/src/levels/mixed/jugglingCommits.js b/src/levels/mixed/jugglingCommits.js index e1286f80..397b848b 100644 --- a/src/levels/mixed/jugglingCommits.js +++ b/src/levels/mixed/jugglingCommits.js @@ -32,7 +32,8 @@ exports.level = { "ru_RU": "Жонглируем коммитами", "uk": "Жонглюємо комітами", "vi": "Tung hứng commit", - "sl_SI": "Žongliranje s Commiti" + "sl_SI": "Žongliranje s Commiti", + "pl": "Żonglowanie commitami", }, "hint": { "en_US": "The first command is git rebase -i HEAD~2", @@ -49,7 +50,8 @@ exports.level = { "ru_RU": "Первой командой должна быть git rebase -i HEAD~2", "uk": "Перша команда має бути git rebase -i HEAD~2", "vi": "Lệnh đầu tiên là git rebase -i HEAD~2", - "sl_SI": "Prvi ukaz je git rebase -i HEAD~2." + "sl_SI": "Prvi ukaz je git rebase -i HEAD~2.", + "pl": "Pierwszą komendą jest git rebase -i HEAD~2", }, "startDialog": { "en_US": { @@ -565,6 +567,40 @@ exports.level = { } } ] + }, + "pl": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Żonglowanie commitami", + "", + "Oto inna sytuacja, która zdarza się dość często. Masz pewne zmiany (`newImage`) i inny zestaw zmian (`caption`), które są powiązane, więc są one ułożone jeden na drugim w twoim repozytorium (tzw. jeden po drugim).", + "", + "Podstępną rzeczą jest to, że czasami trzeba dokonać małej modyfikacji wcześniejszego commitu. W tym przypadku projektant chce, abyśmy zmienili nieco wymiary `newImage`, nawet jeśli ten commit jest daleko w tyle w naszej historii!!!" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Przezwyciężymy tę trudność, wykonując następujące czynności:", + "", + "* Zmienimy kolejność commitów tak, aby ten, który chcemy zmienić, był na górze, używając `git rebase -i`.", + "* Wykonamy `git commit --amend`, aby dokonać niewielkiej modyfikacji", + "* Następnie zmienimy kolejność commitów z powrotem na taką, jaka była poprzednio za pomocą `git rebase -i`.", + "* Na koniec przeniesiemy się do tej zaktualizowanej części drzewa, aby zakończyć poziom (w wybrany przez Ciebie sposób)", + "", + "Istnieje wiele sposobów na osiągnięcie tego ogólnego celu (widzę, że masz oko na cherry-pick'ing), i zobaczymy więcej z nich później, ale na razie skupmy się na tej technice.", + "Na koniec, zwróć uwagę na stan celu - ponieważ przenosimy commit'y dwukrotnie, oba otrzymują apostrof. Dodajemy jeszcze jeden apostrof dla commitu, który zmieniamy, co daje nam ostateczną postać drzewa", + "", + "To powiedziawszy, mogę teraz porównać poziomy w oparciu o strukturę i względne różnice apostrofów. Tak długo, jak gałąź `main` Twojego drzewa ma taką samą strukturę, rozwiązanie zostanie uznane." + ] + } + } + ] } } }; diff --git a/src/levels/mixed/jugglingCommits2.js b/src/levels/mixed/jugglingCommits2.js index 0f20a3da..81923887 100644 --- a/src/levels/mixed/jugglingCommits2.js +++ b/src/levels/mixed/jugglingCommits2.js @@ -31,7 +31,8 @@ exports.level = { "ru_RU": "Жонглируем коммитами №2", "uk": "Жонглюємо комітами #2", "vi": "Tung hứng commit #2", - "sl_SI": "Žongliranje s Commiti #2" + "sl_SI": "Žongliranje s Commiti #2", + "pl": "Żonglowanie commitami #2", }, "hint": { "en_US": "Don't forget to forward main to the updated changes!", @@ -48,7 +49,8 @@ exports.level = { "ru_RU": "Не забудь переместить main на последние изменения.", "uk": "Не забудь перемістити main на останні зміни!", "vi": "Đừng quên đẩy nhánh main lên cập nhật mới nhất!", - "sl_SI": "Ne pozabi prestaviti main naprej na posodobljene spremembe." + "sl_SI": "Ne pozabi prestaviti main naprej na posodobljene spremembe.", + "pl": "Nie zapomnij zforwardować maina do najnowszych zmian!", }, "startDialog": { "en_US": { @@ -689,6 +691,49 @@ exports.level = { } } ] - } + }, + "pl": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Żonglowanie commitami #2", + "", + "*Jeśli nie ukończyłeś Żonglowania commitami #1 (poprzedni poziom), zrób to przed przejściem dalej*", + "", + "Jak widziałeś na ostatnim poziomie, użyliśmy `rebase -i` aby zmienić kolejność commitów. Kiedy commit, który chcieliśmy zmienić, był już na górze, mogliśmy go łatwo zmienić (`--amend`), a następnie przywrócić do odpowiedniej kolejności.", + "", + "Jedynym problemem jest to, że dokonuje się wiele zmian w kolejności, co może powodować konflikty podczas rebase'u. Przyjrzyjmy się innej metodzie korzystającej z `git cherry-pick`." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Pamiętaj, że git cherry-pick umieści commit z dowolnego miejsca w drzewie na HEAD (tak długo, jak ten commit nie jest przodkiem HEAD).", + "", + "Oto małe demo na odświeżenie pamięci:" + ], + "afterMarkdowns": [ + "Ładnie! Ruszajmy dalej." + ], + "command": "git cherry-pick C2", + "beforeCommand": "git checkout -b bugFix; git commit; git checkout main; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Więc na tym poziomie, osiągnijmy ten sam cel zmiany `C2` raz, ale unikając użycia `rebase -i`. Zostawię Ci to do rozgryzienia! :D", + "", + "Pamiętaj, że dokładna liczba apostrofów (') na zobowiązaniu nie jest ważna, tylko względne różnice. Na przykład, uznam drzewo, które pasuje do drzewa celu, ale ma wszędzie jeden dodatkowy apostrof." + ] + } + } + ] + }, } }; diff --git a/src/levels/mixed/tags.js b/src/levels/mixed/tags.js index 9415642f..ecf5b1ef 100644 --- a/src/levels/mixed/tags.js +++ b/src/levels/mixed/tags.js @@ -17,7 +17,8 @@ exports.level = { "ko" : "Git 태그", "uk" : "Git Tags", "vi" : "Tag trong Git", - "sl_SI": "Git Tagi" + "sl_SI": "Git Tagi", + "pl": "Git Tagi", }, "hint": { "en_US": "you can either check out the commit directly or simply checkout the tag!", @@ -34,7 +35,8 @@ exports.level = { "ko" : "커밋을 직접 또는 태그를 이용해서 체크아웃할수 있습니다!", "uk" : "ти можеш або зробити checkout коміта напряму чи просто зачекаутити таг!", "vi" : "Bạn có thể chuyển trực tiếp sang commit hoặc đơn giản là chuyển sang tag!", - "sl_SI": "Checkoutaš lahko neposredno commit ali pa preprosto njegov tag!" + "sl_SI": "Checkoutaš lahko neposredno commit ali pa preprosto njegov tag!", + "pl": "Możesz checkoutować commit bezpośrednio lub po prostu tag!", }, "startDialog": { "en_US": { @@ -816,6 +818,58 @@ exports.level = { } } ] - } + }, + "pl": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Git Tagi", + "", + "Jak dowiedziałeś się z poprzednich lekcji, gałęzie są łatwe w przemieszczaniu i często odnoszą się do różnych commitów, w miarę jak praca nad nimi jest kończona. Gałęzie łatwo ulegają mutacjom, często są tymczasowe i zawsze się zmieniają.", + "", + "Jeśli tak jest, możesz się zastanawiać, czy istnieje sposób na *permanentne* zaznaczanie punktów historycznych w historii projektu. Czy istnieje jakiś sposób na oznaczenie tych commitów czymś bardziej trwałym niż gałąź, w przypadku takich rzeczy jak duże wydania i duże scalenia/merdże?", + "" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Pewnie, że tak! Znaczniki/tagi Git obsługują dokładnie ten przypadek użycia -- (w pewnym sensie) trwale oznaczają pewne commity jako \"kamienie milowe\", do których można się następnie odnieść (po nazwie) jak do gałęzi.", + "", + "Co ważniejsze jednak, nigdy się nie przesuwają, gdy tworzone są kolejne commity. Nie można \"checkoutować\" tagu, a następnie zakończyć pracę nad nim (jakby był gałęzią, na której można zapisać nowe zmiany) - tagi istnieją jako kotwice w drzewie commitów, które wyznaczają pewne miejsca.", + "", + "Zobaczmy jak tagi wyglądają w praktyce." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Spróbujmy zrobić tag w `C1`, który jest naszym prototypem w wersji 1." + ], + "afterMarkdowns": [ + "Otóż to! Całkiem proste. Nazwaliśmy tag `v1` i odwołaliśmy się do commitu `C1` w sposób jawny. Jeśli nie wskażesz konkretnego commitu, git użyje commitu na który wskazuje `HEAD`." + ], + "command": "git tag v1 C1", + "beforeCommand": "git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Dla tego poziomu utwórz tagi takie jak w wizualizacji celu, a następnie zchckoutuj `v1`. Zauważ, że przechodzisz do odłączonego stanu `HEAD` - to dlatego, że nie możesz commitować bezpośrednio na tagu `v1`.", + "", + "Na kolejnym poziomie przeanalizujemy bardziej interesujący przypadek użycia tagów." + ] + } + } + ] + }, } }; diff --git a/src/levels/rampup/interactiveRebase.js b/src/levels/rampup/interactiveRebase.js index 0e534584..600f3de6 100644 --- a/src/levels/rampup/interactiveRebase.js +++ b/src/levels/rampup/interactiveRebase.js @@ -40,7 +40,7 @@ exports.level = { "uk" : "Знайомство з інтерактивним rebase", "vi" : "Giới thiệu về tương tác rebase", "sl_SI": "Interaktivni uvod v Rebase", - "pl": "Interaktywne wprowadzenie do Rebase'a", + "pl": "Wprowadzenie do interaktywnego Rebase'a", }, "startDialog": { "en_US": { @@ -1053,12 +1053,12 @@ exports.level = { "type": "ModalAlert", "options": { "markdowns": [ - "Kiedy otworzy się interaktywne okno dialogowe rebase, masz możliwość zrobienia dwóch rzeczy w naszej aplikacji edukacyjnej:", + "Kiedy otworzy się okno dialogowe do interaktywnego rebase'a, masz możliwość zrobienia dwóch rzeczy w naszej aplikacji edukacyjnej:", "", "* Możesz zmienić kolejność commitów poprzez zmianę ich kolejności w oknie (przeciągając je i upuszczając).", - "* Możesz zdecydować się na całkowite pominięcie niektórych commitów. Jest to oznaczone przez `pick` -- wpisanie `pick` off oznacza, że nie chcesz uwzględnić tego commitu.", + "* Możesz zdecydować się na całkowite pominięcie niektórych commitów. Jest to oznaczone przez `pick`. Wpisanie `pick off` oznacza, że nie chcesz uwzględnić tego commitu.", "", - "* Warto wspomnieć, że w prawdziwym interaktywnym rebasie możesz zrobić wiele innych rzeczy, takich jak squash (łączenie) commitów, poprawianie wiadomości commitów, a nawet edycja samych commitów. Dla naszych potrzeb jednak skupimy się na tych dwóch operacjach powyżej. *", + "* Warto wspomnieć, że w prawdziwym interaktywnym rebasie możesz zrobić wiele innych rzeczy, takich jak squash (łączenie) commitów, poprawianie wiadomości commitów, a nawet edycja samych commitów. Dla naszych potrzeb jednak skupimy się na tych dwóch operacjach powyżej.", "", "Świetnie! Spójrz na przykład." ]