Add missing Ukrainian translation

This commit is contained in:
Andriy Moroz 2016-07-08 18:22:55 +03:00
parent 151a60a9a9
commit 006d21b432
12 changed files with 650 additions and 23 deletions

View file

@ -104,7 +104,7 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_CN': '接下来是 Git 的超赞特性。迫不及待了吧!', 'zh_CN': '接下来是 Git 的超赞特性。迫不及待了吧!',
'zh_TW': '接下來是 git 非常厲害的地方!相信你已經迫不及待了吧!', 'zh_TW': '接下來是 git 非常厲害的地方!相信你已經迫不及待了吧!',
'ru_RU': 'Следующая порция абсолютной git-крутотенюшки. Проголодались?', 'ru_RU': 'Следующая порция абсолютной git-крутотенюшки. Проголодались?',
'uk' : 'Наступна порція абсолютної git-дивожнечі. Зголодніли?', 'uk' : 'Наступна порція абсолютної git-дивини. Сподіваюсь, ви зголодніли',
'ko' : 'git은 아주 멋져요. 왜 멋진지 알려드립니다' 'ko' : 'git은 아주 멋져요. 왜 멋진지 알려드립니다'
} }
}, },
@ -149,7 +149,7 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_CN': '关于 origin 和 其它仓库 -- Git Gemotes 高级命令', 'zh_CN': '关于 origin 和 其它仓库 -- Git Gemotes 高级命令',
'zh_TW': '關於 origin 和其它 repogit remote 的進階指令', 'zh_TW': '關於 origin 和其它 repogit remote 的進階指令',
'ru_RU': 'Через origin к звёздам. Продвинутое использование Git Remotes', 'ru_RU': 'Через origin к звёздам. Продвинутое использование Git Remotes',
'uk' : 'Через origin до зірок. Продвинуте використання Git Remotes', 'uk' : 'Через origin до зірок. Прогресивне використання Git Remotes',
'ko' : '"origin"그 너머로 -- 고급 Git 원격 저장소' 'ko' : '"origin"그 너머로 -- 고급 Git 원격 저장소'
}, },
about: { about: {
@ -162,7 +162,7 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_TW': '而且你會覺得做一個仁慈的獨裁者會很有趣...', 'zh_TW': '而且你會覺得做一個仁慈的獨裁者會很有趣...',
'de_DE': 'Git Remotes für Fortgeschrittene', 'de_DE': 'Git Remotes für Fortgeschrittene',
'ru_RU': 'Весело было быть всесильным мудрым правителем...', 'ru_RU': 'Весело было быть всесильным мудрым правителем...',
'uk' : 'Й ти думав що бути всесильним диктатором буде весело...', 'uk' : 'А ти думав, що бути всесильним диктатором весело...',
'ko' : '자비로운 독재자가 되는게 재밌을 줄 알았겠지만...' 'ko' : '자비로운 독재자가 되는게 재밌을 줄 알았겠지만...'
} }
}, },

View file

@ -12,7 +12,8 @@ exports.level = {
"de_DE": "Optionen für Fetch", "de_DE": "Optionen für Fetch",
"ja" : "Fetchの引数", "ja" : "Fetchの引数",
"ru_RU": "Аргументы для fetch", "ru_RU": "Аргументы для fetch",
"ko" : "Fetch의 인자들" "ko" : "Fetch의 인자들",
"uk" : "Аргументи для fetch"
}, },
"hint": { "hint": {
"en_US": "Pay attention how the commit ids may have swapped! You can read slides again with \"help level\"", "en_US": "Pay attention how the commit ids may have swapped! You can read slides again with \"help level\"",
@ -24,7 +25,8 @@ exports.level = {
"de_DE": "Beachte wie die Commit IDs getauscht wurden! Du kannst den Einführungsdialog mit \"help level\" erneut anzeigen", "de_DE": "Beachte wie die Commit IDs getauscht wurden! Du kannst den Einführungsdialog mit \"help level\" erneut anzeigen",
"ja" : "コミットIDの入れ替わりに注意スライドを復習するには`help level`を実行", "ja" : "コミットIDの入れ替わりに注意スライドを復習するには`help level`を実行",
"ru_RU": "Обратите внимание на то, как номера коммитов могут меняться! Вы можете прочесть слайды вновь, воспользовавшись командой \"help level\"", "ru_RU": "Обратите внимание на то, как номера коммитов могут меняться! Вы можете прочесть слайды вновь, воспользовавшись командой \"help level\"",
"ko" : "커밋 ID가 바뀔수도있으니 주의하세요! \"help level\"을 입력하면 슬라이드들을 다시 읽어볼수 있습니다." "ko" : "커밋 ID가 바뀔수도있으니 주의하세요! \"help level\"을 입력하면 슬라이드들을 다시 읽어볼수 있습니다.",
"uk" : "Зверни увагу на те, що номери комітів можуть мінятися! Слайди уроку можна переглянути ще раз командою \"help level\""
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -1133,6 +1135,129 @@ exports.level = {
} }
} }
] ]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Аргументи git fetch",
"",
"Отже, ми вже вивчили все про аргументи git push, про корисний параметр `<place>` і про формат запису з двокрапкою (`<source>:<destination>`). Чи знадобляться нам ці зання про вивченні `git fetch`?",
"",
"Ще б пак! Аргументи для `git fetch` насправді *дуже, дуже* схожі на `git push`. Принцип той самий, з точністю до напрямку (бо ми скачуєм коміти, а не закачуєм).",
"",
"Розглянемо це крок за кроком..."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Параметр `<place>`",
"",
"Якщо вказати параметр `<place>` для команди git fetch наприклад так:",
"",
"`git fetch origin foo`",
"",
"git піде у віддалену гілку `foo`, візьме всі коміти, яких немає локально і закине в локальну гілку `o/foo`.",
"",
"Давайте подивимось на це в дії (просто щоб пригадати)."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Вказуючи `<place>`..."
],
"afterMarkdowns": [
"Ми скачуєм коміти лише з `foo` і кладемо їх в `o/foo`"
],
"command": "git fetch origin foo",
"beforeCommand": "git branch foo; git clone; git fakeTeamwork foo 2"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Ти можеш подумати, чому git закинув ці коміти в гілку `o/foo` замість того, що покласти їх відразу в локальну гілку `foo`? Я думав, що параметр `<place>` одночасно вказує місце звідки взяти і куди поставити?",
"",
"Ну, git робить невеликий вийняток в цьому випадку, оскільки ти, ймовірно, маєш якусь роботу в `foo` і не хочеш там нічого зіпсувати! Пригадай з попереднього уроку про `git fetch` -- він не оновлює твої локальні (не віддалені -- без `o/`) гілки, він тільки скачує коміти (так щоб їх можна було переглянути/змерджити пізніше).",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"\"Ну, в такому разі, що буде, якщо якно вказати і джерело і призначення `<source>:<destination>`?\"",
"",
"Якщо ти почуваєшся достатньо впевненим і хочеш скачати віддалені коміти *прямо* в свою локальну гілку, тоді - так, ти можеш так написати використавши синтаксис з двокрапкою. Єдиний вийняток - таким способом не можна витягувати зміни в поточну локальну гілку, в будь-яку іншу - без проблем.",
"",
"Тепер в нас `<source>` вказує на *віддалений репозиторій*, а `<destination>` - *локальне* місце кути скачаються коміти. Це повна протилежність тому, як було в git push, що з рештою має сенс оскільки ми передаємо дані у протилежному напрямку!",
"",
"Насправді, розробники рідко використовують такий спосіб на практиці. І він показаний тут лише для повноти описання наскільки `fetch` і `push` схожі, відрізняючись лише напрямом дії."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте подивимось на це божевілля в дії:"
],
"afterMarkdowns": [
"Ого! Дивись, git прийняв `foo~1` як джерело скачав коміти в `bar` (локальна гілка). Зауваж, що `foo` і `o/foo` не оновлювались, оскільки ми явно вказали звідки і куди передавати коміти."
],
"command": "git fetch origin foo~1:bar",
"beforeCommand": "git branch foo; git clone; git branch bar; git fakeTeamwork foo 2"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"А якщо вказаного місця призначення не існує на момент виконання команди? Давайте подивимось на попередній слайд але без гілки `bar`."
],
"afterMarkdowns": [
"Бачиш, все як і в випадку з git push. Git створив локальну гілку-призначення перед скачуванням, так само як створить гілку-призначення на віддаленій стороні перед пушем (якщо її не існувало, звичайно)."
],
"command": "git fetch origin foo~1:bar",
"beforeCommand": "git branch foo; git clone; git fakeTeamwork foo 2"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Без аргументів?",
"",
"Якщо `git fetch` запущено без аргументів, він просто скачає всі коміти з віддаленого репозиторія в віддалені (`o/`) гілки..."
],
"afterMarkdowns": [
"Все дуже просто, але варто було згадати ще раз."
],
"command": "git fetch",
"beforeCommand": "git branch foo; git clone; git fakeTeamwork foo; git fakeTeamwork master"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"OК, досить розмов! Щоб пройти цей рівень, скачай лише вказані на візуалізації коміти. Прояви фантазію підбираючи команди!",
"",
"Тобі потрібно вказати і джерело і призначення для обох fetch-команд. Слідкуй за змінами на візуалізації, ID комітів можуть змінюватися!"
]
}
}
]
} }
} }
}; };

View file

@ -1322,7 +1322,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"## Diverged Work", "## Розбіжності в історії",
"", "",
"Ми розглянули як витягувати (`pull`) коміти інших та як завантажувати (`push`) свої власні коміти. Це виявилось не надто складно, то як же так, що в людей дуже часто виникають з цим труднощі?", "Ми розглянули як витягувати (`pull`) коміти інших та як завантажувати (`push`) свої власні коміти. Це виявилось не надто складно, то як же так, що в людей дуже часто виникають з цим труднощі?",
"", "",

View file

@ -12,7 +12,8 @@ exports.level = {
"ja" : "リモートとのmerge", "ja" : "リモートとのmerge",
"fr_FR": "Fusionner avec les branches distantes", "fr_FR": "Fusionner avec les branches distantes",
"ru_RU": "Слияние с удалённым репозиторием", "ru_RU": "Слияние с удалённым репозиторием",
"ko" : "원격 작업과 merge하기" "ko" : "원격 작업과 merge하기",
"uk" : "Мердж з віддаленим репозиторієм"
}, },
"hint": { "hint": {
"en_US": "Pay attention to the goal tree!", "en_US": "Pay attention to the goal tree!",
@ -24,7 +25,8 @@ exports.level = {
"ja" : "ゴールツリーをよく見てください!", "ja" : "ゴールツリーをよく見てください!",
"fr_FR": "Respectez l'arbre représentant l'objectif !", "fr_FR": "Respectez l'arbre représentant l'objectif !",
"ru_RU": "Внимательно посмотрите на цель уровня!", "ru_RU": "Внимательно посмотрите на цель уровня!",
"ko" : "goal을 잘 살펴보세요!" "ko" : "goal을 잘 살펴보세요!",
"uk" : "Уважно подивись як має виглядати результат!"
}, },
"compareOnlyMaster": true, "compareOnlyMaster": true,
"startDialog": { "startDialog": {
@ -477,6 +479,51 @@ exports.level = {
} }
} }
] ]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Чому б не змерджити?",
"",
"Для того, щоб віддалений сервер прийняв твої зміни, треба *об'єднати* їх з останніми змінами на сервері. Це означає ребейс *або* мердж з віддаленою гілкою (напр. `o/master`).",
"",
"Хмм, якщо можна використати один із цих методів, для чого нам додаткові уроки про ребейс? Чому ніхто не любить `merge` працюючи з віддаленим сервером?",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"В спільноті розробників давно ведуться суперечки щодо переваг і недоліків мерджингу і ребейсу. Ось головні з них для ребейсу:",
"",
"За:",
"",
"* Ребейс дозволяє тримати дерево комітів чистим, оскільки все вибудовується в пряму лінію",
"",
"Проти:",
"",
"* Ребейс змінює історію в дереві комітів.",
"",
"Наприклад, коміт `C1` можна ребейснути *на* `C3`. Як результат `C1'` буде йти після `C3`, хоча насправді його зробили раніше.",
"",
"Деякі розробники люблять зберігати історії і тому вибирають мерджинг. Інші (як і я) воліють мати чисте дерево комітів і віддають перевагу ребейсу. Це питання смаку :D"
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"На цьому рівні давайте спробуємо вирішити попереднє завдання з використанням *мерджу*. Можливо вийде не так охайно, але добре покаже різницю в підходах."
]
}
}
]
} }
} }
}; };

View file

@ -613,7 +613,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"Ми розглянемо `git pull` більш детально пізніше (включаючи різні опції та аргументи), наразі просто спробуємо цю команду.", "Ми розглянемо `git pull` більш детально пізніше (включаючи різні опції та аргументи), наразі просто спробуємо цю команду.",
"", "",
"Не забувай -- щоб пройти цей рівень, достатньо використати `fetch` а потім `merge`, але це буде тобі коштувати одну зайву команду :P" "Не забувай -- щоб пройти цей рівень, достатньо використати `fetch`, а потім `merge`, але це буде тобі коштувати одну зайву команду :P"
] ]
} }
} }

View file

@ -12,7 +12,8 @@ exports.level = {
"ja" : "Pullの引数", "ja" : "Pullの引数",
"fr_FR": "Arguments de pull", "fr_FR": "Arguments de pull",
"ru_RU": "Аргументы для pull", "ru_RU": "Аргументы для pull",
"ko" : "pull 인자들" "ko" : "pull 인자들",
"uk" : "Аргументи pull"
}, },
"hint": { "hint": {
"en_US": "Remember that you can create new local branches with fetch/pull arguments", "en_US": "Remember that you can create new local branches with fetch/pull arguments",
@ -24,7 +25,8 @@ exports.level = {
"ja" : "Fetchとpullの引数を利用してローカルで新規ブランチを作成できるのをお忘れなく", "ja" : "Fetchとpullの引数を利用してローカルで新規ブランチを作成できるのをお忘れなく",
"fr_FR": "Vous pouvez aussi créer une nouvelle branche locale avec les arguments de fetch/pull", "fr_FR": "Vous pouvez aussi créer une nouvelle branche locale avec les arguments de fetch/pull",
"ru_RU": "Напоминаю, что новые ветки можно создавать и с помощью команд fetch/pull", "ru_RU": "Напоминаю, что новые ветки можно создавать и с помощью команд fetch/pull",
"ko" : "fetch/pull 과 인자들로 새 로컬 브랜치를 생성할수 있다는것을 기억하세요." "ko" : "fetch/pull 과 인자들로 새 로컬 브랜치를 생성할수 있다는것을 기억하세요.",
"uk" : "Пам'ятай, що ти можеш створювати нові гілки, використовуючи fetch/pull з аргументами"
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -692,6 +694,80 @@ exports.level = {
} }
} }
] ]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Аргументи git pull",
"",
"Зараз, коли ти знаєш майже *все*, що можна знати про аргументи для `git fetch` і `git push`, дійсно майже нема чого розповідати про git pull :)",
"",
"Це тому, що git pull, зрештою, *просто* зручне об'єднання fetch і merge. Його можна собі уявляти як git fetch і git merge виконані з *однаковими* аргументами.",
"",
"Це працює незалежно від складності переданих аргументів. Давайте розглянемо:"
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Ось декілька еквівалентних команд git:",
"",
"`git pull origin foo` це те саме, що й:",
"",
"`git fetch origin foo; git merge o/foo`",
"",
"А...",
"",
"`git pull origin bar~1:bugFix` аналог:",
"",
"`git fetch origin bar~1:bugFix; git merge bugFix`",
"",
"Бачиш? git pull це просто зручне скорочення для fetch + merge. А все, про що дбає git pull, це те, куди в результаті підуть коміти (а про це йому говорить аргумент `destination`).",
"",
"Давайте подивимось демонстрацію:"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Якщо ми вказуємо місце призначення для fetch, fetch виконується як звичайно, але мердж відбудеться з тим, що ми щойно стягнули"
],
"afterMarkdowns": [
"От бачиш, вказавши `master`, ми скачали коміти в `o/master` як завжди. Потім змерджили `o/master` в поточну гілку."
],
"command": "git pull origin master",
"beforeCommand": "git clone; go -b bar; git commit; git fakeTeamwork"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Чи це працює також при вказанні `source` і `destination`? І не сумнівайся! Ось приклад:"
],
"afterMarkdowns": [
"Ого, стільки роботи однією командою. Ми створили локальну гілку з назвою `foo`, скачали в неї коміти з віддаленого master, а потім змерджили `foo` в поточну гілку `bar`!"
],
"command": "git pull origin master:foo",
"beforeCommand": "git clone; git fakeTeamwork; go -b bar; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Добре, для завершення, спробуй досягти стану репозиторію показаного на візуалізації. Треба буде скачати відсутні коміти, створити нові гілки і змерджити їх в інші гілки, але не надто великою кількістю команд! :P"
]
}
}
]
} }
} }
}; };

View file

