mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-08-30 14:49:32 +02:00
Ukrainian translation for general strings and Main levels.
Fix css for bottom right panel to fit a new language.
This commit is contained in:
parent
02530196c2
commit
909db0fe9e
27 changed files with 1368 additions and 141 deletions
|
@ -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`), але для закріплення матеріалу, використай модифікатори про які ми щойно говорили!"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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 和其它 repo,git 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': 'Для хоробрих'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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` й перейди на нову гілку"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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": [
|
||||
"Спробуй! Після того як це вікно закриється зроби два коміти щоб пройти цей рівень."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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": "記住按指定的順序 commit(bugFix 比 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\"!*"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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",
|
||||
"",
|
||||
"Нехай щастить!"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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`."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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 співпадуть, ти пройдеш цей рівень."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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",
|
||||
"",
|
||||
"Зверни увагу що точне число апострофів (') в коміті не важливе, важлива тільки відносна різниця. Наприклад, якщо кожен коміт буде містити додатковий апостроф, я все одно зарахую такий розв’язок."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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`.",
|
||||
"",
|
||||
"В наступному рівні ми розглянемо більш цікавий приклад роботи з тагами."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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. В візуалізації видно які коміти потрібно скопіювати.",
|
||||
""
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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 (хеш, ідентифікатором). Хеш кожного коміту відображений в кружочку що символізує коміт."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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`.",
|
||||
"",
|
||||
"Ти, звичайно, можеш вказати хеш, але натомість спробуй користуватися відносними посиланнями!"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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` так як показано в візуалізації."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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` це локальна гілка -- це має допомогти з вибором методу."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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` щоб почати спочатку. Подивись на наш розв’язок й подумай чи ти можеш обійтись меншою кількістю команд!"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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`. "
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue