mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-06-25 23:48:34 +02:00
Add missing Ukrainian translation
This commit is contained in:
parent
151a60a9a9
commit
006d21b432
12 changed files with 650 additions and 23 deletions
|
@ -104,7 +104,7 @@ var sequenceInfo = exports.sequenceInfo = {
|
|||
'zh_CN': '接下来是 Git 的超赞特性。迫不及待了吧!',
|
||||
'zh_TW': '接下來是 git 非常厲害的地方!相信你已經迫不及待了吧!',
|
||||
'ru_RU': 'Следующая порция абсолютной git-крутотенюшки. Проголодались?',
|
||||
'uk' : 'Наступна порція абсолютної git-дивожнечі. Зголодніли?',
|
||||
'uk' : 'Наступна порція абсолютної git-дивини. Сподіваюсь, ви зголодніли',
|
||||
'ko' : 'git은 아주 멋져요. 왜 멋진지 알려드립니다'
|
||||
}
|
||||
},
|
||||
|
@ -149,7 +149,7 @@ var sequenceInfo = exports.sequenceInfo = {
|
|||
'zh_CN': '关于 origin 和 其它仓库 -- Git Gemotes 高级命令',
|
||||
'zh_TW': '關於 origin 和其它 repo,git remote 的進階指令',
|
||||
'ru_RU': 'Через origin – к звёздам. Продвинутое использование Git Remotes',
|
||||
'uk' : 'Через origin – до зірок. Продвинуте використання Git Remotes',
|
||||
'uk' : 'Через origin – до зірок. Прогресивне використання Git Remotes',
|
||||
'ko' : '"origin"그 너머로 -- 고급 Git 원격 저장소'
|
||||
},
|
||||
about: {
|
||||
|
@ -162,7 +162,7 @@ var sequenceInfo = exports.sequenceInfo = {
|
|||
'zh_TW': '而且你會覺得做一個仁慈的獨裁者會很有趣...',
|
||||
'de_DE': 'Git Remotes für Fortgeschrittene',
|
||||
'ru_RU': 'Весело было быть всесильным мудрым правителем...',
|
||||
'uk' : 'Й ти думав що бути всесильним диктатором буде весело...',
|
||||
'uk' : 'А ти думав, що бути всесильним диктатором весело...',
|
||||
'ko' : '자비로운 독재자가 되는게 재밌을 줄 알았겠지만...'
|
||||
}
|
||||
},
|
||||
|
|
|
@ -12,7 +12,8 @@ exports.level = {
|
|||
"de_DE": "Optionen für Fetch",
|
||||
"ja" : "Fetchの引数",
|
||||
"ru_RU": "Аргументы для fetch",
|
||||
"ko" : "Fetch의 인자들"
|
||||
"ko" : "Fetch의 인자들",
|
||||
"uk" : "Аргументи для fetch"
|
||||
},
|
||||
"hint": {
|
||||
"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",
|
||||
"ja" : "コミットIDの入れ替わりに注意!スライドを復習するには`help level`を実行",
|
||||
"ru_RU": "Обратите внимание на то, как номера коммитов могут меняться! Вы можете прочесть слайды вновь, воспользовавшись командой \"help level\"",
|
||||
"ko" : "커밋 ID가 바뀔수도있으니 주의하세요! \"help level\"을 입력하면 슬라이드들을 다시 읽어볼수 있습니다."
|
||||
"ko" : "커밋 ID가 바뀔수도있으니 주의하세요! \"help level\"을 입력하면 슬라이드들을 다시 읽어볼수 있습니다.",
|
||||
"uk" : "Зверни увагу на те, що номери комітів можуть мінятися! Слайди уроку можна переглянути ще раз командою \"help level\""
|
||||
},
|
||||
"startDialog": {
|
||||
"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 комітів можуть змінюватися!"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1322,7 +1322,7 @@ exports.level = {
|
|||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"## Diverged Work",
|
||||
"## Розбіжності в історії",
|
||||
"",
|
||||
"Ми розглянули як витягувати (`pull`) коміти інших та як завантажувати (`push`) свої власні коміти. Це виявилось не надто складно, то як же так, що в людей дуже часто виникають з цим труднощі?",
|
||||
"",
|
||||
|
|
|
@ -12,7 +12,8 @@ exports.level = {
|
|||
"ja" : "リモートとのmerge",
|
||||
"fr_FR": "Fusionner avec les branches distantes",
|
||||
"ru_RU": "Слияние с удалённым репозиторием",
|
||||
"ko" : "원격 작업과 merge하기"
|
||||
"ko" : "원격 작업과 merge하기",
|
||||
"uk" : "Мердж з віддаленим репозиторієм"
|
||||
},
|
||||
"hint": {
|
||||
"en_US": "Pay attention to the goal tree!",
|
||||
|
@ -24,7 +25,8 @@ exports.level = {
|
|||
"ja" : "ゴールツリーをよく見てください!",
|
||||
"fr_FR": "Respectez l'arbre représentant l'objectif !",
|
||||
"ru_RU": "Внимательно посмотрите на цель уровня!",
|
||||
"ko" : "goal을 잘 살펴보세요!"
|
||||
"ko" : "goal을 잘 살펴보세요!",
|
||||
"uk" : "Уважно подивись як має виглядати результат!"
|
||||
},
|
||||
"compareOnlyMaster": true,
|
||||
"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": [
|
||||
"На цьому рівні давайте спробуємо вирішити попереднє завдання з використанням *мерджу*. Можливо вийде не так охайно, але добре покаже різницю в підходах."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -613,7 +613,7 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"Ми розглянемо `git pull` більш детально пізніше (включаючи різні опції та аргументи), наразі просто спробуємо цю команду.",
|
||||
"",
|
||||
"Не забувай -- щоб пройти цей рівень, достатньо використати `fetch` а потім `merge`, але це буде тобі коштувати одну зайву команду :P"
|
||||
"Не забувай -- щоб пройти цей рівень, достатньо використати `fetch`, а потім `merge`, але це буде тобі коштувати одну зайву команду :P"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,8 @@ exports.level = {
|
|||
"ja" : "Pullの引数",
|
||||
"fr_FR": "Arguments de pull",
|
||||
"ru_RU": "Аргументы для pull",
|
||||
"ko" : "pull 인자들"
|
||||
"ko" : "pull 인자들",
|
||||
"uk" : "Аргументи pull"
|
||||
},
|
||||
"hint": {
|
||||
"en_US": "Remember that you can create new local branches with fetch/pull arguments",
|
||||
|
@ -24,7 +25,8 @@ exports.level = {
|
|||
"ja" : "Fetchとpullの引数を利用してローカルで新規ブランチを作成できるのをお忘れなく",
|
||||
"fr_FR": "Vous pouvez aussi créer une nouvelle branche locale avec les arguments de fetch/pull",
|
||||
"ru_RU": "Напоминаю, что новые ветки можно создавать и с помощью команд fetch/pull",
|
||||
"ko" : "fetch/pull 과 인자들로 새 로컬 브랜치를 생성할수 있다는것을 기억하세요."
|
||||
"ko" : "fetch/pull 과 인자들로 새 로컬 브랜치를 생성할수 있다는것을 기억하세요.",
|
||||
"uk" : "Пам'ятай, що ти можеш створювати нові гілки, використовуючи fetch/pull з аргументами"
|
||||
},
|
||||
"startDialog": {
|
||||
"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"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -25,7 +25,7 @@ exports.level = {
|
|||
"ja" : "Pushができるようになるには、まずリポジトリをcloneする必要があるのをお忘れなく",
|
||||
"fr_FR": "Rappelez-vous que vous devez cloner avant de pouvoir faire un push !",
|
||||
"ru_RU": "Помните, что прежде чем push-ить вам нужно склонировать репозиторий!",
|
||||
"uk" : "Пам’ятай, що перед тим як щось push-нуть потрібно склонувати репозиторій!",
|
||||
"uk" : "Пам’ятай, що перед тим як щось push-нути потрібно склонувати репозиторій!",
|
||||
"ko" : "push를 하기전에 clone을 먼저해야 된다는것을 기억하세요!"
|
||||
},
|
||||
"startDialog": {
|
||||
|
|
|
@ -15,7 +15,8 @@ exports.level = {
|
|||
"ja" : "Git pushの引数",
|
||||
"fr_FR": "Arguments de git push",
|
||||
"ru_RU": "Аргументы git push",
|
||||
"ko" : "git push의 인자들"
|
||||
"ko" : "git push의 인자들",
|
||||
"uk" : "Аргументи git push"
|
||||
},
|
||||
"hint": {
|
||||
"en_US": "You can always look at the last slide of the dialog with \"objective\"",
|
||||
|
@ -27,7 +28,8 @@ exports.level = {
|
|||
"ja" : "ダイアログの最後のスライドを参照するには\"objective\"を実行",
|
||||
"fr_FR": "Vous pouvez toujours regarder le dernier slide des dialogues en tapant \"objective\".",
|
||||
"ru_RU": "Вы всегда можете ознакомиться с последним слайдом, воспользовавшись \"objective\".",
|
||||
"ko" : "대화창의 마지막 슬라이드를 \"objective\"로 다시 볼 수 있습니다."
|
||||
"ko" : "대화창의 마지막 슬라이드를 \"objective\"로 다시 볼 수 있습니다.",
|
||||
"uk" : "Завжди можна подивитися останній слайд діалогу за допомогою \"objective\""
|
||||
},
|
||||
"startDialog": {
|
||||
"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` посилаючись на віддалений репозиторій.*"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -12,7 +12,8 @@ exports.level = {
|
|||
"ja" : "Git pushの引数 -- 拡張編!",
|
||||
"fr_FR": "Arguments de git push -- toujours plus !",
|
||||
"ru_RU": "Аргументы для push -- расширенная версия!",
|
||||
"ko" : "git push 인자 -- 확장판!"
|
||||
"ko" : "git push 인자 -- 확장판!",
|
||||
"uk" : "Розширені аргументи git push!"
|
||||
},
|
||||
"hint": {
|
||||
"en_US": "Remember you can admit defeat and type in \"show solution\" :P",
|
||||
|
@ -24,7 +25,8 @@ exports.level = {
|
|||
"ja" : "降参して解説を見るには\"show solution\"を実行できるのをお忘れなく",
|
||||
"fr_FR": "N'oubliez pas que vous pouvez toujours déclarer forfait avec \"show solution\" :P",
|
||||
"ru_RU": "Помните, Вы всегда можете признать своё поражение, набрав команду \"show solution\" (показать решение) :P",
|
||||
"ko" : "혹시 아세요? 패배를 인정하고 \"show solution\"을 입력할 수 있다는 걸요 :P"
|
||||
"ko" : "혹시 아세요? 패배를 인정하고 \"show solution\"을 입력할 수 있다는 걸요 :P",
|
||||
"uk" : "Пам'ятай, ти завжди можеш визнати поразку і підглянути рішення командою \"show solution\" :P"
|
||||
},
|
||||
"startDialog": {
|
||||
"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>`"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -12,7 +12,8 @@ exports.level = {
|
|||
"ja" : "undoやresetコマンドをいつでも使用することができるのをお忘れなく",
|
||||
"fr_FR": "Rappelez-vous que vous pouvez toujours utiliser les commandes undo et reset.",
|
||||
"ru_RU": "Помни - ты всегда можешь отменить команды с помощью undo или reset",
|
||||
"ko" : "명령어를 undo와 reset으로 되돌릴 수 있다는 것을 잊지마세요"
|
||||
"ko" : "명령어를 undo와 reset으로 되돌릴 수 있다는 것을 잊지마세요",
|
||||
"uk" : "Пам'ятай, ти в будь який момент можеш використовувати команди undo або reset"
|
||||
},
|
||||
"name": {
|
||||
"en_US": "Push Master!",
|
||||
|
@ -24,7 +25,8 @@ exports.level = {
|
|||
"ja" : "Push Master!",
|
||||
"fr_FR": "Maître du push !",
|
||||
"ru_RU": "Push Мастер!",
|
||||
"ko" : "Push Master!"
|
||||
"ko" : "Push Master!",
|
||||
"uk" : "Push Maйстер!"
|
||||
},
|
||||
"compareOnlyMasterHashAgnostic": true,
|
||||
"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 Чимале завдання! Успіху! Виконання цього рівня буде великим кроком."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -12,7 +12,8 @@ exports.level = {
|
|||
"ja" : "無のsource",
|
||||
"fr_FR": "Source de rien du tout",
|
||||
"ru_RU": "Пустой источник",
|
||||
"ko" : "Source가 없다"
|
||||
"ko" : "Source가 없다",
|
||||
"uk" : "Нема джерела"
|
||||
},
|
||||
"hint": {
|
||||
"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を使うしかない!",
|
||||
"fr_FR": "La commande branch est désactivée pour ce niveau, vous devrez donc utiliser fetch !",
|
||||
"ru_RU": "Команда branch недоступна на этом упражнении, пользуйтесь командой fetch!",
|
||||
"ko" : "branch 명령이 비활성화 되어있습니다. fetch를 사용해야 되요!"
|
||||
"ko" : "branch 명령이 비활성화 되어있습니다. fetch를 사용해야 되요!",
|
||||
"uk" : "Команда branch недоступна на цьому уроці, користуйся командою fetch!",
|
||||
},
|
||||
"startDialog": {
|
||||
"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`!"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -12,7 +12,8 @@ exports.level = {
|
|||
"ja" : "リモートのトラッキング",
|
||||
"fr_FR": "Suivi de branche distante",
|
||||
"ru_RU": "Слежка за удалённым репозиторием",
|
||||
"ko" : "원격 저장소 추적하기"
|
||||
"ko" : "원격 저장소 추적하기",
|
||||
"uk" : "Слідкуємо за віддаленим репозиторієм"
|
||||
},
|
||||
"hint": {
|
||||
"en_US": "Remember there are two ways to set remote tracking!",
|
||||
|
@ -24,7 +25,8 @@ exports.level = {
|
|||
"ja" : "リモートトラッキングを設定する方法が二つあるのをお忘れなく!",
|
||||
"fr_FR": "Rappelez-vous qu'il existe deux façons de configurer le suivi de branche distante !",
|
||||
"ru_RU": "Помни, есть два способа установить слежку за удалённым репозиторием!",
|
||||
"ko" : "원격 추적하기를 설정하는데에는 두가지 방법이 있습니다!"
|
||||
"ko" : "원격 추적하기를 설정하는데에는 두가지 방법이 있습니다!",
|
||||
"uk" : "Пам'ятай, є два способи слідкувати за віддаленим репозиорієм!"
|
||||
},
|
||||
"startDialog": {
|
||||
"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"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue