Ukrainian translation for general strings and Main levels.

Fix css for bottom right panel to fit a new language.
This commit is contained in:
vitalii 2015-11-04 19:32:19 +02:00
parent 02530196c2
commit 909db0fe9e
27 changed files with 1368 additions and 141 deletions

View file

@ -12,7 +12,8 @@ exports.level = {
"pt_BR": "Múltiplos pais",
"zh_TW": "多個 parent commit",
"ru_RU": "Здоровая семья или несколько родителей",
"ko" : "다수의 부모"
"ko" : "다수의 부모",
'uk': 'Декілька батьків'
},
"hint": {
"en_US": "Use `git branch bugWork` with a target commit to create the missing reference.",
@ -24,7 +25,8 @@ exports.level = {
"pt_BR": "Use `git branch bugWork` com um commit alvo para criar a referência que falta",
"zh_TW": "在一個指定的 commit 上面使用 `git branch bugWork`。",
"ru_RU": "`git branch bugWork` на нужном коммите поможет создать нужную ссылку.",
"ko" : "`git branch bugWork`를 대상 커밋과 함께 사용해서 부족한 참조를 만드세요"
"ko" : "`git branch bugWork`를 대상 커밋과 함께 사용해서 부족한 참조를 만드세요",
'uk': 'Використай "git branch bugWork" на потрібному коміті щоб створити потрібне посилання'
},
"startDialog": {
"en_US": {
@ -896,6 +898,93 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Вибираємо Попередників",
"",
"Так само як модифікатор `~`, модифікатор `^` також приймає необов’язкове число після нього.",
"",
"Замість того щоб вказувати кількість генерацій щоб переміститись назад (те що робить `~`), число після `^` вказує на яке батьківське посилання мерджу потрібно перейти. Зауважте що так як мерджевий коміт має декілька батьків, використання '^' без числа є неоднозначним.",
"",
"Git зазвичай перейде на \"першого\" з батьків вверх з мерджевого коміту, але вказання числа після `^` змінює цю поведінку. ",
"",
"Досить розмов, давайте перевіримо як це працює на дії.",
""
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Ось ми маємо мерджевий коміт. Якщо зробимо checkout `master^` без числа, ми потрапимо на першого з предків ",
"",
"(*В нашій візуалізації, перший предок знаходиться прямо над мержевим комітом*)"
],
"afterMarkdowns": [
"Легко -- те до чого ми всі звикли."
],
"command": "git checkout master^",
"beforeCommand": "git checkout HEAD^; git commit; git checkout master; git merge C2"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Тепер спробуємо натомість вказати другого батька..."
],
"afterMarkdowns": [
"Бачиш? Ми перейшли до другого батька вверх."
],
"command": "git checkout master^2",
"beforeCommand": "git checkout HEAD^; git commit; git checkout master; git merge C2"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Модифікатори `^` та `~` дозволяють легко переміщатись по дереву комітів:"
],
"afterMarkdowns": [
"Суперово швидко!"
],
"command": "git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",
"beforeCommand": "git commit; git checkout C0; git commit; git commit; git commit; git checkout master; git merge C5; git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Більше того, ці модифікатори можна використовувати разом! Заціни:"
],
"afterMarkdowns": [
"Теж саме, що й перед цим, але одною командою."
],
"command": "git checkout HEAD~^2~2",
"beforeCommand": "git commit; git checkout C0; git commit; git commit; git commit; git checkout master; git merge C5; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Практика",
"",
"Щоб завершити цей рівень, створи нову гілку на вказаному місці.",
"",
"Очевидно що в данному випадку досить легко вказати коміт напряму (щось на зразок checkout `C6`), але для закріплення матеріалу, використай модифікатори про які ми щойно говорили!"
]
}
}
]
}
}
};

View file

@ -63,7 +63,8 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_CN': '基础篇',
'zh_TW': '基礎篇',
'ko': '기본 명령어',
'ru_RU': 'Введение'
'ru_RU': 'Введение',
'uk': 'Вступ'
},
about: {
'en_US': 'A nicely paced introduction to the majority of git commands',
@ -75,7 +76,8 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_CN': '循序渐进介绍git主要命令',
'zh_TW': '循序漸進地介紹 git 主要命令',
'ko': '브랜치 관련 주요 git 명령어를 깔끔하게 알려드립니다',
'ru_RU': 'Хорошо подобранное введение в основные команды git'
'ru_RU': 'Хорошо подобранное введение в основные команды git',
'uk': 'Гарно підібране введення в основні команди git'
}
},
rampup: {
@ -88,7 +90,8 @@ var sequenceInfo = exports.sequenceInfo = {
'pt_BR': 'Acelerando',
'zh_CN': '进阶篇',
'zh_TW': '進階篇',
'ru_RU': 'Едем дальше'
'ru_RU': 'Едем дальше',
'uk': 'Їдемо далі'
},
about: {
'en_US': 'The next serving of 100% git awesomes-ness. Hope you\'re hungry',
@ -99,7 +102,8 @@ var sequenceInfo = exports.sequenceInfo = {
'pt_BR': 'A próxima porção de maravilhas do git. Faminto?',
'zh_CN': '接下来是git的超赞特性。迫不及待了吧',
'zh_TW': '接下來是 git 非常厲害的地方!相信你已經迫不及待了吧!',
'ru_RU': 'Следующая порция абсолютной git-крутотенюшки. Проголодались?'
'ru_RU': 'Следующая порция абсолютной git-крутотенюшки. Проголодались?',
'uk': 'Наступна порція абсолютної git-дивожнечі. Зголодніли?'
}
},
remote: {
@ -113,7 +117,8 @@ var sequenceInfo = exports.sequenceInfo = {
'pt_BR': 'Push & Pull -- repositórios remotos no Git!',
'zh_CN': 'Push & Pull -- Git Remotes!',
'zh_TW': 'Push & Pull -- Git Remotes!',
'ru_RU': 'Push & Pull - удалённые репозитории в Git!'
'ru_RU': 'Push & Pull - удалённые репозитории в Git!',
'uk': 'Push & Pull -- віддалені репозиторії в Git!'
},
about: {
'en_US': 'Time to share your 1\'s and 0\'s kids; coding just got social',
@ -124,7 +129,8 @@ var sequenceInfo = exports.sequenceInfo = {
'pt_BR': 'Hora de compartilhar seus 1\'s e 0\'s, crianças; programar agora é social!',
'zh_CN': '是时候分享你的代码了',
'zh_TW': '是時候分享你的程式碼了',
'ru_RU': 'Настало время поделиться своими единичками и нулями. Время коллективного программирования'
'ru_RU': 'Настало время поделиться своими единичками и нулями. Время коллективного программирования',
'uk': 'Настав час поділитися своїми нулями та одиничками; соціальне програмування'
}
},
remoteAdvanced: {
@ -138,7 +144,8 @@ var sequenceInfo = exports.sequenceInfo = {
'pt_BR': 'Até a origin e além -- repositórios remotos avançados!',
'zh_CN': '关于origin 和 其它仓库 -- Git Gemotes 高级命令',
'zh_TW': '關於 origin 和其它 repogit remote 的進階指令',
'ru_RU': 'Через origin к звёздам. Продвинутое использование Git Remotes'
'ru_RU': 'Через origin к звёздам. Продвинутое использование Git Remotes',
'uk': 'Через origin до зірок. Продвинуте використання Git Remotes'
},
about: {
'en_US': 'And you thought being a benevolent dictator would be fun...',
@ -149,7 +156,8 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_CN': '做一名仁慈的独裁者会很有趣..',
'zh_TW': '而且你會覺得做一個仁慈的獨裁者會很有趣...',
'de_DE': 'Git Remotes für Fortgeschrittene',
'ru_RU': 'Весело было быть всесильным мудрым правителем...'
'ru_RU': 'Весело было быть всесильным мудрым правителем...',
'uk': 'Й ти думав що бути всесильним диктатором буде весело...'
}
},
move: {
@ -164,7 +172,8 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_CN': '精通 rebase',
'zh_TW': '精通 rebase',
'ko': '리베이스 완전정복!',
'ru_RU': 'Перемещаем труды туда-сюда'
'ru_RU': 'Перемещаем труды туда-сюда',
'uk': 'Переміщуємо роботу туди-сюди'
},
about: {
'en_US': 'Get comfortable with modifying the source tree',
@ -177,7 +186,8 @@ var sequenceInfo = exports.sequenceInfo = {
'ko': '그 좋다고들 말하는 rebase에 대해 알아봅시다!',
'zh_CN': '大家都在说的 rebase 究竟是神马?看看吧!',
'zh_TW': '大家都在說的 rebase 到底是什麼啊?來看看吧!',
'ru_RU': 'Не стесняйтесь менять историю'
'ru_RU': 'Не стесняйтесь менять историю',
'uk': 'Не соромимось змінювати історію'
}
},
mixed: {
@ -191,7 +201,8 @@ var sequenceInfo = exports.sequenceInfo = {
'ko': '종합선물세트',
'zh_CN': '大杂烩?',
'zh_TW': '活用 git 的指令',
'ru_RU': 'Сборная солянка'
'ru_RU': 'Сборная солянка',
'uk': 'Всяке'
},
about: {
'en_US': 'A mixed bag of Git techniques, tricks, and tips',
@ -203,7 +214,8 @@ var sequenceInfo = exports.sequenceInfo = {
'ko': 'Git을 다루는 다양한 팁과 테크닉을 다양하게 알아봅니다',
'zh_CN': 'Git技术、技巧与贴士杂烩',
'zh_TW': 'git 的技術,招數與技巧',
'ru_RU': 'Ассорти из приёмов работы с Git, хитростей и советов'
'ru_RU': 'Ассорти из приёмов работы с Git, хитростей и советов',
'uk': 'Різні прийоми роботи з Git, хитрості та поради'
}
},
advanced: {
@ -216,7 +228,8 @@ var sequenceInfo = exports.sequenceInfo = {
'pt_BR': 'Temas avançados',
'zh_CN': '高级主题',
'zh_TW': '進階主題',
'ru_RU': 'Продвинутый уровень'
'ru_RU': 'Продвинутый уровень',
'uk': 'Досвідчений рівень'
},
about: {
'en_US': 'For the truly brave!',
@ -227,7 +240,8 @@ var sequenceInfo = exports.sequenceInfo = {
'pt_BR': 'Para os verdadeiros valentes!',
'zh_CN': '只为真正的勇士!',
'zh_TW': '來成為真正的強者吧!',
'ru_RU': 'Если ты смелый, ловкий, умелый потренируйся тут'
'ru_RU': 'Если ты смелый, ловкий, умелый потренируйся тут',
'uk': 'Для хоробрих'
}
}
};

View file

@ -11,7 +11,8 @@ exports.level = {
"fr_FR": "Gérer les branches avec Git",
"zh_CN": "建立Git分支",
"zh_TW": "建立 git branch",
"ru_RU": "Ветвление в Git"
"ru_RU": "Ветвление в Git",
"uk": "Розгалудження в Git"
},
"hint": {
"en_US": "Make a new branch with \"git branch [name]\" and check it out with \"git checkout [name]\"",
@ -23,7 +24,8 @@ exports.level = {
"zh_CN": "用 'git branch [分支名]' 来创建分支,用 'git checkout [分支名]' 切换到分支",
"zh_TW": "用 'git branch [ branch 名稱]' 來建立 branch用 'git checkout [ branch 名稱]' 切換到該 branch",
"ko": "\"git branch [브랜치명]\"으로 새 브랜치를 만들고, \"git checkout [브랜치명]\"로 그 브랜치로 이동하세요",
"ru_RU": "Создай новую ветку при помощи \"git branch [name]\" и перейди на неё при помощи \"git checkout [name]\""
"ru_RU": "Создай новую ветку при помощи \"git branch [name]\" и перейди на неё при помощи \"git checkout [name]\"",
"uk": "Створи нову гілку за допомогою \"git branch [ім’я]\" й перейди на неї за допомогою \"git checkout [ім’я]\""
},
"disabledMap": {
"git revert": true
@ -803,6 +805,84 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Гілки в Git",
"",
"Гілки в Git також є дивовижно легкі. Це просто посилання на конкретний коміт -- нічого більше. Через це багато Git ентузіастів повторюють мантру:",
"",
"```",
"роби гілки завчасно, роби гілки часто",
"```",
"",
"Через те що сворення нових гілок ніяк не впливає на використання памяті чи дискового простору, набагато простіше розділити свою роботу на кілька гілок, що містять логічно звязаний функціонал, ніж працювати з величезними гілками.",
"",
"Коли ми почнемо використовувати гілки та коміти ми побачимо як вони поєднуються між собою. Але зараз просто запам’ятай що гілка, в принципі, просто зберігає роботу теперішнього коміту і всіх його попередників."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте на практиці подивимось як вигдядають гілки в Git ",
"",
"Зараз ми створимо нову гілку, яка звется `newImage`"
],
"afterMarkdowns": [
"Ось і все що треба знати про гілкування! Гілка `newImage` тепер посилається на коміт `C1`"
],
"command": "git branch newImage",
"beforeCommand": ""
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте спробуємо додати якусь інформацію до цієї нової гілки. Натисни кнопку внизу"
],
"afterMarkdowns": [
"От халепа! Гілка `master` просунулася вперед але гілка `newImage` ні! Це тому що ми були не \"на\" новій гілці, й тому зірочка (*) була поруч з `master`"
],
"command": "git commit",
"beforeCommand": "git branch newImage"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте вкажемо git що ми хочемо перейти на нову гілку за допомогою",
"",
"```",
"git checkout [ім’я]",
"```",
"",
"Ця команда перекине нас на нову гілку до того як ми закомітимо наші зміни."
],
"afterMarkdowns": [
"Ось і все! Наші зміни були записані в нову гілку"
],
"command": "git checkout newImage; git commit",
"beforeCommand": "git branch newImage"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Ок! Тепер ти готовий до гілкування. Як тільки це вікно зчезне,",
"зроби нову гілку з назвою `bugFix` й перейди на нову гілку"
]
}
}
]
}
}
};

View file