@ -25,7 +25,7 @@ exports.level = {
"ja" : "Pushができるようになるには、まずリポジトリをcloneする必要があるのをお忘れなく", "ja" : "Pushができるようになるには、まずリポジトリをcloneする必要があるのをお忘れなく",
"fr_FR": "Rappelez-vous que vous devez cloner avant de pouvoir faire un push !", "fr_FR": "Rappelez-vous que vous devez cloner avant de pouvoir faire un push !",
"ru_RU": "Помните, что прежде чем push-ить вам нужно склонировать репозиторий!", "ru_RU": "Помните, что прежде чем push-ить вам нужно склонировать репозиторий!",
"uk" : "Пам’ятай, що перед тим як щось push-нуть потрібно склонувати репозиторій!", "uk" : "Пам’ятай, що перед тим як щось push-нути потрібно склонувати репозиторій!",
"ko" : "push를 하기전에 clone을 먼저해야 된다는것을 기억하세요!" "ko" : "push를 하기전에 clone을 먼저해야 된다는것을 기억하세요!"
}, },
"startDialog": { "startDialog": {

View file

@ -15,7 +15,8 @@ exports.level = {
"ja" : "Git pushの引数", "ja" : "Git pushの引数",
"fr_FR": "Arguments de git push", "fr_FR": "Arguments de git push",
"ru_RU": "Аргументы git push", "ru_RU": "Аргументы git push",
"ko" : "git push의 인자들" "ko" : "git push의 인자들",
"uk" : "Аргументи git push"
}, },
"hint": { "hint": {
"en_US": "You can always look at the last slide of the dialog with \"objective\"", "en_US": "You can always look at the last slide of the dialog with \"objective\"",
@ -27,7 +28,8 @@ exports.level = {
"ja" : "ダイアログの最後のスライドを参照するには\"objective\"を実行", "ja" : "ダイアログの最後のスライドを参照するには\"objective\"を実行",
"fr_FR": "Vous pouvez toujours regarder le dernier slide des dialogues en tapant \"objective\".", "fr_FR": "Vous pouvez toujours regarder le dernier slide des dialogues en tapant \"objective\".",
"ru_RU": "Вы всегда можете ознакомиться с последним слайдом, воспользовавшись \"objective\".", "ru_RU": "Вы всегда можете ознакомиться с последним слайдом, воспользовавшись \"objective\".",
"ko" : "대화창의 마지막 슬라이드를 \"objective\"로 다시 볼 수 있습니다." "ko" : "대화창의 마지막 슬라이드를 \"objective\"로 다시 볼 수 있습니다.",
"uk" : "Завжди можна подивитися останній слайд діалогу за допомогою \"objective\""
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -684,6 +686,81 @@ exports.level = {
} }
} }
] ]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Аргумeнти git push",
"",
"Чудово! А зараз коли ти знаєш все про відслідковування віддалених гілок, ми можемо розглянути деяку магію, що відбувається при git push, fetch, і pull. Ми розглянемо лише окремі команди для розуміння загального принципу.",
"",
"Спочатку глянемо на `git push`. З уроку про відслідковування віддалених гілок ми знаємо, що git визначає куди і в *яку* гілку робити push дивлячись на локальну поточну гілку (і віддалену, за якою вона \"слідкує\"). Це поведінка `push` без аргументів, але git push може приймати необов'язкові аргументи в форматі:",
"",
"`git push <remote> <place>`",
"",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Ви спитаєте, що таке аргумент `<place>`? Ми скоро вдамося в детальні пояснення, але спочатку -- приклад. Виконання команди:",
"",
"`git push origin master`",
"",
"буквально перекладається як:",
"",
"*Піди в гілку, що називається \"master\" в моєму репозиторії, візьми всі коміти, піди у віддалений \"master\", що називається \"origin.\" Додай ті коміти, яких немає в цій гілці і надрукуй, що саме ти зробив.*",
"",
"Вказуючи `master` в якості аргумента \"place\", ми сказали git-у *звідки* взяти коміти і *куди* їх додати. (\"Place\") - фактично точка синхронізації двох репозиторіїв.",
"",
"Пам'ятайте, що оскільки ми надали git-у всю необхідну інформацію (вказавши обидва аргументи), не має значення яка гілка є зараз поточною!"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте розглянемо приклад використання аргументів. Зверніть увагу на поточну гілку в цьому прикладі."
],
"afterMarkdowns": [
"Ось так! `master` у віддаленому репозиторії обновився, оскільки ми вказали його в аргументах."
],
"command": "git checkout C0; git push origin master",
"beforeCommand": "git clone; git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"А якщо не вказувати аргументів? Що станеться?"
],
"afterMarkdowns": [
"Команда поверне помилку (як можна побачити), оскільки локальний `HEAD` не співпадає з відповідною віддаленою гілкою."
],
"command": "git checkout C0; git push",
"beforeCommand": "git clone; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"OК, на цьому рівні давайте оновимо віддалені гілки `foo` і `master`. Для ускладнення ми заборонимо використовувати `git checkout`!",
"",
"*Пам'ятай, віддалені гілки позначені префіксом `o/` оскільки повний префікс `origin/` не влазить в наш UI. Але не хвилюйся ",
"про це... ти можеш використовувати `origin` посилаючись на віддалений репозиторій.*"
]
}
}
]
} }
} }
}; };

View file

