All the mixed directory done

This commit is contained in:
CoylOne 2015-04-30 19:31:35 +03:00
parent 4fcfa695a7
commit bb01f66ca0
5 changed files with 257 additions and 10 deletions

View file

@ -10,7 +10,8 @@ exports.level = {
"es_AR": "Git Describe", "es_AR": "Git Describe",
"pt_BR": "Git Describe", "pt_BR": "Git Describe",
"zh_TW": "git describe", "zh_TW": "git describe",
"zh_CN": "git describe" "zh_CN": "git describe",
"ru_RU": "Git describe"
}, },
"hint": { "hint": {
"en_US": "Just commit once on bugFix when you're ready to move on", "en_US": "Just commit once on bugFix when you're ready to move on",
@ -20,7 +21,8 @@ exports.level = {
"es_AR": "Simplemente commiteá una vez en bugFix cuando estés listo para seguir", "es_AR": "Simplemente commiteá una vez en bugFix cuando estés listo para seguir",
"pt_BR": "Simplesmente commite uma vez em bugFix quando quiser parar de experimentar", "pt_BR": "Simplesmente commite uma vez em bugFix quando quiser parar de experimentar",
"zh_TW": "當你要移動的時候,只要在 bugFix 上面 commit 就好了", "zh_TW": "當你要移動的時候,只要在 bugFix 上面 commit 就好了",
"zh_CN": "当你要移动的时候,只要在 bugFix 上面 commit 就好了" "zh_CN": "当你要移动的时候,只要在 bugFix 上面 commit 就好了",
"ru_RU": "Когда закончишь, просто сделай commit"
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -463,6 +465,70 @@ exports.level = {
} }
} }
] ]
},
"ru_RU": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Git Describe",
"",
"Теги являются прекрасными ориентирами в истории изменений, поэтому в git есть команда, которая показывает как далеко текущее состоянии от ближайшего тега. И эта команда называется `git describe`",
"",
"Git describe помогает сориентироваться, после отката на много коммитов по истории изменений. Такое может случиться, когда вы сделали git bisect или если вы недавно вернулись из отпуска =)"
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Git describe выглядить примерно так:",
"",
"`git describe <ref>`",
"",
"Где `ref` это что-либо, что указывает на конкретный коммит. Если не указать `ref`, то git будет считать, что указано текущее положение (`HEAD`).",
"",
"Вывод команды выглядит примерно так:",
"",
"`<tag>_<numCommits>_g<hash>`",
"",
"Где `tag` это ближайший тег в истории изменений, `numCommits` это на сколько далеко мы от этого тега, а `hash` это хеш коммита, который описывается."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Посмотрим на простой пример. Для дерева, показанного ниже:"
],
"afterMarkdowns": [
"Команда `git describe master` выведет:",
"",
"`v1_2_gC2`",
"",
"Whereas `git describe side` would output:",
"Тогда как `git describe side` выведет:",
"",
"`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": [
"Это, в общем-то всё, что можно сказать про git describe. Попробуй выполнить команду на нескольких коммитах.",
"",
"Как только наиграешься, просто сделай один коммит и уровень будет пройден."
]
}
}
]
} }
} }
}; };

View file

@ -22,7 +22,8 @@ exports.level = {
"pt_BR": "Pegando um único commit", "pt_BR": "Pegando um único commit",
"ja": "一つのコミットのみを取得", "ja": "一つのコミットのみを取得",
"zh_CN": "只取一个 commit", "zh_CN": "只取一个 commit",
"zh_TW": "只取一個 commit" "zh_TW": "只取一個 commit",
г_КГ": "Выберем один коммит."
}, },
"hint": { "hint": {
"en_US": "Remember, interactive rebase or cherry-pick is your friend here", "en_US": "Remember, interactive rebase or cherry-pick is your friend here",
@ -33,7 +34,8 @@ exports.level = {
"ja": "このレベルではインタラクティブモードのrebaseやcherry-pickがクリアのカギです", "ja": "このレベルではインタラクティブモードのrebaseやcherry-pickがクリアのカギです",
"ko": "대화식 리베이스(rebase -i)나 or 체리픽(cherry-pick)을 사용하세요", "ko": "대화식 리베이스(rebase -i)나 or 체리픽(cherry-pick)을 사용하세요",
"zh_CN": "记住,交互式 rebase 或者 cherry-pick 会很有帮助", "zh_CN": "记住,交互式 rebase 或者 cherry-pick 会很有帮助",
"zh_TW": "記住,使用互動式的 rebase 或者 cherry-pick 會很有幫助" "zh_TW": "記住,使用互動式的 rebase 或者 cherry-pick 會很有幫助",
"ru_RU": "Не забывай, что интерактивный rebase и cherry-pick это твои друзья!"
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -390,6 +392,43 @@ exports.level = {
} }
} }
] ]
},
"ru_RU": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Вот ситуация, которая часто случается при разработке: мы пытаемся отследить ошибку, но она не очень очевидна. Для того, чтобы достичь успеха на этом поприще, мы используем несколько команд для отладки и вывода",
"",
"Каждая отладочная команда или команды вывода находится в своём коммите. В итоге, мы нашли ошибку, исправили её и порадовались!",
"",
"Но проблема в том, что мы хотим добавить в `master` только исправление ошибки из ветки `bugFix`. Если мы воспользуемся простым fast-forward, то в `master` попадут также отладочные команды. Должен быть другой способ..."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Надо заставить git копировать тольк один из коммитов. Это почти как в предыдущем уровне мы можем использовать уже известные нам команды: ",
"",
"* `git rebase -i`",
"* `git cherry-pick`",
"",
"Чтобы достичь желаемого результата."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"В этом уровне тебе решать, какую команду использовать, но чтобы закончить уровень, убедись, что в мастер попал коммит, на который ссылается `bugFix`"
]
}
}
]
} }
} }
}; };

View file

@ -26,7 +26,8 @@ exports.level = {
"pt_BR": "Malabarismo com commits", "pt_BR": "Malabarismo com commits",
"ja": "コミットをやりくりする", "ja": "コミットをやりくりする",
"zh_CN": "提交变换戏法", "zh_CN": "提交变换戏法",
"zh_TW": "commit 的戲法" "zh_TW": "commit 的戲法",
"ru_RU": "Жонглируем коммитами"
}, },
"hint": { "hint": {
"en_US": "The first command is git rebase -i HEAD~2", "en_US": "The first command is git rebase -i HEAD~2",
@ -37,7 +38,8 @@ exports.level = {
"ja": "最初に打つコマンドはgit rebase -i HEAD~2", "ja": "最初に打つコマンドはgit rebase -i HEAD~2",
"ko": "첫번째 명령은 git rebase -i HEAD~2 입니다", "ko": "첫번째 명령은 git rebase -i HEAD~2 입니다",
"zh_CN": "第一个命令是 'git rebase -i HEAD~2'", "zh_CN": "第一个命令是 'git rebase -i HEAD~2'",
"zh_TW": "第一個命令是 'git rebase -i HEAD~2'" "zh_TW": "第一個命令是 'git rebase -i HEAD~2'",
"ru_RU": "Первой командой должна быть git rebase -i HEAD~2"
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -400,6 +402,47 @@ exports.level = {
} }
} }
] ]
},
"ru_RU": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Жонглируем коммитами",
"",
"Вот ещё одна ситуация, которая часто случается. Есть некоторые изменения (`newImage`) и другие изменения (`caption`), которые связаны, так что находятся друг подверх друга в репозитории.",
"",
"Штука в том, что иногда нужно внести небольшие изменения в более ранний коммит. В таком случае надо немного поменять `newImage`, несмотря на то, что коммит уже в прошлом!"
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Преодолеть эти трудности можно следующим образом:",
"",
"* Переставить коммит так, чтобы нужный находился наверху при помощи `git rebase -i`",
"* Внести изменения при помощи `commit --amend`",
"* Переставить всё обратно при помощи `git rebase -i`",
"* И наконец, переместить master на изменённуй часть дерева, чтобы закончить уровень.",
"",
"Этот уровень можно закончить несколькими способами, но в этом уровне нужно сосредоточиться на вышеописанном методе."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Обрати внимание на итоговое состояние в этом уровне так как мы дважды перемещаем коммиты, они каждый получать по апострофу. Ещё один апостроф добавляется, когда мы делаем commit --amend.",
"",
"Важно, чтобы совпадало не только дерево коммитов, но и количество апострофов."
]
}
}
]
} }
} }
}; };

View file