@ -9,7 +9,8 @@ exports.level = {
'ko': 'Git 커밋 소개',
'zh_CN': 'Git Commits简介',
'zh_TW': '介紹 git commit ',
'ru_RU': 'Знакомство с Git Commit '
'ru_RU': 'Знакомство с Git Commit ',
'uk': 'Знайомство з Git Commit'
},
"goalTreeString": "{\"branches\":{\"master\":{\"target\":\"C3\",\"id\":\"master\"}},\"commits\":{\"C0\":{\"parents\":[],\"id\":\"C0\",\"rootCommit\":true},\"C1\":{\"parents\":[\"C0\"],\"id\":\"C1\"},\"C2\":{\"parents\":[\"C1\"],\"id\":\"C2\"},\"C3\":{\"parents\":[\"C2\"],\"id\":\"C3\"}},\"HEAD\":{\"target\":\"master\",\"id\":\"HEAD\"}}",
"solutionCommand": "git commit;git commit",
@ -24,7 +25,8 @@ exports.level = {
"zh_TW": "輸入兩次 'git commit' 就可以完成!",
"ja" : "'git commit'コマンドを2回打てば完成!",
"ko": "'git commit'이라고 두 번 치세요!",
"ru_RU": "Попробуй дважды выполнить команду 'git commit' ;)"
"ru_RU": "Попробуй дважды выполнить команду 'git commit' ;)",
"uk": "Спробуй двічі виконати команду 'git commit' ;)"
},
"disabledMap": {
"git revert": true
@ -461,6 +463,48 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Коміти в Git",
"Коміт в git репозиторії зберігає моментальну копію всіх файлів в поточній директорії. Це як гігантська копіпаста, навіть краще!",
"",
"Git намагається зберігати коміти як можна простіше й ефективніше, тому він не просто втупу копіює всю директорію при кожному коміті. Він може (наскільки це можливо) стиснути коміт як набір правок, чи \"дельту\", між двома версіями репозиторію .",
"",
"Git також зберігає історію коли і ким був створений тий чи інший коміт. Тому більшість комітів мають комітів-предків, що знаходяться вище в ієрархії -- ми це зоображуємо стрілочками в нашій візуалізації. Історія це необхідна річ для кожного хто працює з конкретним проектом!",
"",
"Тут є багато над чим подумати, але наразі ти можеш уявляти коміти як моментальні знімки проекту. Коміти майже невагомі й перемикання між ними убер швидке!"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давай, подивимось як це виглядає на практиці. Справа зоображена візуалізація (маленького) git репозиторію. Наразі ми бачимо два коміти -- перший початковий коміт, `C0`, й один наступний коміт `C1` який містить якісь змістовні зміни.",
"",
"Натисни кнопку нижче щоб створити новий коміт"
],
"afterMarkdowns": [
"Чудово. Ми тіки що зробили деякі зміни з репозиторієм й зберегли їх як новий коміт. Цей коміт має предка `C1`, який вказує на коміт з якого він був створений."
],
"command": "git commit",
"beforeCommand": ""
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Спробуй! Після того як це вікно закриється зроби два коміти щоб пройти цей рівень."
]
}
}
]
}
}
};

View file

@ -11,7 +11,8 @@ exports.level = {
"ja"   : "ブランチとマージ",
"zh_CN": "分支与合并",
"zh_TW": "git 中的 merge",
"ru_RU": "Слияния веток в Git"
"ru_RU": "Слияния веток в Git",
"uk": "Злиття гілок в Git"
},
"hint": {
"en_US": "Remember to commit in the order specified (bugFix before master)",
@ -23,7 +24,8 @@ exports.level = {
"zh_CN": "记住按指定的顺序提交bugFix先于master",
"zh_TW": "記住按指定的順序 commitbugFix 比 master 優先)",
"ko": "말씀드린 순서대로 커밋해주세요 (bugFix에 먼저 커밋하고 master에 커밋)",
"ru_RU": "Не забудь делать коммиты в правильном порядке (сначала bugFix, потом master)"
"ru_RU": "Не забудь делать коммиты в правильном порядке (сначала bugFix, потом master)",
"uk": "Не забудь робити коміти в правильному порядку (спочатку bugFix, а вже потім master)"
},
"disabledMap": {
"git revert": true
@ -718,6 +720,75 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Гілки та їх Злиття",
"",
"Чудово! Ми знаємо як комітити та створювати гілки. Тепер потрібно навчитися в якийсь спосіб поєднувати інфу з двох чи більше гілок. Це дозволить нам відгілкуватись, зробити нову фічу, й потім інтегрувати її взад.",
"",
"Перший спосіб об’єднувати робочу інфу з яким ми розберемось це `git merge`. Команда merge (злити) в Git створює спеціяльний коміт який має двох унікальних батьків. Здорова сім’я прям. Коміт з двома батьками в приниципі просто значить що в нього включена інфа з обох батьків і всіх їх попередників.",
"",
"Це простіше сприймається візуально, тому розберемо це в наступному слайді"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Тут ми маємо дві гілки; кожна з них містить унікальний коміт. Це означає що жодна з них не містить повного набору \"робочої інфи\" в цьому репозиторії. Давайте зіллємо всю інфу до купи за допомогою merge.",
"",
"Ми `змержимо` гілку `bugFix` в `master`"
],
"afterMarkdowns": [
"Нічосі! Ви то виділи? По-перше, `master` тепер вказує на коміт з двома батьками. Якщо ти піднімешся вверх з цього коміту по дереву, починаючи з `master`, на шляху ти зустрінеш кожен коміт аж до кореневого. Це означає що гілка `master` тепер містить всю інфу в цьому репозиторії.",
"",
"А ти помітив як змінилися кольори комітів? Для кращого розуміння процесу я додав певну кольорову диференціацію. Кожен бранч виділено окремим кольором. Колір кожного коміту це суміш кольорів всіх гілок що місять цей коміт.",
"",
"Тож ми бачимо що колір гілки `master` містять всі коміти, але не колір `bugFix`. Давайте виправимо це..."
],
"command": "git merge bugFix",
"beforeCommand": "git checkout -b bugFix; git commit; git checkout master; git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давай змержимо `master` в `bugFix`:"
],
"afterMarkdowns": [
"Так як `bugFix` є нащадком `master`, git'у непотрібно нічого робити; він просто пересунув `bugFix` на тей самий коміт, на якому знаходиться `master`.",
"",
"Тепер всі коміти одного кольору, що означає що кожен бранч включає в собі всю корисну інфу яка є в цьому репозиторії! Ура!"
],
"command": "git checkout bugFix; git merge master",
"beforeCommand": "git checkout -b bugFix; git commit; git checkout master; git commit; git merge bugFix"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Щоб пройти цей рівень виконай наступні кроки:",
"",
"* Зроби нову гілку (branch) з назвою `bugFix`",
"* Перейди на кілку `bugFix` за допомогою `git checkout bugFix`",
"* Зроби один коміт",
"* Повернись до `master` за допомогою `git checkout`",
"* Зроби ще один коміт",
"* Змерджи (злий) гілку `bugFix` в `master` за допомогою `git merge`",
"",
"*Не забувай, ти можеш завжди повернутися до цього діалогу за допомогою \"objective\"!*"
]
}
}
]
}
}
};

View file

@ -11,7 +11,8 @@ exports.level = {
"ko": "리베이스(rebase)의 기본",
"zh_CN": "介绍 rebase",
"zh_TW": "介紹 rebase",
"ru_RU": "Введение в rebase"
"ru_RU": "Введение в rebase",
"uk": "Знайомство з rebase"
},
"hint": {
"en_US": "Make sure you commit from bugFix first",
@ -23,7 +24,8 @@ exports.level = {
"ko": "bugFix 브랜치에서 먼저 커밋하세요",
"zh_CN": "确保你先在 bugFix 分支进行提交",
"zh_TW": "你要先在 bugFix branch 進行 commit",
"ru_RU": "Убедись, что сделал коммит в ветке bugFix"
"ru_RU": "Убедись, что сделал коммит в ветке bugFix",
"uk": "Впевнись, що зробив коміт в гілці bugFix"
},
"disabledMap": {
"git revert": true
@ -696,6 +698,73 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Git Rebase",
"",
"Інший спосіб комбінування змін з різних бранчів називається *rebase*. Rebase по суті бере кілька комітів , \"копіює\" їх, й кладе їх в інше місце.",
"",
"Це може звучати трохи незрозуміло, але основна перевага rebase в тому, що його використовують щоб створити зручну лінійну послідовність комітів. Коміт лог та історія будуть виглядати набагато чистіша, якщо користуватися лише rebase (а не merge)",
"",
"Спробуємо на практиці..."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Ми знову маємо дві гілки; зауваж, що наразі вибрана гілка bugFix (вважай зірочку)",
"",
"Ми хочемо перемістити наші зміни з гілки bugFix прямо до змін з гілки master. Тоді це буде виглядати наче ці зміни були додані одна за одною, коли насправді вони були додані одночасно.",
"",
"Давайте зробимо це за допомогою команди `git rebase`"
],
"afterMarkdowns": [
"Файно! Тепер зміни з гілки bugFix знаходяться прямо попереду змін з master й ми отримали зручну лінійну послідовність комітів.",
"",
"Вважай що коміт C3 досі десь існує (в дереві він тьмяніший за решту), й C3' це \"копія\" яку ми заребейсили в master.",
"",
"Є лише одна проблема: гілка master також не була оновлена, давайте зробимо це наступним кроком..."
],
"command": "git rebase master",
"beforeCommand": "git commit; git checkout -b bugFix C1; git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Тепер ми перейшли (checkout) до гілки `master`. Далі робимо rebase на `bugFix`..."
],
"afterMarkdowns": [
"Вуаля! Так як `master` це предок `bugFix`, git просто просунув посилання гілки `master` вперед в історії."
],
"command": "git rebase bugFix",
"beforeCommand": "git commit; git checkout -b bugFix C1; git commit; git rebase master; git checkout master"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Щоб пройти цей рівень, зроби наступне:",
"",
"* Зачекауть (checkout) новий бранч з назвою `bugFix`",
"* Зроби один коміт",
"* Повернись на master й зроби ще один коміт",
"* Зачекауть bugFix знову й заребейсь його на master",
"",
"Нехай щастить!"
]
}
}
]
}
}
};

View file

@ -12,7 +12,8 @@
"zh_TW": "git describe",
"zh_CN": "git describe",
"ru_RU": "Git describe",
"ko" : "Git describe(묘사)"
"ko" : "Git describe(묘사)",
"uk" : "Git Describe"
},
"hint": {
"en_US": "Just commit once on bugFix when you're ready to move on",
@ -24,7 +25,8 @@
"zh_TW": "當你要移動的時候,只要在 bugFix 上面 commit 就好了",
"zh_CN": "当你要移动的时候,只要在 bugFix 上面 commit 就好了",
"ru_RU": "Когда закончишь, просто сделай commit",
"ko" : "다음으로 넘어가고 싶으면 bugFix를 한번 커밋하면 됩니다."
"ko" : "다음으로 넘어가고 싶으면 bugFix를 한번 커밋하면 됩니다.",
"uk" : "Просто зроби один коміт в bugFix коли ти будеш готовий іти далі"
},
"startDialog": {
"en_US": {
@ -656,6 +658,69 @@
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Git Describe",
"",
"Через те що таги є такими чудовими \"орієнтирами\" по коду, git також має команду *описати* (describe) де ти є відносно найближчого \"орієнтира\" (тобто тага). Й ця команда називається `git describe`!",
"",
"Git describe допоможе тобі знайти себе після того як ти перепригнеш на кілька комітів по історії вперед чи назад; це може статися після того як ти закінчив git bisect (пошук-дебаггер) чи коли тебе попросили підійти до колеги котрий щойно прийшов з відпустки."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Git describe має наступну форму:",
"",
"`git describe <посилання>`",
"",
"Де `<посилання>` це що завгодно що вказує на конкретний коміт. Якщо ти не вкажеш посилання, git використає поточну локацію (`HEAD`).",
"",
"Вивід команди виглядає як:",
"",
"`<таг>_<к-ть комітів>_g<хеш>`",
"",
"де `таг` це найближчий попередній таг з історії, `к-ть комітів` це на скільки далеко цей таг в історії, а `<хеш>` це хеш коміту який описується."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Розглянемо короткий приклад. Для дерева нижче:"
],
"afterMarkdowns": [
"Команда `git describe master` виведе:",
"",
"`v1_2_gC2`",
"",
"коли `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. Спробуй виконати describe для різних місць в дереві комітів щоб набити руку.",
"",
"Як будеш готовий, просто закоміть щось щоб закінчити цей рівень. Трохи шари :P"
]
}
}
]
}
}
};

View file

@ -23,7 +23,8 @@ exports.level = {
"ja": "一つのコミットのみを取得",
"zh_CN": "只取一个 commit",
"zh_TW": "只取一個 commit",
"ru_RU": "Выберем один коммит."
"ru_RU": "Выберем один коммит.",
"uk": "Вибираємо всоьго один коміт."
},
"hint": {
"en_US": "Remember, interactive rebase or cherry-pick is your friend here",
@ -35,7 +36,8 @@ exports.level = {
"ko": "대화식 리베이스(rebase -i)나 or 체리픽(cherry-pick)을 사용하세요",
"zh_CN": "记住,交互式 rebase 或者 cherry-pick 会很有帮助",
"zh_TW": "記住,使用互動式的 rebase 或者 cherry-pick 會很有幫助",
"ru_RU": "Не забывай, что интерактивный rebase и cherry-pick это твои друзья!"
"ru_RU": "Не забывай, что интерактивный rebase и cherry-pick это твои друзья!",
"uk": "Не забувай, що інтерактивний rebase та cherry-pick -- це твої друзі!"
},
"startDialog": {
"en_US": {
@ -429,6 +431,45 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Локально складені коміти",
"",
"Ось ситуація з життя рядового програміста: я намагаюся відслідкувати баг але це не завжди вдається. Щоб допомогти собі, я додаю кілька дебаг команд та ще кілька println'ів.",
"",
"Всі ці команди для відладки та виводу данних знаходяться в своїх власних комітах. Врешті-решт я знаходжу баг, фікшу її та щиро радію!",
"",
"От тіки лишається проблема що потрібно мій фікс перенести з `bugFix` назад в гілку `master`. Якщо я просто зроблю фастфорвард (fast-forwarded) в `master`, тоді в `master` попадуть всі мої println'и що є зайвим. Має бути інший шлях..."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Ми маємо сказати гіту скопіювати лише один коміт. Це все те ж саме що в попередніх рівнях, й ми можемо використати ті ж самі команди:",
"",
"* `git rebase -i`",
"* `git cherry-pick`",
"",
"для досягнення мети."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"На цьому рівні тобі вирішувати якими командами користуватися, але щоб пройти цей рівень, впевнись що в `master` потрапить коміт, на який посилається `bugFix`."
]
}
}
]
}
}
};

View file