@ -12,7 +12,8 @@ exports.level = {
"ja" : "Git pushの引数 -- 拡張編!", "ja" : "Git pushの引数 -- 拡張編!",
"fr_FR": "Arguments de git push -- toujours plus !", "fr_FR": "Arguments de git push -- toujours plus !",
"ru_RU": "Аргументы для push -- расширенная версия!", "ru_RU": "Аргументы для push -- расширенная версия!",
"ko" : "git push 인자 -- 확장판!" "ko" : "git push 인자 -- 확장판!",
"uk" : "Розширені аргументи git push!"
}, },
"hint": { "hint": {
"en_US": "Remember you can admit defeat and type in \"show solution\" :P", "en_US": "Remember you can admit defeat and type in \"show solution\" :P",
@ -24,7 +25,8 @@ exports.level = {
"ja" : "降参して解説を見るには\"show solution\"を実行できるのをお忘れなく", "ja" : "降参して解説を見るには\"show solution\"を実行できるのをお忘れなく",
"fr_FR": "N'oubliez pas que vous pouvez toujours déclarer forfait avec \"show solution\" :P", "fr_FR": "N'oubliez pas que vous pouvez toujours déclarer forfait avec \"show solution\" :P",
"ru_RU": "Помните, Вы всегда можете признать своё поражение, набрав команду \"show solution\" (показать решение) :P", "ru_RU": "Помните, Вы всегда можете признать своё поражение, набрав команду \"show solution\" (показать решение) :P",
"ko" : "혹시 아세요? 패배를 인정하고 \"show solution\"을 입력할 수 있다는 걸요 :P" "ko" : "혹시 아세요? 패배를 인정하고 \"show solution\"을 입력할 수 있다는 걸요 :P",
"uk" : "Пам'ятай, ти завжди можеш визнати поразку і підглянути рішення командою \"show solution\" :P"
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -656,6 +658,76 @@ exports.level = {
} }
} }
] ]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Детальніше про аргумент `<place>`",
"",
"З попереднього уроку нам відомо, що коли ми вказуємо `master` в якості аргумента place для git push, ми задаємо і гілку *звідки* брати нові коміти і гілку *куди* їх буде перенесено.",
"",
"Тут ти можеш задуматись, а чи можуть гілки звідки беремо і куди переносимо бути різними? Що, коли потрібно коміти з локальної гілки `foo` перенести у віддалену гілку `bar`?",
"",
"Нажаль в git це неможливо... жартую! Звичайно, що можливо :)... git просто неймовірно гнучкий (іноді аж занадто).",
"",
"Давай подивимось як це робиться..."
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Для того, щоб в одному аргументі `<place>` вказати і місце звідки і куди, треба їх просто розділити двокрапкою:",
"",
"`git push origin <source>:<destination>`",
"",
"Такий запис називають \"colon refspec\". Тут refspec - це просто зручна назва місця, яке git може ідентифікувати (наприклад, гілка `foo` чи просто `HEAD~1`)",
"",
"Можливість вказати два різних місця, дає велику свободу і гнучкість в роботі з віддаленим репозиторієм. Давайте подивимось демонстрацію!"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Пам'ятай, `source` -- це будь-яка назва місця зрозуміла гіту:"
],
"afterMarkdowns": [
"Опа! Це доволі незвична команда, але тут все має сенс -- git, знаючи куди вказує `foo^`, завантажив на віддалену сторону ще відсутні там коміти і оновив місце призначення."
],
"command": "git push origin foo^:master",
"beforeCommand": "git clone; go -b foo; git commit; git commit"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"А що, коли вказаного місця призначення не існує? Ніяких проблем! Просто вкажи назву гілки і гіт створить її на віддаленому сервері."
],
"afterMarkdowns": [
"Спритно, еге-ж? :D"
],
"command": "git push origin master:newBranch",
"beforeCommand": "git clone; git commit"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"На цьому рівні спробуй досягти стану ропозиторію, показаного у візуалізації і пам'ятай про формат запису з двокрапкою:",
"",
"`<source>:<destination>`"
]
}
}
]
} }
} }
}; };

View file

@ -12,7 +12,8 @@ exports.level = {
"ja" : "undoやresetコマンドをいつでも使用することができるのをお忘れなく", "ja" : "undoやresetコマンドをいつでも使用することができるのをお忘れなく",
"fr_FR": "Rappelez-vous que vous pouvez toujours utiliser les commandes undo et reset.", "fr_FR": "Rappelez-vous que vous pouvez toujours utiliser les commandes undo et reset.",
"ru_RU": "Помни - ты всегда можешь отменить команды с помощью undo или reset", "ru_RU": "Помни - ты всегда можешь отменить команды с помощью undo или reset",
"ko" : "명령어를 undo와 reset으로 되돌릴 수 있다는 것을 잊지마세요" "ko" : "명령어를 undo와 reset으로 되돌릴 수 있다는 것을 잊지마세요",
"uk" : "Пам'ятай, ти в будь який момент можеш використовувати команди undo або reset"
}, },
"name": { "name": {
"en_US": "Push Master!", "en_US": "Push Master!",
@ -24,7 +25,8 @@ exports.level = {
"ja" : "Push Master!", "ja" : "Push Master!",
"fr_FR": "Maître du push !", "fr_FR": "Maître du push !",
"ru_RU": "Push Мастер!", "ru_RU": "Push Мастер!",
"ko" : "Push Master!" "ko" : "Push Master!",
"uk" : "Push Maйстер!"
}, },
"compareOnlyMasterHashAgnostic": true, "compareOnlyMasterHashAgnostic": true,
"startDialog": { "startDialog": {
@ -557,6 +559,59 @@ exports.level = {
} }
} }
] ]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Мердж гілок з фічами",
"",
"Тепер, коли ти вже впевнено володієш засобами `pull` та `push`, час перевірити ці знання в новому процесі.",
"",
"Зазвичай розробники працюють над якимось фічами в окремій гілці (не в `master`), а потім, коли роботу закінчено, інтегрують її. Це схоже на попередній урок (де окремі гілки пушили у віддалений репозиторій), але тут буде ще один додатковий крок.",
"",
"Деякі розробники виконують push і pull лише в гілці `master` -- тож `master` завжди буде актуальним і синхронізованим з віддаленою гілкою (`o/master`).",
"",
"Отже для цього процесу ми об'єднуємо дві речі:",
"",
"* інтеграцію гілки з фічею в `master`, і",
"* пул та пуш для синхронізації з віддаленим репозиторієм"
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте коротко пригадаємо як оновити `master` і запушити свої зміни."
],
"afterMarkdowns": [
"Ми виконали дві команди, які:",
"",
"* заребейсили нашу роботу поверх віддалених комітів, і",
"* опублікували наші зміни у віддаленому репозиторії"
],
"command": "git pull --rebase; git push",
"beforeCommand": "git clone; git commit; git fakeTeamwork"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Цей рівень доволі величенький -- ось, що треба буде зробити:",
"",
"* Є три гілки з фічами -- `side1` `side2` та `side3`",
"* Ми хочемо запушити кожну з них по порядку у віддалений репозиторій",
"* Віддалений репозиторій теж змінився, тож нам потрібно об'єднати всі ці зміни",
"",
":O Чимале завдання! Успіху! Виконання цього рівня буде великим кроком."
]
}
}
]
} }
} }
}; };