@ -25,7 +25,8 @@ exports.level = {
"de_DE": "Jonglieren mit Commits Teil 2", "de_DE": "Jonglieren mit Commits Teil 2",
"ja": "コミットをやりくりする その2", "ja": "コミットをやりくりする その2",
"zh_CN": "提交交换戏法 #2", "zh_CN": "提交交换戏法 #2",
"zh_TW": "commit 的戲法 #2" "zh_TW": "commit 的戲法 #2",
"ru_RU": "Жонглируем коммитами №2"
}, },
"hint": { "hint": {
"en_US": "Don't forget to forward master to the updated changes!", "en_US": "Don't forget to forward master to the updated changes!",
@ -36,7 +37,8 @@ exports.level = {
"ja": "masterのポインタを先に進めることを忘れずに", "ja": "masterのポインタを先に進めることを忘れずに",
"ko": "master를 변경 완료한 커밋으로 이동(forward)시키는 것을 잊지 마세요!", "ko": "master를 변경 완료한 커밋으로 이동(forward)시키는 것을 잊지 마세요!",
"zh_CN": "别忘记了将 master 快进到最新的更新上!", "zh_CN": "别忘记了将 master 快进到最新的更新上!",
"zh_TW": "別忘記了將 master 推到最新的 commit 上面!" "zh_TW": "別忘記了將 master 推到最新的 commit 上面!",
"ru_RU": "Не забудь переместить master на последние изменения."
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -417,6 +419,49 @@ exports.level = {
} }
} }
] ]
},
"ru_RU": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Жонглируем коммитами №2",
"",
"*Перед прохождением этого уровня обязательно надо пройти предыдущий уровен 'Жонглиуем коммитами №1'*",
"",
"В прошлом уровне мы использовали `rebase -i`, чтобы переставлять коммиты. Как только нужный нам коммит оказывался в конце, мы могли спокойно изменить его при помощи --ammend и переставить обратно.",
"",
"Единственная проблема тут - это множеств перестановок, которые могут спровоцировать конфликты. Посмотрим, как с этой же задачей справиться cherry-pick"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Важно помнить, что cherry-pick поместить любой коммит сразу после HEAD (только, если этот коммит не является предком HEAD)",
"",
"Вот небольшое демо для напоминания:"
],
"afterMarkdowns": [
"Ок! Едем дальше!"
],
"command": "git cherry-pick C2",
"beforeCommand": "git checkout -b bugFix; git commit; git checkout master; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Итек, в этом уровне нужно достичь того же эффекта, но без использования `rebase -i`. Остальное по усмотрению.",
"",
"Важно, чтобы совпадало не только дерево коммитов, но и количество апострофов."
]
}
}
]
} }
} }
}; };

View file

@ -10,7 +10,8 @@ exports.level = {
"pt_BR": "Tags no Git", "pt_BR": "Tags no Git",
"fr_FR": "Git Tags", "fr_FR": "Git Tags",
"zh_CN": "Git Tags", "zh_CN": "Git Tags",
"zh_TW": "git tag" "zh_TW": "git tag",
"ru_RU": "Теги"
}, },
"hint": { "hint": {
"en_US": "you can either check out the commit directly or simply checkout the tag!", "en_US": "you can either check out the commit directly or simply checkout the tag!",
@ -20,7 +21,8 @@ exports.level = {
"es_AR": "Podés checkoutear directamente el commit, ¡o simplemente el tag!", "es_AR": "Podés checkoutear directamente el commit, ¡o simplemente el tag!",
"pt_BR": "Você pode fazer checkout diretamente no commit ou na tag correspondente!", "pt_BR": "Você pode fazer checkout diretamente no commit ou na tag correspondente!",
"zh_TW": "你可以直接 checkout 到 commit 上,或是簡單的 checkout 到 tag 上", "zh_TW": "你可以直接 checkout 到 commit 上,或是簡單的 checkout 到 tag 上",
"zh_CN": "你可以直接 checkout 到 commit 上,或是简单的 checkout 到 tag 上" "zh_CN": "你可以直接 checkout 到 commit 上,或是简单的 checkout 到 tag 上",
"ru_RU": "Можно делать checkout по хешу коммита или просто по тегу"
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -386,6 +388,58 @@ exports.level = {
} }
} }
] ]
},
"ru_RU": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Теги",
"",
"В прошлый уроках мы усвоили, что ветки просто двигать туда-сюда и они часто ссылаются на разные коммиты, как на изменения данных в ветке. Ветки просто изменить, они часто временны и постоянно меняют своё состояние.",
"",
"В таком случае, где взять *постоянную* ссылку на момент в истории изменений? Для таких вещей, как релиз, большие слияния нужно нечто более постоянное, чем ветка.",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Такое средство имеется. Git предоставляет нам теги, чья основная задача ссылаться постоянно на конкретный коммит.",
"",
"Важно, что после создания они никогда не сменят своего положения, так что можно с лёгкостью сделать checkout конкретного момента в истории изменений",
"",
"Посмотрим на это на практике."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Создадим тег на `C1`, который бутед нашей версией 1"
],
"afterMarkdowns": [
"Готово! Всё просто. Мы назвали тег `v1` и заставили его ссылкаться на `C1` явным образом. Если конкретный коммит не указан, гит пометит тегом `HEAD`"
],
"command": "git tag v1 C1",
"beforeCommand": "git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Чтобы пройти этот уровень, просто создай теги как показано на визуализации и потом перейди на тег `v1`. Обрати внимание, что ты перейдёшь в состояние `detached HEAD`, так как нельзя сделать коммит прамо в тег v1.",
"",
"В следующем уровне, мы попробуем более интересные способы применения тегов."
]
}
}
]
} }
} }
}; };