@ -27,7 +27,8 @@ exports.level = {
"ja": "コミットをやりくりする",
"zh_CN": "提交变换戏法",
"zh_TW": "commit 的戲法",
"ru_RU": "Жонглируем коммитами"
"ru_RU": "Жонглируем коммитами",
"uk": "Жонглюємо комітами"
},
"hint": {
"en_US": "The first command is git rebase -i HEAD~2",
@ -39,7 +40,8 @@ exports.level = {
"ko": "첫번째 명령은 git rebase -i HEAD~2 입니다",
"zh_CN": "第一个命令是 'git rebase -i HEAD~2'",
"zh_TW": "第一個命令是 'git rebase -i HEAD~2'",
"ru_RU": "Первой командой должна быть git rebase -i HEAD~2"
"ru_RU": "Первой командой должна быть git rebase -i HEAD~2",
"uk": "Перша команда має бути git rebase -i HEAD~2"
},
"startDialog": {
"en_US": {
@ -382,6 +384,40 @@ exports.level = {
}
},
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Жонглюємо комітами",
"",
"Ось інакша ситуація що доволі часто трапляється. В тебе є якісь зміни (`newImage`) та ще якийсь набір комітів (`caption`) що є зв’язані між собою, тому вони знаходяться один над одним в твоєму репозиториї (або один за одним).",
"",
"Штука в тому що іноді потрібно зробити невелику модифікацію до попереднього коміту. В цьому випадку, дизайнери хочуть щоб ми трохи змінили розміри `newImage`, не дивлячись на те що цей коміт знаходиться досить глибоко в історії!!"
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Ми поборимо цю складність наступним чином:",
"",
"* Ми відсортуємо коміти таким чином, щоб той який ми хочемо змінити був останнім за допомогою `git rebase -i`",
"* Ми виконаємо `commit --amend` щоб внести невелику правку до останнього коміту",
"* Тоді ми відсортуємо коміти в попередньому порядку, за допомогою `git rebase -i`",
"* І на останок, ми пересунемо master на змінену частину дерева щоб закінчити цей рівень(ти можеш вибрати метод)",
"",
"Насправді є кілька способів як виконати поставлену задачу (Я бачу ти поглядаєш на cherry-pick), й ми розберемося з ними всіма трохи пізніше, але зараз, давай, скористаємося цим методом.",
"Зверни увагу на фінальний стан в цьому рівні -- так як ми перемістили коміти двічі, кожен з них отримає по апострофу. Ще один апостроф додастся коли ми виконаємо commit --amend.",
"",
"Враховуючи вищесказане, я буду порівнювати дерево як по назві коміта так і за кількістю апострофів. Як тільки дерево цілей та master співпадуть, ти пройдеш цей рівень."
]
}
}
]
}
}
};

View file

@ -26,7 +26,8 @@ exports.level = {
"ja": "コミットをやりくりする その2",
"zh_CN": "提交交换戏法 #2",
"zh_TW": "commit 的戲法 #2",
"ru_RU": "Жонглируем коммитами №2"
"ru_RU": "Жонглируем коммитами №2",
"uk": "Жонглюємо комітами #2"
},
"hint": {
"en_US": "Don't forget to forward master to the updated changes!",
@ -38,7 +39,8 @@ exports.level = {
"ko": "master를 변경 완료한 커밋으로 이동(forward)시키는 것을 잊지 마세요!",
"zh_CN": "别忘记了将 master 快进到最新的更新上!",
"zh_TW": "別忘記了將 master 推到最新的 commit 上面!",
"ru_RU": "Не забудь переместить master на последние изменения."
"ru_RU": "Не забудь переместить master на последние изменения.",
"uk": "Не забудь перемістити master на останні зміни!"
},
"startDialog": {
"en_US": {
@ -462,6 +464,49 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Жонглюємо комітами #2",
"",
"*Якщо ти ще не пройшов Жонглюємо комітами #1 (попередній рівень), будь-ласка, зроби це перед тим як продовжити*",
"",
"Як ти бачив в попередньому рівні, ми використали `rebase -i` щоб впорядкувати набір комітів. Як тільки потрібний коміт опиняється на горі його досить легко змінити його за допомогою --amend й потім відсортувати коміти в попередньому порядку.",
"",
"Єдина проблема з таким підходом, що виконується досить багато перестановок комітів, що може призвести до конфліктів при виконанні rebase. Давайте спробуємо інший підхід який використовує `git cherry-pick`"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Не забувай що git 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": [
"Отже в цьому рівні, давайте досягнемо тієї ж мети модифікації `C2` але не використовуючи `rebase -i`. Я думаю ти розберешся як це зробити! :D",
"",
"Зверни увагу що точне число апострофів (') в коміті не важливе, важлива тільки відносна різниця. Наприклад, якщо кожен коміт буде містити додатковий апостроф, я все одно зарахую такий розв’язок."
]
}
}
]
}
}
};

View file

@ -12,7 +12,8 @@
"zh_CN": "Git Tags",
"zh_TW": "git tag",
"ru_RU": "git tag",
"ko" : "Git 태그"
"ko" : "Git 태그",
"uk" : "Git Tags"
},
"hint": {
"en_US": "you can either check out the commit directly or simply checkout the tag!",
@ -24,7 +25,8 @@
"zh_TW": "你可以直接 checkout 到 commit 上,或是簡單的 checkout 到 tag 上",
"zh_CN": "你可以直接 checkout 到 commit 上,或是简单的 checkout 到 tag 上",
"ru_RU": "Можно сделать checkout напрямую на коммит или же на тег",
"ko" : "커밋을 직접 또는 태그를 이용해서 체크아웃할수 있습니다!"
"ko" : "커밋을 직접 또는 태그를 이용해서 체크아웃할수 있습니다!",
"uk" : "ти можеш або зробити checkout коміта напряму чи просто зачекаутити таг!"
},
"startDialog": {
"en_US": {
@ -546,6 +548,58 @@
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Таги в Git",
"",
"Як ти вже знаєш з попередніх уроків, гілки досить просто переносити в інші місця й вони постійно вказують на різні коміти в процесі того як ті в них додаються. Гілки легко модифікувати, часто тимчасово, й вони постійно змінюються.",
"",
"В такому разі, де взяти *постійне* посилання на момент в історії твого проекту? Для таких речей як релізи чи великі мерджі потрібно щось більш стале ніж гілка.",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Єсть один спосіб! Таги в гіт якраз для цього й були створені -- вони (більш-менш) постійно вказують на певні коміти, й відмічають певні \"віхи\" в житті проекту, на які ти можеш потім посилатись так само як на гілки.",
"",
"Але що важливіше, вони ніколи не переміщуються коли створюються нові коміти. Ти не зможеш \"зачекаутити\" таг а потім закомітити якісь зміни в цей таг -- таги просто відмічають корисні чи символічні місця в дереві комітів.",
"",
"Давайте подивимось на практиці"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте спробуємо зробити новий таг на `C1` що є прототипом нашої першої версії (вигаданого проекту)"
],
"afterMarkdowns": [
"Ось маєш! Все досить просто. Ми назвали наш таг `v1` й він явно посилається на `C1`. Якщо пропустити коміт, git просто відмітить те на чому знаходиться `HEAD` в данний момент"
],
"command": "git tag v1 C1",
"beforeCommand": "git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Для того щоб пройти цей рівень достатньо створити кілька тагів, як показано на візуалізації цілей й потім зачекаутити `v1`. Зауваж що ти потрапиш в стан detached `HEAD` -- це тому що ти не можеш напряму комітити в таг `v1`.",
"",
"В наступному рівні ми розглянемо більш цікавий приклад роботи з тагами."
]
}
}
]
}
}
};

View file