View file

@ -12,7 +12,8 @@ exports.level = {
"ja" : "無のsource", "ja" : "無のsource",
"fr_FR": "Source de rien du tout", "fr_FR": "Source de rien du tout",
"ru_RU": "Пустой источник", "ru_RU": "Пустой источник",
"ko" : "Source가 없다" "ko" : "Source가 없다",
"uk" : "Нема джерела"
}, },
"hint": { "hint": {
"en_US": "The branch command is disabled for this level so you'll have to use fetch!", "en_US": "The branch command is disabled for this level so you'll have to use fetch!",
@ -24,7 +25,8 @@ exports.level = {
"ja" : "このレベルではbranchコマンドが無効になっているのでfetchを使うしかない", "ja" : "このレベルではbranchコマンドが無効になっているのでfetchを使うしかない",
"fr_FR": "La commande branch est désactivée pour ce niveau, vous devrez donc utiliser fetch !", "fr_FR": "La commande branch est désactivée pour ce niveau, vous devrez donc utiliser fetch !",
"ru_RU": "Команда branch недоступна на этом упражнении, пользуйтесь командой fetch!", "ru_RU": "Команда branch недоступна на этом упражнении, пользуйтесь командой fetch!",
"ko" : "branch 명령이 비활성화 되어있습니다. fetch를 사용해야 되요!" "ko" : "branch 명령이 비활성화 되어있습니다. fetch를 사용해야 되요!",
"uk" : "Команда branch недоступна на цьому уроці, користуйся командою fetch!",
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -503,6 +505,59 @@ exports.level = {
} }
} }
] ]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Неочевидні способи використання `<source>`",
"",
"Git має два хитрі способи використання `<source>`. Оба випливають з факту, що формально (і цілком легально) ти можеш не вказувати джерело (`source`) як для git push так і для git fetch. Ось, як саме ти можеш це зробити:",
"",
"* `git push origin :side`",
"* `git fetch origin :bugFix`",
"",
"Давай подивимось, що в результаті вийде..."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Що буде, якщо спробувати запушити \"ніщо\" у гілку віддаленого репозиторію? Git її видалить!"
],
"afterMarkdowns": [
"Ось, ми успішно видалили гілку `foo` на віддаленому сервері запушивши в неї \"ніщо\". Ну, ніби все правильно..."
],
"command": "git push origin :foo",
"beforeCommand": "git clone; git push origin master:foo"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"І останнє, скачування \"ніщо\" в локальний репозиторій створює нову гілку"
],
"afterMarkdowns": [
"Дуже дивно, але такий він, git!"
],
"command": "git fetch origin :bar",
"beforeCommand": "git clone"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"Це швидкий рівень -- просто видали одну віддалену гілку і створи нову локальну гілку використовуючи `git fetch`!"
]
}
}
]
} }
} }
}; };

View file

