diff --git a/src/levels/remote/fetchRebase.js b/src/levels/remote/fetchRebase.js index b6f4beca..3447d3a7 100644 --- a/src/levels/remote/fetchRebase.js +++ b/src/levels/remote/fetchRebase.js @@ -10,7 +10,8 @@ exports.level = { "pt_BR": "Histórico divergente", "de_DE": "Abweichende History", "fr_FR": "Historique divergent", - "ja" : "履歴の分岐" + "ja" : "履歴の分岐", + "ru_RU": "Расхождение в истории" }, "hint": { "en_US": "check out the ordering from the goal visualization", @@ -20,7 +21,8 @@ exports.level = { "ot_BR": "Preste atenção na ordem da visualização do objetivo", "de_DE": "Beachte die Reihenfolge in der Zieldarstellung", "ja" : "ゴールのビジュアライズの順番を参照", - "fr_FR": "regardez l'ordre dans la fenêtre de visualisation d'objectif" + "fr_FR": "regardez l'ordre dans la fenêtre de visualisation d'objectif", + "ru_RU": "проверьте сортировку в визуализации цели" }, "startDialog": { "en_US": { @@ -1023,6 +1025,149 @@ exports.level = { } } ] + }, + "ru_RU": { + "childViews": [ + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "## Когда наработки расходятся", + "", + "Вот мы и познакомились с тем, как забирать (`pull`) чужие коммиты и как закачивать (`push`) свои нарабокт и изменения. Выглядит всё довольно просто, и не ясно какие же могу возникать у людей трудности со всем этим ?", + "", + "Сложности возникают тогда, когда история репозитория *расходится*. Давайте посмотрим на пример прежде чем идти дальше...", + "" + ] + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Представьте себе, Вы склонировали репозиторий в понедельник и начали разрабатывать какую-то новую и уникальную часть приложения (на сленге разработчиков - `фича`). В пятницу вечером Вы наконец-то готовы опубликовать Вашу фичу. Но, о нет! Ваш коллега в течении недели написал кучу кода, который делает все Ваши наработки устарелыми. Этот код был также закоммичен и опубликован на общедоступном удалённом репозитории, поэтому теперь *Ваш* код базируется на *устаревшей* версии проект и более не уместен.", + "", + "В этому случае использование комманды `git push` является сомнительным. Как поведёт себя комманда `git push` если Вы её выполните ? Может быть она изменит удалённый репозиторий и вернёт всё к тому состоянию, которое было в понедельник ? А может быть комманда попробует добавить Ваш код, не удаляя при этом новый? Или же она проигнорирует Ваши изменения, так как они уже устаревшие?", + "", + "По причине того, что в данной ситуации (когда история расходится) слишком много двусмысленностей и неопределённостей, git не даст Вам закачать (`push`) Ваши изменения. Чтобы поделится и закачать свои наработки, git будет принуждать Вас включить в состав своей работы все те последние наработки и изменения, находящиеся на удалённом репозитории." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Слишком много болтавни! Давайте посмотрим как всё работает на деле" + ], + "afterMarkdowns": [ + "Видите? Ничего не произошло. Всё потому, что комманда `git push` не выполнилась успешно. Дело в том, что Ваш последний коммит `C3` основан на удалённом коммите `C1`. В свою очередь удалённый репозиторий уже изменился под воздействием `C2`. Вот почему git отклонил Ваш push." + ], + "command": "git push", + "beforeCommand": "git clone; git fakeTeamwork; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Как же разрешит данную ситуацию? Всё очень просто! Всё что Вам нужно - перебазировать свою работу на наиболее последнюю версию удалённой ветки.", + "", + "Существует множество путей, как сделать это, но наиболее простой способ 'сдвинуть' свои наработки - через пребазировку или rebasing. Давайте посмотрим, как это выглядит." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Теперь, когда мы сперва перебазиуемся прежде чем публиковать изменения..." + ], + "afterMarkdowns": [ + "Опа! Мы только что обновили наш локальный образ удалённого репозитория средствами `git fetch`. Ещё мы перебазировали наши наработки, чтобы они отражали все изменения с удалённого репозитория, и опубликовали их с помощью `git push`" + ], + "command": "git fetch; git rebase o/master; git push", + "beforeCommand": "git clone; git fakeTeamwork; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "А есть ещё какие-либо варианты чтобы обновить мои наработки, к тому моменту как удалённый репозиторий был обновлён? Конечно есть! Давайте ознакомимся с парочкой новых штучек, но в этот раз с помощью комманды `merge`.", + "", + "Не смотря на то, что `git merge` не передвигает ваши наработки (а всего лишь создаёт новый коммит, в котором Ваши и удалённые изменения объеденены), этот способ помогает указать git-у на то, что Вы собираетесь включить в состав Ваших наработок все изменения с удалённого репозитория. Это значит, что Ваш коммит отразится на всех коммитах удалённой ветки, поскольку удалённая ветка является *предком* Вашей собственной локальной ветки.", + "", + "Давайте взглянем на демонстрацию..." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Таким образм если мы объеденим (merge) вместо перебазирования (rebase)..." + ], + "afterMarkdowns": [ + "Опа! Мы обновили наше локальное представление удалённого репозитория с помощью `git fetch`, *объединили* Ваши новые наработки с нашими наработками (чтобы отразить изменения в удалённом репозитории), и затем опубликовали их с помощью `git push`" + ], + "command": "git fetch; git merge o/master; git push", + "beforeCommand": "git clone; git fakeTeamwork; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Здорово! А можно ли как-то зделать всё тоже самое, но с меньшим количеством комманд?", + "", + "Конечно -- ведь Вы уже знаете комманду `git pull`, которая является аналогом и более кратким аналогом для совместных fetch и merge. А команда `git pull --rebase` - аналог для совместно вызванных fetch и rebase!", + "", + "Давайте взглянем на эти оба варианта." + ] + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "Сперва - с флагом `--rebase`..." + ], + "afterMarkdowns": [ + "Тот же результат как и ранее, но намного короче вызов команд." + ], + "command": "git pull --rebase; git push", + "beforeCommand": "git clone; git fakeTeamwork; git commit" + } + }, + { + "type": "GitDemonstrationView", + "options": { + "beforeMarkdowns": [ + "А теперь с обычным `pull`" + ], + "afterMarkdowns": [ + "И снова - результат такой же, как и ранее!" + ], + "command": "git pull; git push", + "beforeCommand": "git clone; git fakeTeamwork; git commit" + } + }, + { + "type": "ModalAlert", + "options": { + "markdowns": [ + "Рабочий процесс получения изменений (fetching), перебазирования/объединения (rebase/merging) и публикации изменений (pushing) довольно часто используемый. В последующий уроках мы изучим более сложные варианты этих рабочих процессов, но пока что, давайте остановимся на том, что есть.", + "", + "Выполните следующее, чтобы выполнить задание уровня:", + "", + "* Склонируйте репозиторий", + "* Сфабрикуйте командную работу (1 коммит)", + "* Сделайте свой собственный коммит (1 commit)", + "* Опубликуйте свои наработки посредствам *перебазировки rebasing*" + ] + } + } + ] } } };