@ -16,7 +16,8 @@
"zh_CN": "介绍 Cherry-pick",
"zh_TW": "介紹 cherry-pick",
"ru_RU": "Введение в Cherry-pick",
"ko" : "Cherry-pick 소개"
"ko" : "Cherry-pick 소개",
"uk": "Знайомство з cherry-pick"
},
"hint": {
"fr_FR": "git cherry-pick suivis par les noms de commits",
@ -28,7 +29,8 @@
"zh_CN": "git cherry-pick 后面跟着 commit 的名字",
"zh_TW": "git cherry-pick 後面要接著 commit 的名稱",
"ru_RU": "git cherry-pick основывается на именах коммитов!",
"ko" : "커밋의 이름들로 git cherry-pick 하세요!"
"ko" : "커밋의 이름들로 git cherry-pick 하세요!",
"uk": "git cherry-pick базується на іменах комітів!"
},
"startDialog": {
"en_US": {
@ -598,6 +600,63 @@
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Переміщуємо зміни",
"",
"Поки що ми розrлядали основи git -- як працювати з комітами та гілками й переміщення по дереву комітів. Цього вже достатньо щоб використовувати 90% фунцкій гіт та мати змогу ефективно працювати з гіт як розробник.",
"",
"Решта 10%, тим не менш, можуть бути надзвичайно корисними при роботі зі складними робочими процесами (workflow), чи коли ти чи ще хтось щось зробили не так і ти хочеш це виправити. Наступна концепція з якою ми познайомимось це \"перенесення змін\" -- іншими словами, це можливість розробника переміщувати коміти між гілками в простий та зручний спосіб.",
"",
"Це може видаватися складним, але насправді це дуже проста концепція."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Git Cherry-pick",
"",
"Перша команда в цій серії називається `git cherry-pick`. Вона має наступну форму:",
"",
"* `git cherry-pick <Коміт1> <Коміт2> <...>`",
"",
"Це надзвичайно простий спосіб вказати гіту що потрібно скопіювати серію комітів до поточного розташування (`HEAD`). Персонально я обожнюю `cherry-pick` за його прямолінійнсть, це дуже зрозуміла концепція що не використовує прихованої магії",
"",
"Давайте подивимось на практиці!",
""
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Ми бачимо репозиторій де є певні зміни в гілці `side` які ми хочемо скопіювати в `master`. Для цього можна використати rebase (який ми вже вивчили), але подивимось як з цим впорається cherry-pick."
],
"afterMarkdowns": [
"Оба-на! Ми хотіли коміти `C2` та `C4` й git вязв і додав їх до поточного розташування. Просто й доступно!"
],
"command": "git cherry-pick C2 C4",
"beforeCommand": "git checkout -b side; git commit; git commit; git commit; git checkout master; git commit;"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Щоб пройти це рівень, просто скопіюй якісь зміни з трьох гілок показаних на діаграмі в master. В візуалізації видно які коміти потрібно скопіювати.",
""
]
}
}
]
}
}
};

View file

@ -12,7 +12,8 @@ exports.level = {
"de_DE": "Den Kopf abtrennen",
"ja" : "HEADの分離",
"ru_RU": "Теряем \"голову\" или detached HEAD",
"ko" : "HEAD 분리하기"
"ko" : "HEAD 분리하기",
"uk": "Втрачаємо голову чи detached HEAD"
},
"hint": {
"en_US": "Use the label (hash) on the commit for help!",
@ -24,7 +25,8 @@ exports.level = {
"zh_TW": "使用 commit 上的標籤hash來幫助你",
"zh_CN": "使用提交记录上的标签(hash)来求助!",
"ru_RU": "Ориентируйся по идентификаторам (hash) коммитов.",
"ko" : "커밋에 있는 라벨(hash)을 활용하세요!"
"ko" : "커밋에 있는 라벨(hash)을 활용하세요!",
"uk": "Орієнтуйся по індентифікаторам (hash) комітів."
},
"startDialog": {
"en_US": {
@ -798,6 +800,84 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Прогулянка по Git",
"",
"Перед тим як ми перейдемо до більш продвинутих фіч гіта, важливо розуміти різни способи переміщення по дереву комітів твого проекту.",
"",
"Дуже важливо щоб тобі було комфортно переміщатись по репозиторію, так як цей скіл тобі знадобиться для використання в більшості команд git!",
"",
"",
"",
"",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## HEAD (голова)",
"",
"Спочатку розберемось з \"HEAD\". HEAD це символьне ім’я поточного вибраного коміта -- по суті це той коміт з яким ти зараз працюєш.",
"",
"HEAD завжди вказує на найновіший коміт з робочого дерева. Більшість команд що змінюють локальне дерево комітів, також модифікують HEAD.",
"",
"Зазвичай HEAD вказує на ім’я бранча (наприклад bugFix). Коли ти комітиш, змінюється статус гілки bugFix й це можна побачити подивившись на HEAD."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Розберемось з цим на практиці. Зараз ми перевіримо HEAD до та після коміту."
],
"afterMarkdowns": [
"Ти диви! HEAD весь цей час ховався за гілкою `master`."
],
"command": "git checkout C1; git checkout master; git commit; git checkout C2",
"beforeCommand": ""
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"### Відокремлюємо голову",
"",
"Detached HEAD (відокремлена голова) просто означає що HEAD посилається на коміт, а не на якусь гілку. Ось як це виглядає спочатку:",
"",
"HEAD -> master -> C1",
""
],
"afterMarkdowns": [
"Й в стані detached head",
"",
"HEAD -> C1"
],
"command": "git checkout C1",
"beforeCommand": ""
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Щоб пройти цей рівень, давайте відокремимо голову від гілки `bugFix` й натомість спрямуємо її на якийсь коміт.",
"",
"Вкажи цей коміт за його hash (хеш, ідентифікатором). Хеш кожного коміту відображений в кружочку що символізує коміт."
]
}
}
]
}
}
};

View file

@ -16,7 +16,8 @@
"zh_TW": "你可以指定 branch 或者是相對位置HEAD~)來表示 rebase 的目標",
"ru_RU": "Можно использовать либо ветки, либо относительные ссылки (HEAD~), чтобы указать цель для Rebase",
"ja" : "リベースする対象の指定には、ブランチ名や相対リファレンス(HEAD~)が使えます",
"ko" : "리베이스할 타겟으로 브랜치나 상대 참조(HEAD~)를 사용할 수 있습니다"
"ko" : "리베이스할 타겟으로 브랜치나 상대 참조(HEAD~)를 사용할 수 있습니다",
"uk" : "ти можеш використовувати гілки чи відносні посилання (HEAD~) щоб вказувати ціль для rebase"
},
"name": {
"en_US": "Interactive Rebase Intro",
@ -28,7 +29,8 @@
"zh_CN": "Rebase 交互命令介绍 ",
"zh_TW": "介紹互動式的 rebase",
"ru_RU": "Введение в интерактивный Rebase",
"ko" : "인터랙티브 리베이스 소개"
"ko" : "인터랙티브 리베이스 소개",
"uk" : "Знайомство з інтерактивним rebase"
},
"startDialog": {
"en_US": {
@ -680,6 +682,71 @@
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Інтерактивний Rebase",
"",
"Git cherry-pick зручно користуватись коли ти знаєш які коміти тобі потрібні (_і_ ти знаєш їхні хеші) -- важко вигадати щось простіше.",
"",
"Але що робити в ситуації коли ти не знаєш які коміти потрібні? На щастя git може впоратись і з цим! Для цього випадку використовують інтерактивний rebase -- це найкращий спосіб перевірити серію комітів які потрібно заребейсити.",
"",
"Розглянемо це детальніше..."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Інтерактивний rebase це насправді команда `rebase` з опцією `-i`.",
"",
"Якщо додати цю опцію, git відкриє діалог в якому покаже які коміти будуть скопійовані до кінцевого призначення. Він також покаже хеші комітів та їхні повідомлення, що допоможе розібратися що й до чого.",
"",
"В \"справжньому\" git, замість UI вікна відкриється файл в зконфігурованому текстовому редакторі, можливо `vim`. Для цього туторіалу я створив невеличке діалогове вікно що поводиться приблизно так само."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Коли відкриється вікно інтерактивного rebase ти можеш зробити 3 речі:",
"",
"* Ти можеш переставити коміти між собою просто змінивши їх порядок в діалозі (в нашому вікні ти зможеш перетягнути їх мишкою).",
"* Ти можеш повністю пропустити якісь коміти. В туторіалі потрібно вимкнути опцію `pick`, але в справжньому гіт потрібно просто видалити відповідний рядок.",
"* Також можна розчавити (squash) якісь коміти. На жаль наш туторіал не підтримує цю фічу (так як ми не підтримуєм роботу з файлами), але це дуже зручна опція в справжньому гіт. За допомогою неї можна декілька різніх комітів об’єднати в один",
"",
"Чудово! Давайте розбиремо це на прикладі"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Коли ти натиснеш кнопку відкриється вікно інтерактивного rebase. Перестав якісь коміти (можеш пропустити якісь якщо хочеш) і подивись що вийде!"
],
"afterMarkdowns": [
"Ка-бум! Git зкопіював коміти відповідно до того що було вказано в UI"
],
"command": "git rebase -i HEAD~4 --aboveAll",
"beforeCommand": "git commit; git commit; git commit; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Щоб пройти цей рівень за допомогою інтерактивного rebase впорядкуй коміти як показано на візуалізації. Пам’ятай що ти завжди можеш використати `undo` чи `reset` щоб виправити помилку :D"
]
}
}
]
}
}
};