@ -12,7 +12,8 @@ exports.level = {
"ja" : "リモートのトラッキング", "ja" : "リモートのトラッキング",
"fr_FR": "Suivi de branche distante", "fr_FR": "Suivi de branche distante",
"ru_RU": "Слежка за удалённым репозиторием", "ru_RU": "Слежка за удалённым репозиторием",
"ko" : "원격 저장소 추적하기" "ko" : "원격 저장소 추적하기",
"uk" : "Слідкуємо за віддаленим репозиторієм"
}, },
"hint": { "hint": {
"en_US": "Remember there are two ways to set remote tracking!", "en_US": "Remember there are two ways to set remote tracking!",
@ -24,7 +25,8 @@ exports.level = {
"ja" : "リモートトラッキングを設定する方法が二つあるのをお忘れなく!", "ja" : "リモートトラッキングを設定する方法が二つあるのをお忘れなく!",
"fr_FR": "Rappelez-vous qu'il existe deux façons de configurer le suivi de branche distante !", "fr_FR": "Rappelez-vous qu'il existe deux façons de configurer le suivi de branche distante !",
"ru_RU": "Помни, есть два способа установить слежку за удалённым репозиторием!", "ru_RU": "Помни, есть два способа установить слежку за удалённым репозиторием!",
"ko" : "원격 추적하기를 설정하는데에는 두가지 방법이 있습니다!" "ko" : "원격 추적하기를 설정하는데에는 두가지 방법이 있습니다!",
"uk" : "Пам'ятай, є два способи слідкувати за віддаленим репозиорієм!"
}, },
"startDialog": { "startDialog": {
"en_US": { "en_US": {
@ -1201,6 +1203,124 @@ exports.level = {
} }
} }
] ]
},
"uk": {
"childViews": [
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Гілки віддаленого стеження",
"",
"Одна з речей в попередніх уроках, яка могла виглядати \"магією\", це те, що гіт якось знає, що локальна гілка `master` відповідає віддаленій `o/master`. Звичайно, ці гілки мають схожі назви і це логічно -- співставити віддалену гілку `master` з `master` локальною, однак цей зв'язок добре видно в двох випадках:",
"",
"* Під час операції `pull`, коміти попадають в `o/master`, а вже потім *мерджаться* в локальний `master`. Гілка в яку відбудеться мердж якраз і визначається цим зв'язком.",
"* Під час операції `push`, коміти з гілки `master` переносяться у віддалений `master` (який локально представлений як `o/master`). *Гілка-призначення* для `push` визначена зв'язком між `master` і `o/master`.",
""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"## Гілки віддаленого стеження",
"",
"В двох словах, цей зв'язок між `master` та `o/master` і є тим \"віддаленим стеженням\" визначеним для гілки. Гілка `master` налаштована стежити за `o/master` -- це визначає неявну ціль для мерджу і неявне призначення під час операції `push` для гілки `master`.",
"",
"Ви можете подумати, а як же такий зв'язок було встановлено, якщо я не виконував жодної команди? Ну, коли гіт клонує репозиторій, він встановлює цей зв'язок автоматично.",
"",
"Під час клонування гіт створює гілки для стеження за кожною гілкою віддаленого репозиторію (напр. `o/master`). Потім він створює локальну гілку, що пов'язана і стежить за активною гілкою у віддаленому репозиторії, яка в більшості випадків називається `master`.",
"",
"Після закінчення клонування у вас буде лише одна локальна гілка (щоб не перевантажувати) але ви можете переглянути всі віддалені гілки (якщо буде цікаво). Такий собі розумний компроміс!",
"",
"Це пояснює чому ви бачите наступне повідомлення під час клонування:",
"",
" local branch \"master\" set to track remote branch \"o/master\""
]
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### А можу я сам вибирати?",
"",
"Так, ти можеш! Ти можеш вибрати довільну гілку яка слідкуватиме за `o/master`, і тоді для цієї гілки `push` та `merge` автоматично працюватимуть з `master`. Це означає, що виконання `git push` в гілці з назвою `totallyNotMaster` (зовсім не master) може зберегти локальні коміти у віддалену гілку `master`!",
"",
"Є два шляхи встановити такий зв'язок. Перший - створити нову гілку з явним вказанням зв'язку (за ким слідкувати). Виконання",
"",
"`git checkout -b totallyNotMaster o/master`",
"",
"створить гілку `totallyNotMaster`, яка слідкує за `o/master`."
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Досить розмов, подивимось в дії! Створимо нову гілку `foo` і змусимо її слідкувати за віддаленою гілкою `master`."
],
"afterMarkdowns": [
"Як видно з результату, при оновленні `foo` було використано автоматичний зв'язок з `o/master` під час операції `merge`. Зверніть увагу, master не було оновлено!"
],
"command": "git checkout -b foo o/master; git pull",
"beforeCommand": "git clone; git fakeTeamwork"
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Це також справджується і для git push"
],
"afterMarkdowns": [
"Ка-бум!. Ми запушили наші зміни у віддалений `master` не зважаючи на те, що локальна гілка називалась зовсім по-іншому."
],
"command": "git checkout -b foo o/master; git commit; git push",
"beforeCommand": "git clone"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"### Спосіб №2",
"",
"Інший спосіб вказати за якою віддаленою гілкою слідкувати -- просто використовувати опцію `git branch -u`. Виконання",
"",
"`git branch -u o/master foo`",
"",
"заставить гілку `foo` слідкувати за `o/master`. Якщо `foo` є поточною гілкою, її можна навіть не вказувати:",
"",
"`git branch -u o/master`",
""
]
}
},
{
"type": "GitDemonstrationView",
"options": {
"beforeMarkdowns": [
"Давайте подивимось на цей спосіб швидко вказати віддалену гілку для відслідковування..."
],
"afterMarkdowns": [
"Як і перший спосіб, але своя окрема команда."
],
"command": "git branch -u o/master foo; git commit; git push",
"beforeCommand": "git clone; git checkout -b foo"
}
},
{
"type": "ModalAlert",
"options": {
"markdowns": [
"ОК! На цьому рівні давай збережемо свою роботу у віддалену гілку `master` *без* переходу на локальну `master`. Про решту здогадайся сам, раз ти вже дойшов до цього рівня :P"
]
}
}
]
} }
} }
}; };