View file

@ -12,7 +12,8 @@ exports.level = {
"pt_BR": "Referências relativas (^)",
"de_DE": "Relative Referenzen (^)",
"ru_RU": "Относительные ссылки (^)",
"ko" : "상대 참조 (^) (Relative Refs)"
"ko" : "상대 참조 (^) (Relative Refs)",
"uk": "Відносні посилання"
},
"hint": {
"en_US": "Remember the Caret (^) operator!",
@ -24,7 +25,8 @@ exports.level = {
"zh_CN": "记住插入(^)操作符!",
"zh_TW": "不要忘記插入(^)符號!",
"ru_RU": "Не забудь оператор `^`",
"ko" : "(^)연산자를 기억하세요!"
"ko" : "(^)연산자를 기억하세요!",
"uk": "Не забудь оператор `^`"
},
"startDialog": {
"en_US": {
@ -776,6 +778,81 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Відносні посилання",
"",
"Пересуватися по гіту використовуючи хеш комітів може бути трохи напряжно. В справжньому гіті в тебе не буде візуалізації дерева комітів в терміналі, тому доведеться використовувати `git log` щоб подивится хеші комітів.",
"",
"Більше того, хеші як правило набагато довші в справньому гіті. Типовий хеш виглядає як `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Без мнемонік не обійтися)...",
"",
"З іншого боку git дуже інтілігентсько працює з хешами. Він просить вказати рівно стільки літер, скільки потрібно щоб відрізнити один коміт від іншого. Отже, замість довгого хеша зверху можна просто набрати `fed2`."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Як було сказано, вказувати коміти за хешем не найзручніша річ, через це git підтримує відносні посилання. Вони реально круті!",
"",
"З відносними посиланнями ти можеш почати з якогось зручного місця (наприклад гілки `bugFix` чи посилання `HEAD`) й вказати потрібний коміт відносно цього посилання",
"",
"Відносні коміти є дуже потужним інструментом, але ми почнемо з двох простих прикладів:",
"",
"* Йдемо вверх на один коміт за допомогою `^`",
"* Йдемо вверх на кілька комітів за допомогою `~<число>`"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Розберемось спочатку з оператором каретки (^). Кожна каретка додана до посилання (напр. до імені коміту) вказує git що потрібно знайти батька посилання до якого застосована каретка.",
"",
"Тож `master^` тотожнє до \"перший предок посилання `master`\".",
"",
"`master^^` це дідусь (предок другого покоління) посилання `master`",
"",
"Давайте перейдемо на коміт трохи вище від master:"
],
"afterMarkdowns": [
"Бум! Готово. Трохи простіше ніж набирати хеш коміту"
],
"command": "git checkout master^",
"beforeCommand": "git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Ти також можеш використовувати `HEAD` з відносними посиланнями. Давай використаємо це щоб трошки піднятися по дереву."
],
"afterMarkdowns": [
"Просто! Ми можемо переміщуватись назад в часі з `HEAD^`"
],
"command": "git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",
"beforeCommand": "git commit; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Щоб пройти цей рівень перемістись на першого предка гілки `bugFix`. Ти опинишся в стані `detach HEAD`.",
"",
"Ти, звичайно, можеш вказати хеш, але натомість спробуй користуватися відносними посиланнями!"
]
}
}
]
}
}
};

View file

@ -12,7 +12,8 @@ exports.level = {
"de_DE": "Du musst mindestens einen Hash benutzen, um dieses Level zu schaffen",
"ja" : "このレベルをクリアするには少なくとも一つの直接リファレンスhashを使用する必要があります",
"ru_RU": "Понадобится использовать как минимум одну прямую ссылку (хеш), чтобы пройти этот уровень",
"ko" : "이번 레벨을 완료하려면 최소 한번은 직접 참조(해시)를 사용해야 합니다."
"ko" : "이번 레벨을 완료하려면 최소 한번은 직접 참조(해시)를 사용해야 합니다.",
"uk": "Тобі потрібно використати як мінімум одне пряме посилання (хеш) щоб пройти цей рівень"
},
"name": {
"en_US": "Relative Refs #2 (~)",
@ -24,7 +25,8 @@ exports.level = {
"zh_CN": "相对引用2(~)",
"zh_TW": "相對引用二(~",
"ru_RU": 'Относительные ссылки №2',
"ko" : "상대 참조 #2 (~)"
"ko" : "상대 참조 #2 (~)",
"uk": "Відносні посилання №2"
},
"startDialog": {
"en_US": {
@ -684,6 +686,75 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Оператор \"~\"",
"",
"Уявімо, що тобі потрібно піднятися досить високо вгору в дереві комітів. Було б трохи напряжно набирати `^` багато разів, тому Git також має оператор тильда(~).",
"",
"",
"До оператор тильда (не обов’язково) можна дописати справа число, що вказує на яку кількість предків потрібно піднятися вверх. Подивимось на практиці"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте вкажемо на яку кількість комітів повернутися з `~`."
],
"afterMarkdowns": [
"Ка-бум! Так коротко -- відносні посилання прекрасні."
],
"command": "git checkout HEAD~4",
"beforeCommand": "git commit; git commit; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Форсуємо гілку",
"",
"Тепер ти експерт в відносних посиланнях, давай же *використаємо* їх для справи.",
"",
"Один з найуживаніших прийомів де я використовую відносні посилання це переміщення гілок. Ти можеш напряму переспрямувати бранч на якийсь коміт використавши опцію `-f` (force, тобто насильно). Щось на зразок:",
"",
"`git branch -f master HEAD~3`",
"",
"Переміщує (насильно) гілку master на три предки позад HEAD."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте подивимось на попередню команду в дії"
],
"afterMarkdowns": [
"Ось і маєш! Відносні посилання дають нам зручний спосіб доступу до коміту`C1` крім того форсування бранчів (`-f`) дає нам можливість швидко перемістити гілку на цей коміт"
],
"command": "git branch -f master HEAD~3",
"beforeCommand": "git commit; git commit; git commit; git checkout -b bugFix"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Тепер, коли ти побачив відносні посилання та форсування гілок в купі, давай використаємо це щоб пройти поточний рівень.",
"",
"Щоб пройти цей рівень, перемісти `HEAD`, `master` та `bugFix` так як показано в візуалізації."
]
}
}
]
}
}
};

View file

@ -13,7 +13,8 @@ exports.level = {
"ko": "Git에서 작업 되돌리기",
"zh_CN": "在 Git 中撤销更改",
"zh_TW": "在 git 中取消修改 ",
"ru_RU": "Отмена изменений в Git"
"ru_RU": "Отмена изменений в Git",
"uk": "Відміна змін в Git"
},
"hint": {
"en_US": "Notice that revert and reset take different arguments.",
@ -25,7 +26,8 @@ exports.level = {
"zh_TW": "注意 revert 和 reset 使用不同的參數。",
"ko": "",
"ja" : "revertとresetとで引数が異なることに注意。",
"ru_RU": "Обрати внимание, что revert и reset принимают разные параметры."
"ru_RU": "Обрати внимание, что revert и reset принимают разные параметры.",
"uk": "Зверни увагу на те що revert та reset приймають різні параметри"
},
"startDialog": {
"en_US": {
@ -657,6 +659,69 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Відміна змін в Git",
"",
"Є декілька шляхів відмини змін в Git. Й так само як і коміти, зміни в гіт можна відміняти використовуючи або низькорівневі методи (додавання в коміт окремих файлів) так і високорівневі. Ми зосередемось на останніх.",
"",
"Є два основні шляхи відмін змін в Git -- перший це використовувати `git reset` й інший це `git revert`. В наступному слайді ми подивимося на кожний з них",
""
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"## Git Reset",
"",
"`git reset` відміняє зміни переміщуючи вказівник гілки назад в історії на старіший коміт. В принципі, можна вважати що це певне \"переписування історії;\" Коли `git reset` перемістить гілку назад буде здаватися, що відмінений коміт взагалі ніколи не створювався.",
"",
"Давайте подивимося, як це виглядає:"
],
"afterMarkdowns": [
"Чудово! Git перемістив посилання гілки master назад до `C1`; тепер наш локальний репозиторій в такому стані, наче коміту `C2` ніколи не було."
],
"command": "git reset HEAD~1",
"beforeCommand": "git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"## Git Revert",
"",
"Команда reset чудово працює для локальних бранчів на власному комп’ютері, але так як вона спричиняє \"переписування історії\", її не можна використовувати в ситуації коли кілька користувачів працюють з цим бранчем",
"",
"Для того щоб відкотити зміни й потім *поділитися* цими відкоченими змінами з друзями, потрібно використовувати `git revert`. Давай подивимось на прикладі"
],
"afterMarkdowns": [
"Дивно, був створений новий коміт, нижче того коміту який ми хотіли відкотити. Це сталося тому що новий коміт `C2'` містить *зміни* які повністю протилежні змінам `C2`.",
"",
"Після revert, ти зможеш зробити push щоб поділитися гілкою з іншими."
],
"command": "git revert HEAD",
"beforeCommand": "git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Щоб пройти цей рівень відміни два останні коміти на гілках `local` та `pushed`.",
"",
"Зауваж, що `pushed` це віддалена гілка, а `local` це локальна гілка -- це має допомогти з вибором методу."
]
}
}
]
}
}
};

View file

@ -17,7 +17,8 @@ exports.level = {
"ja" : "9000回以上のrebase",
"zh_CN": "N次Rebase",
"zh_TW": "N次Rebase",
"ru_RU": "Rebase over 9000 раз"
"ru_RU": "Rebase over 9000 раз",
"uk" : "Rebase over 9000 разів"
},
"hint": {
"en_US": "Remember, the most efficient way might be to only update master at the end...",
@ -29,7 +30,8 @@ exports.level = {
"ko": "아마도 master를 마지막에 업데이트하는 것이 가장 효율적인 방법일 것입니다...",
"zh_CN": "记住最后更新master分支可能是最高效的方法。",
"zh_TW": "要記住喔! 把 master branch 留到最後更新可能是最有效率的方法。",
"ru_RU": "Не забудь, что лучше всего сдвинуть мастер в самом конце..."
"ru_RU": "Не забудь, что лучше всего сдвинуть мастер в самом конце...",
"uk" : "Не забвай, що краще всього буде перемістити master в самому кінці... "
},
"startDialog": {
"en_US": {
@ -211,6 +213,24 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Ребейсим кілька гілок",
"",
"В нас тут до біса гілок! Давай перенесемо всі зміни з різних гілок в master.",
"",
"Але вищостояще начальство нам не полегшує життя -- вони хочуть щоб всі коміти були по порядку. Це означає що в реузультаті коміт `C7'` має бути з самого низу, `C6'` трохи вище, і так далі, все по порядку.",
"",
"Якщо ти щось зробиш не так, сміливо використовуй `reset` щоб почати спочатку. Подивись на наш розв’язок й подумай чи ти можеш обійтись меншою кількістю команд!"
]
}
}
]
}
}
};

View file

@ -16,7 +16,8 @@ exports.level = {
"ja": "ブランチスパゲッティ",
"zh_CN": "分支浆糊",
"zh_TW": "branch 漿糊",
"ru_RU": "Спутанные ветки"
"ru_RU": "Спутанные ветки",
"uk" : "Макарони з кілок"
},
"hint": {
"en_US": "Make sure to do everything in the proper order! Branch one first, then two, then three",
@ -28,7 +29,8 @@ exports.level = {
"ko": "이 문제를 해결하는 방법은 여러가지가 있습니다! 체리픽(cherry-pick)이 가장 쉽지만 오래걸리는 방법이고, 리베이스(rebase -i)가 빠른 방법입니다",
"zh_CN": "确保你是按照正确的顺序来操作!先操作分支 `one`, 然后 `two`, 最后才是 `three`",
"zh_TW": "確認你是按照正確的順序來操作!先操作 branch `one`, 然後 `two`, 最後才是 `three`",
"ru_RU": "Убедись, что у нас всё по порядку! Сначала ветка `one`, потом `two` и только потом `three`"
"ru_RU": "Убедись, что у нас всё по порядку! Сначала ветка `one`, потом `two` и только потом `three`",
"uk": "Впевнись що все йде по порядку! спочатку гілка `one`, потім `two` й тільки потім `three`"
},
"startDialog": {
"en_US": {
@ -230,6 +232,26 @@ exports.level = {
}
}
]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Магарони з гілок",
"",
"Ооо Неля! Ну й завданнячко.",
"",
"Ми маємо гілку `master` яка на кілька комітів попереду гілок `one` `two` та `three`. З незрозумілих причин, нам потрібно оновити ці гілки більш пізніми змінами з мастеру.",
"",
"Гілку `one` портрібно відсортувати по порядоку й видалити `C5`. Гілку `two` потрібно відсортувати, а в гілку `three` потрібно додати ще один коміт!",
"",
"Ми повністю покладаємось на тебе -- порівняй свій розв’зкок з нашим, який можна подивитись командою `show solution`. "
]
}
}
]
}
}
};