mirror of
https://github.com/pcottle/learnGitBranching.git
synced 2025-08-01 08:35:32 +02:00
commit
c8d9cbeee9
21 changed files with 185 additions and 54 deletions
|
@ -443,7 +443,7 @@ exports.dialog = {
|
|||
markdowns: [
|
||||
'## Partager, c\'est se soucier!',
|
||||
'',
|
||||
'Partagez des arbres avec vous amis via `export tree` et `import tree`',
|
||||
'Partagez des arbres avec vos amis via `export tree` et `import tree`',
|
||||
'',
|
||||
'Vous avez une grande leçon à partager ? Essayez de construire un niveau avec `build level` ou essayez le niveau d\'un ami avec `import level`',
|
||||
'',
|
||||
|
|
|
@ -917,6 +917,12 @@ exports.strings = {
|
|||
'ru_RU': 'Спрятать цель'
|
||||
},
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
'objective-button': {
|
||||
'__desc__': 'button label to show objective',
|
||||
'en_US': 'Objective',
|
||||
'ru_RU': 'Задача'
|
||||
},
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
'goal-to-reach': {
|
||||
'__desc__': 'title of window that shoes the goal tree to reach',
|
||||
'en_US': 'Goal To Reach',
|
||||
|
@ -940,7 +946,7 @@ exports.strings = {
|
|||
'zh_CN': '<span class="fwber">注意:</span>本关卡中,只检查 master 分支,其他分支只是用作 reference 存在(以虚线标签表示)。照常,你可以用 “hide goal” 来隐藏此窗口。',
|
||||
'zh_TW': '在這個關卡中,只有 master branch 會被檢查,別的 branch 只是用來做為 reference (下面用虛線符號表示)。一如往常,你可以利用 "hide goal" 來隱藏這個對話視窗',
|
||||
'ja': '<span class="fwber">Note:</span> masterブランチだけをこのlevelではチェックします。その他のブランチ(以下では、破線で示されています)に関しては、参照のためにあります。また、いつでもこのウィンドウは"hide goal"と打つかクリックで閉じれます',
|
||||
'ru_RU': '<span class="fwber">Важно:</span> В этом уровне провреяется только ветка master. Остальные ветки просто для наглядности. Как обычно, можно скрыть это сообщение при помощи "hide goal"'
|
||||
'ru_RU': '<span class="fwber">Важно:</span> В этом уровне проверяется только ветка master. Остальные ветки просто для наглядности. Как обычно, можно скрыть это сообщение при помощи "hide goal"'
|
||||
},
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
'hide-goal': {
|
||||
|
|
|
@ -70,7 +70,7 @@ var LevelToolbarView = React.createClass({
|
|||
<button
|
||||
onClick={this.props.onObjectiveClick}
|
||||
type="button">
|
||||
Objective
|
||||
{intl.str('objective-button')}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -662,7 +662,7 @@ exports.level = {
|
|||
"(*На нашей визуализации первый родитель находится прямо над коммитом*)"
|
||||
],
|
||||
"afterMarkdowns": [
|
||||
"Просто -- прямо как мы любим."
|
||||
"Просто - прямо как мы любим."
|
||||
],
|
||||
"command": "git checkout master^",
|
||||
"beforeCommand": "git checkout HEAD^; git commit; git checkout master; git merge C2"
|
||||
|
@ -698,7 +698,7 @@ exports.level = {
|
|||
"type": "GitDemonstrationView",
|
||||
"options": {
|
||||
"beforeMarkdowns": [
|
||||
"Более того, эти модификаторы можно применять вместе. Например так:"
|
||||
"Более того, эти модификаторы можно применять вместе. Например, так:"
|
||||
],
|
||||
"afterMarkdowns": [
|
||||
"Сделаем то же самое, что перед этим, только в одну команду."
|
||||
|
|
|
@ -113,7 +113,7 @@ 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 Remotes!'
|
||||
'ru_RU': 'Push & Pull - удалённые репозитории в Git!'
|
||||
},
|
||||
about: {
|
||||
'en_US': 'Time to share your 1\'s and 0\'s kids; coding just got social',
|
||||
|
@ -124,7 +124,7 @@ 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': 'Настало время поделиться своими единичками и нулями. Время коллективного программирования'
|
||||
}
|
||||
},
|
||||
remoteAdvanced: {
|
||||
|
@ -138,7 +138,7 @@ 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'
|
||||
},
|
||||
about: {
|
||||
'en_US': 'And you thought being a benevolent dictator would be fun...',
|
||||
|
|
|
@ -422,7 +422,7 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"## Branches Git",
|
||||
"",
|
||||
"Les branches sous Git sont incroyablement légères. Elles sont simplment des références sur un commit spécifique -- rien de plus. C'est pourquoi beaucoup d'enthousiastes répètent en cœur :",
|
||||
"Les branches sous Git sont incroyablement légères. Elles sont simplement des références sur un commit spécifique -- rien de plus. C'est pourquoi beaucoup d'enthousiastes répètent en cœur :",
|
||||
"",
|
||||
"```",
|
||||
"des branches le plus tôt possible, et des branches souvent",
|
||||
|
@ -430,7 +430,7 @@ exports.level = {
|
|||
"",
|
||||
"Parce qu'il n'y a pas de surcoût (stockage/mémoire) associé aux branches, il est facile de diviser son travail en de nombreuses branches plutôt que d'avoir quelques grosses branches.",
|
||||
"",
|
||||
"Nous verrons comment les banches et les commits interagissent quand nous les utiliserons ensemble. Pour l'instant, souvenez-vous qu'une branche est un moyen d'exprimer \"Je veux inclure le contenu de ce commit et de tous les commits parents.\""
|
||||
"Nous verrons comment les branches et les commits interagissent quand nous les utiliserons ensemble. Pour l'instant, souvenez-vous qu'une branche est un moyen d'exprimer \"Je veux inclure le contenu de ce commit et de tous les commits parents.\""
|
||||
]
|
||||
}
|
||||
},
|
||||
|
|
|
@ -429,9 +429,9 @@ exports.level = {
|
|||
"## Коммиты в GIT",
|
||||
"Коммит в git репозитории хранит снимок всех файлов в директории. Почти как огромная копия, только лучше",
|
||||
"",
|
||||
"Git пытается быть лёгким и быстрым насколько это только возможно, так что он не просто слепо копирует всю директорию какждый раз, а ужимает (когда это возможно) коммит в набор изменений или \"дельту\" между текущей версией и предыдущей.",
|
||||
"Git пытается быть лёгким и быстрым насколько это только возможно, так что он не просто слепо копирует всю директорию каждый раз, а ужимает (когда это возможно) коммит в набор изменений или \"дельту\" между текущей версией и предыдущей.",
|
||||
"",
|
||||
"Также Git хранит всю историю о том, когда какой коммит был сделан. Вот почему большинство коммитов имеют предков -- мы указываем на предков стрелками при визуализации. Поддержка истории коммитов более чем важна для всех, кто работает над проектом!",
|
||||
"Также Git хранит всю историю о том, когда какой коммит был сделан. Вот почему большинство коммитов имеют предков - мы указываем на предков стрелками при визуализации. Поддержка истории коммитов более чем важна для всех, кто работает над проектом!",
|
||||
"",
|
||||
"Можно ещё долго рассказывать о коммитах, но для простоты будем считать их полными снимками проекта. Коммиты очень легки, так что переключение между ними происходит предельно быстро!"
|
||||
]
|
||||
|
|
|
@ -660,7 +660,7 @@ exports.level = {
|
|||
"",
|
||||
"Ок! Теперь мы знаем как создавать ветки и коммитить наши изменения. Теперь надо понять как объединять изменения из двух разных веток. Очень удобно создать ветку, сделать свою часть работы в ней и потом объединить изменения из своей ветки с общими.",
|
||||
"",
|
||||
"Первый способ объединения изменений, который мы рассмотрим - это `git merge` - слияние или просто мердж. Слияния в Git создают особый вид коммита, который имеет сразу двух родителей. Коммит с двумя родителями обычно означает, что мы хотим объединить изменения из одного коммита, с другим коммитом и всеми их родителскими коммитами.",
|
||||
"Первый способ объединения изменений, который мы рассмотрим - это `git merge` - слияние или просто мердж. Слияния в Git создают особый вид коммита, который имеет сразу двух родителей. Коммит с двумя родителями обычно означает, что мы хотим объединить изменения из одного коммита, с другим коммитом и всеми их родительскими коммитами.",
|
||||
"",
|
||||
"Слишком запутанно =) На схеме всё проще и понятнее."
|
||||
]
|
||||
|
|
|
@ -539,7 +539,7 @@ exports.level = {
|
|||
"",
|
||||
"Теги являются прекрасными ориентирами в истории изменений, поэтому в git есть команда, которая показывает как далеко текущее состоянии от ближайшего тега. И эта команда называется `git describe`",
|
||||
"",
|
||||
"Git describe помогает сориентироваться, после отката на много коммитов по истории изменений. Такое может случиться, когда вы сделали git bisect или если вы недавно вернулись из отпуска =)"
|
||||
"Git describe помогает сориентироваться после отката на много коммитов по истории изменений. Такое может случиться, когда вы сделали git bisect или если вы недавно вернулись из отпуска =)"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -547,7 +547,7 @@ exports.level = {
|
|||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"Git describe выглядить примерно так:",
|
||||
"Git describe выглядит примерно так:",
|
||||
"",
|
||||
"`git describe <ref>`",
|
||||
"",
|
||||
|
@ -572,7 +572,6 @@ exports.level = {
|
|||
"",
|
||||
"`v1_2_gC2`",
|
||||
"",
|
||||
"Whereas `git describe side` would output:",
|
||||
"Тогда как `git describe side` выведет:",
|
||||
"",
|
||||
"`v2_1_gC4`"
|
||||
|
|
|
@ -375,7 +375,7 @@ exports.level = {
|
|||
"",
|
||||
"Этот уровень можно закончить несколькими способами, но в этом уровне нужно сосредоточиться на вышеописанном методе.",
|
||||
"",
|
||||
"Обрати внимание на итоговое состояние в этом уровне – так как мы дважды перемещаем коммиты, они каждый получать по апострофу. Ещё один апостроф добавляется, когда мы делаем commit --amend.",
|
||||
"Обрати внимание на итоговое состояние в этом уровне – так как мы дважды перемещаем коммиты, они каждый получат по апострофу. Ещё один апостроф добавляется, когда мы делаем commit --amend.",
|
||||
"",
|
||||
"Важно, чтобы совпадало не только дерево коммитов, но и количество апострофов."
|
||||
]
|
||||
|
|
|
@ -428,11 +428,11 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"## Жонглируем коммитами №2",
|
||||
"",
|
||||
"*Перед прохождением этого уровня обязательно надо пройти предыдущий уровен – 'Жонглиуем коммитами №1'*",
|
||||
"*Перед прохождением этого уровня обязательно надо пройти предыдущий уровен – 'Жонглируем коммитами №1'*",
|
||||
"",
|
||||
"В прошлом уровне мы использовали `rebase -i`, чтобы переставлять коммиты. Как только нужный нам коммит оказывался в конце, мы могли спокойно изменить его при помощи --ammend и переставить обратно.",
|
||||
"",
|
||||
"Единственная проблема тут - это множеств перестановок, которые могут спровоцировать конфликты. Посмотрим, как с этой же задачей справиться cherry-pick"
|
||||
"Единственная проблема тут - это множество перестановок, которые могут спровоцировать конфликты. Посмотрим, как с этой же задачей справится cherry-pick"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -440,7 +440,7 @@ exports.level = {
|
|||
"type": "GitDemonstrationView",
|
||||
"options": {
|
||||
"beforeMarkdowns": [
|
||||
"Важно помнить, что cherry-pick поместить любой коммит сразу после HEAD (только, если этот коммит не является предком HEAD)",
|
||||
"Важно помнить, что cherry-pick поместит любой коммит сразу после HEAD (только, если этот коммит не является предком HEAD)",
|
||||
"",
|
||||
"Вот небольшое демо для напоминания:"
|
||||
],
|
||||
|
@ -455,7 +455,7 @@ exports.level = {
|
|||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"Итек, в этом уровне нужно достичь того же эффекта, но без использования `rebase -i`. Остальное – по усмотрению.",
|
||||
"Итак, в этом уровне нужно достичь того же эффекта, но без использования `rebase -i`. Остальное – по усмотрению.",
|
||||
"",
|
||||
"Важно, чтобы совпадало не только дерево коммитов, но и количество апострофов."
|
||||
]
|
||||
|
|
|
@ -449,7 +449,7 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"## Теги",
|
||||
"",
|
||||
"В прошлый уроках мы усвоили, что ветки просто двигать туда-сюда и они часто ссылаются на разные коммиты, как на изменения данных в ветке. Ветки просто изменить, они часто временны и постоянно меняют своё состояние.",
|
||||
"В прошлых уроках мы усвоили, что ветки просто двигать туда-сюда и они часто ссылаются на разные коммиты, как на изменения данных в ветке. Ветки просто изменить, они часто временны и постоянно меняют своё состояние.",
|
||||
"",
|
||||
"В таком случае, где взять *постоянную* ссылку на момент в истории изменений? Для таких вещей, как релиз, большие слияния нужно нечто более постоянное, чем ветка.",
|
||||
""
|
||||
|
@ -472,10 +472,10 @@ exports.level = {
|
|||
"type": "GitDemonstrationView",
|
||||
"options": {
|
||||
"beforeMarkdowns": [
|
||||
"Создадим тег на `C1`, который бутед нашей версией 1"
|
||||
"Создадим тег на `C1`, который будет нашей версией 1"
|
||||
],
|
||||
"afterMarkdowns": [
|
||||
"Готово! Всё просто. Мы назвали тег `v1` и заставили его ссылкаться на `C1` явным образом. Если конкретный коммит не указан, гит пометит тегом `HEAD`"
|
||||
"Готово! Всё просто. Мы назвали тег `v1` и заставили его ссылаться на `C1` явным образом. Если конкретный коммит не указан, гит пометит тегом `HEAD`"
|
||||
],
|
||||
"command": "git tag v1 C1",
|
||||
"beforeCommand": "git commit"
|
||||
|
@ -485,7 +485,7 @@ exports.level = {
|
|||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"Чтобы пройти этот уровень, просто создай теги как показано на визуализации и потом перейди на тег `v1`. Обрати внимание, что ты перейдёшь в состояние `detached HEAD`, так как нельзя сделать коммит прамо в тег v1.",
|
||||
"Чтобы пройти этот уровень, просто создай теги как показано на визуализации и потом перейди на тег `v1`. Обрати внимание, что ты перейдёшь в состояние `detached HEAD`, так как нельзя сделать коммит прямо в тег `v1`.",
|
||||
"",
|
||||
"В следующем уровне, мы попробуем более интересные способы применения тегов."
|
||||
]
|
||||
|
|
|
@ -15,7 +15,8 @@ exports.level = {
|
|||
"pt_BR": "Introdução ao cherry-pick",
|
||||
"zh_CN": "介绍 Cherry-pick",
|
||||
"zh_TW": "介紹 cherry-pick",
|
||||
"ru_RU": "Введение в Cherry-pick"
|
||||
"ru_RU": "Введение в Cherry-pick",
|
||||
"ko": "Cherry-pick 소개"
|
||||
},
|
||||
"hint": {
|
||||
"fr_FR": "git cherry-pick suivis par les noms de commits",
|
||||
|
@ -26,7 +27,8 @@ exports.level = {
|
|||
"pt_BR": "git cherry-pick seguido dos nomes dos commits",
|
||||
"zh_CN": "git cherry-pick 后面跟着 commit 的名字",
|
||||
"zh_TW": "git cherry-pick 後面要接著 commit 的名稱",
|
||||
"ru_RU": "git cherry-pick основывается на именах коммитов!"
|
||||
"ru_RU": "git cherry-pick основывается на именах коммитов!",
|
||||
"ko": "커밋의 이름들로 git cherry-pick 하세요!"
|
||||
},
|
||||
"startDialog": {
|
||||
"en_US": {
|
||||
|
@ -539,6 +541,63 @@ exports.level = {
|
|||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"ko": {
|
||||
"childViews": [
|
||||
{
|
||||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"## 작업을 여기저기로 옮기기",
|
||||
"",
|
||||
"지금까지 우리는 git의 기초를 배웠습니다. -- 커밋을하고, 브랜치를 만들고, 소스 트리 여기저기를 돌아다녔습니다. 이런 개념들을 아는 것만으로도 git repository의 힘을 90%이상 사용하고 개발자들이 필요로하는 작업의 대부분을 할 수 있습니다.",
|
||||
"",
|
||||
"그 나머지 10% 기능이, 복잡한 작업(또는 작업중 막혔을때)중에 꽤 유용할 수 있습니다. 이제 배워 볼 다음 개념은 \"작업을 여기저로 올기기\" 다시 말해, 개발자들의 언어로 \"이 일은 여기에 저 일은 저기에 두고 싶어\" 정확하고 우아하고 유연하게.",
|
||||
"",
|
||||
"다소 과해 보일 수 있는데, 간단한 개념입니다."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"## Git 체리-픽 (Cherry-pick)",
|
||||
"",
|
||||
"이 시리즈의 첫 명령어는 `git cherry-pick` 입니다. 다음 과 같은 형태로 사용합니다:",
|
||||
"",
|
||||
"* `git cherry-pick <Commit1> <Commit2> <...>`",
|
||||
"",
|
||||
"현재 위치(`HEAD`) 아래에 있는 일련의 커밋들에대한 복사본을 만들겠다는 것을 간단히 줄인 말입니다. 개인적으로 저는 `cherry-pick`을 아주 좋아합니다 왜냐하면 조금의 마법이 첨가되있고 이해하기 쉽기 때문입니다.",
|
||||
"",
|
||||
"데모를 확인해봅시다",
|
||||
""
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "GitDemonstrationView",
|
||||
"options": {
|
||||
"beforeMarkdowns": [
|
||||
"여기 repository가 있습니다. `master`와 master로 복사하고 싶은 작업이 있는 브랜치 `side`가 있습니다. 이것은 rebase를 통해서 할 수 있습니다(이미 배운), 하지만 체리-픽이 이 작업을 어떻게 수행하는지 확인해 봅시다."
|
||||
],
|
||||
"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로 복사해와야합니다. 어떤 커밋들이 필요한지는 goal을 보고 확인하면 됩니다.",
|
||||
""
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -15,7 +15,8 @@ exports.level = {
|
|||
"zh_CN": "你可以使用 branch 或者是相对位置(HEAD~)來指定 rebase 的目标",
|
||||
"zh_TW": "你可以指定 branch 或者是相對位置(HEAD~)來表示 rebase 的目標",
|
||||
"ru_RU": "Можно использовать либо ветки, либо относительные ссылки (HEAD~), чтобы указать цель для Rebase",
|
||||
"ja" : "リベースする対象の指定には、ブランチ名や相対リファレンス(HEAD~)が使えます"
|
||||
"ja" : "リベースする対象の指定には、ブランチ名や相対リファレンス(HEAD~)が使えます",
|
||||
"ko" : "리베이스할 타겟으로 브랜치나 상대 참조(HEAD~)를 사용할 수 있습니다"
|
||||
},
|
||||
"name": {
|
||||
"en_US": "Interactive Rebase Intro",
|
||||
|
@ -26,7 +27,8 @@ exports.level = {
|
|||
"fr_FR": "Introduction à rebase",
|
||||
"zh_CN": "Rebase 交互命令介绍 ",
|
||||
"zh_TW": "介紹互動式的 rebase",
|
||||
"ru_RU": "Введение в интерактивный Rebase"
|
||||
"ru_RU": "Введение в интерактивный Rebase",
|
||||
"ko": "인터랙티브 리베이스 소개"
|
||||
},
|
||||
"startDialog": {
|
||||
"en_US": {
|
||||
|
@ -559,7 +561,7 @@ exports.level = {
|
|||
"",
|
||||
"Git cherry-pick прекрасен, когда точно известно, какие коммиты нужны (и известны их точные хеши)",
|
||||
"",
|
||||
"Но как быть в случае, когда точно не известно какие коммиты нужны? К счастью, Git позаботился о таких ситуациях! Можно использовать интерактивный rebase для этого -- лучший способ, чтобы отобрать набор коммитов для rebase.",
|
||||
"Но как быть в случае, когда точно не известно какие коммиты нужны? К счастью, Git позаботился о таких ситуациях! Можно использовать интерактивный rebase для этого - лучший способ, чтобы отобрать набор коммитов для rebase.",
|
||||
"",
|
||||
"Углубимся в детали."
|
||||
]
|
||||
|
@ -584,8 +586,8 @@ exports.level = {
|
|||
"После открытия окна интерактивного rebase, есть три варианта для каждого коммита:",
|
||||
"",
|
||||
"* Можно сменить положение коммита по порядку, просто переставив строчку с ним в редакторе (у нас в окошке строку с коммитом можно перенести просто мышкой).",
|
||||
"* Можно \"выкинуть\" коммит из ребейза. Для этого есть pick -- переключение его означает, что нужно выкинуть коммит.",
|
||||
"* Наконец, можно соединить коммиты. В этом уровне игры у нас не реализована эта возможность, но, если кратко -- при помощи этой функции можно объединять изменения двух коммитов.",
|
||||
"* Можно \"выкинуть\" коммит из ребейза. Для этого есть pick - переключение его означает, что нужно выкинуть коммит.",
|
||||
"* Наконец, можно соединить коммиты. В этом уровне игры у нас не реализована эта возможность, но, если кратко - при помощи этой функции можно объединять изменения двух коммитов.",
|
||||
"",
|
||||
"Ну что ж, посмотрим на примеры!"
|
||||
]
|
||||
|
@ -613,6 +615,71 @@ exports.level = {
|
|||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"ko": {
|
||||
"childViews": [
|
||||
{
|
||||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"## Git 인터렉티브 리베이스(Interactive Rebase)",
|
||||
"",
|
||||
"Git 체리-픽은 여러분이 원하는 커밋이 무엇인지 알때(각각의 해시값도) 아주 유용합니다 -- 체리-픽이 제공하는 간단함은 아주 매력적입니다.",
|
||||
"",
|
||||
"하지만 원하는 커밋을 모르는 상황에는 어쩌죠? 고맙게도 git은 이런상황에 대한 대안이 있습니다. 우리는 이럴 때 인터렉티브 리베이스를 사용하면됩니다 -- 리베이스할 일련의 커밋들을 검토할 수 있는 가장 좋은 방법입니다.",
|
||||
"",
|
||||
"자세히 알아보죠..."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"인터렉티브 리베이스가 의미하는 뜻은 `rebase` 명령어를 사용할 때 `-i` 옵션을 같이 사용한다는 것입니다.",
|
||||
"",
|
||||
"이 옵션을 추가하면, git은 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 UI를 띄울것 입니다. 각 커밋을 구분할 수 있는 각각의 해시들과 메시지도 보여줍니다.",
|
||||
"",
|
||||
"\"실제\"git 에서는 UI창을 띄우는것 대신에 `vim`과 같은 텍스트 편집기에서 파일을 엽니다. 저희는 배우는것이 목적이기에 같은 역할을 하는 작은 대화창을 만들어서 대신했습니다."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"인터렉티브 리베이스 대화창이 열리면, 3가지를 할 수 있습니다:",
|
||||
"",
|
||||
"* 적용할 커밋들의 순서를 UI를 통해 바꿀수 있습니다(여기서는 마우스 드래그앤 드롭으로 가능합니다)",
|
||||
"* 원하지 않는 커밋들을 뺄 수 있습니다. 이것은 `pick`을 이용해 지정할 수 있습니다(여기서는 `pick`토글 버튼을 끄는것으로 가능합니다)",
|
||||
"* 마지막으로, 커밋을 스쿼시(squash)할 수 있습니다. 불행히도 저희 레벨은 몇개의 논리적 문제들 때문에 지원을 하지 않습니다. 이거에 대해서는 넘어가겠습니다. 요약하자면 커밋을 합칠 수 있습니다",
|
||||
"",
|
||||
"자! 예시를 확인해 봅시다."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "GitDemonstrationView",
|
||||
"options": {
|
||||
"beforeMarkdowns": [
|
||||
"버튼을 누르면 인터렉티브 리베이스 대화창이 뜰것 입니다. 커밋들의 순서를 바꿔보고(커밋을 빼 봐도 됩니다) 결과를 확인해봅시다!"
|
||||
],
|
||||
"afterMarkdowns": [
|
||||
"Boom! Git이 UI를 통해 명시한 그대로 커밋들을 복사했습니다."
|
||||
],
|
||||
"command": "git rebase -i HEAD~4 --aboveAll",
|
||||
"beforeCommand": "git commit; git commit; git commit; git commit"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"이번 레벨을 통과하기 위해서 goal에 나타난 순서대로 만들기 위해 인터렉티브 리베이스를 사용해봅시다. `undo`와 `reset`을 통해 했던 실수들은 되돌릴 수 있습니다 :D"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -649,7 +649,7 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"Как мы уже говорили, указание на коммит при помощи его хеша - не самый удобный способ, поэтому Git поддерживает относительные ссылки и они прекрасны!",
|
||||
"",
|
||||
"С относительными ссылками можно начать с какого-либо удобного места (например с ветки `bugFix` или от HEAD) и двигаться от него",
|
||||
"С относительными ссылками можно начать с какого-либо удобного места (например, с ветки `bugFix` или от HEAD) и двигаться от него",
|
||||
"",
|
||||
"Относительные ссылки - мощный инструмент, но мы покажем два простых способа использования:",
|
||||
"",
|
||||
|
|
|
@ -652,7 +652,7 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"Чтобы пройти этот уровень, отмени два последних коммита и в `local` и в `pushed`",
|
||||
"",
|
||||
"Помни, что `pushed` - это remote ветка, а `local` - это локальная ветка -- это поможет выбрать способ отмены изменений."
|
||||
"Помни, что `pushed` - это remote ветка, а `local` - это локальная ветка - это поможет выбрать способ отмены изменений."
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -223,7 +223,7 @@ exports.level = {
|
|||
"",
|
||||
"У нас тут по несколько коммитов в ветках `one`, `two` и `three`. Не важно почему, но нам надо видоизменить эти три ветки при помощи более поздних коммитов из ветки `master`.",
|
||||
"",
|
||||
"Ветка `one` нуждается в изменении порядка и удалении `C5`. `two` тредует полного перемешивания, а `three` хочет получить только один коммит",
|
||||
"Ветка `one` нуждается в изменении порядка и удалении `C5`. `two` требует полного перемешивания, а `three` хочет получить только один коммит",
|
||||
"",
|
||||
"Как пройти этот уровень – решать тебе, а как найдёшь решение – сравни его с нашим при помощи `show solution`."
|
||||
]
|
||||
|
|
|
@ -487,15 +487,15 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"## Удалённые репозитории в Git",
|
||||
"",
|
||||
"На самом деле Remote удалённые репозитории в Git не так сложны, как кажутся на первый взгляд. Кажется, что в современно мире облачных вычислений под термином удалённых репозиторий подразумевается что-то сложное и загадочное. Однако, удалённые репозитории всего-навсего копии вашего репозитория, хранящиеся на другом компьютере. Обычно вы можете связываться с этим другим компьютеров через Интернет, что позволяет вам передавать коммиты туда и сюда.",
|
||||
"На самом деле удалённые репозитории в Git не так сложны, как кажутся на первый взгляд. Кажется, что в современном мире облачных вычислений под термином удалённый репозиторий подразумевается что-то сложное и загадочное. Однако, удалённые репозитории всего-навсего копии вашего репозитория, хранящиеся на другом компьютере. Обычно вы можете связываться с этим другим компьютером через Интернет, что позволяет вам передавать коммиты туда и сюда.",
|
||||
"",
|
||||
"Как уже было сказано, удалённые репозитории обладают рядом замечательных свойств:",
|
||||
"",
|
||||
"- В первую очередь, удалённые репозитории это замечательное средство резервного копирования! На сколько Вам известно локальные репозитории способны восстанавливать файлы, использую предыдущие состояния, но вся эта информация хранится локально. Потеряв все свои локальные данные, вы способны восстановить их при наличии копии своего репозитория на другом компьютере.",
|
||||
"- В первую очередь, удалённые репозитории - это замечательное средство резервного копирования! На сколько Вам известно локальные репозитории способны восстанавливать файлы, используя предыдущие состояния, но вся эта информация хранится локально. Потеряв все свои локальные данные, вы способны восстановить их при наличии копии своего репозитория на другом компьютере.",
|
||||
"",
|
||||
"- Что ещё более важно, удалённые репозитории позволяют сделать процесс разработки более социальным! Теперь, когда копия вашего проекта размещена в другом месте, Ваши друзья запросто могут внести свой вклад в Ваш проект или забрать последние и актуальные изменения.",
|
||||
"",
|
||||
"Набирает популярность использование web сайтов для визуализации активности удалённых репозиторий (например [Github](https://github.com/) или [Phabricator](http://phabricator.org/)), однако удалённые репозитории _всегда_ выступают в качестве базы для таких инструментов. Поэтому так важно понимать как устроены удалённые репозитории!"
|
||||
"Набирает популярность использование web сайтов для визуализации активности удалённых репозиториев (например, [GitHub](https://github.com/) или [Phabricator](http://phabricator.org/)), однако удалённые репозитории _всегда_ выступают в качестве базы для таких инструментов. Поэтому так важно понимать как устроены удалённые репозитории!"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -505,9 +505,9 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"## Наша команда для создания удалённого репозитория",
|
||||
"",
|
||||
"До настоящего момента мы были сфокусированы на изучении основ работы с _локальным_ репозиторием (ветвление, слияние, перемещение и тд.). Однако, теперь, когда мы хотим научиться работать с удалёнными репозиториями, нам нужны новые команды для настройки рабочей среды для этих упражнений. В качестве такой команды нам послужит `git clone`",
|
||||
"До настоящего момента мы были сфокусированы на изучении основ работы с _локальным_ репозиторием (ветвление, слияние, перемещение и т.д.). Однако, теперь, когда мы хотим научиться работать с удалёнными репозиториями, нам нужны новые команды для настройки рабочей среды для этих упражнений. В качестве такой команды нам послужит `git clone`",
|
||||
"",
|
||||
"Технически, `git clone` в реальной жизни - это команда, которая создаст _локальную_ копию удалённого репозитория (например, с github). На наших занятиях в Learn Git Branching мы используем эту команду немного иначе -- `git clone` создаёт удалённый репозиторий на основе Вашего локального репозитория. Это на самом деле является полной противоположностью реальной команды, однако, такой подход поможет нам наладить связь между склонированным и удалённым репозиторием. Давайте просто запустим эту команду.",
|
||||
"Технически, `git clone` в реальной жизни - это команда, которая создаст _локальную_ копию удалённого репозитория (например, с GitHub). На наших занятиях в Learn Git Branching мы используем эту команду немного иначе - `git clone` создаёт удалённый репозиторий на основе Вашего локального репозитория. Это на самом деле является полной противоположностью реальной команды, однако, такой подход поможет нам наладить связь между склонированным и удалённым репозиторием. Давайте просто запустим эту команду.",
|
||||
""
|
||||
]
|
||||
}
|
||||
|
@ -516,11 +516,11 @@ exports.level = {
|
|||
"type": "GitDemonstrationView",
|
||||
"options": {
|
||||
"beforeMarkdowns": [
|
||||
"Давайте начнём постепенное изучение и взглянем на то, что собой представляет удалённый репозиторий (в нащем представлении).",
|
||||
"Давайте начнём постепенное изучение и взглянем на то, что собой представляет удалённый репозиторий (в нашем представлении).",
|
||||
""
|
||||
],
|
||||
"afterMarkdowns": [
|
||||
"Вот так! Теперь у нас есть удалённый репозиторий нашего проекта. Выглядит всё довольно одинаковым за исключением некоторых визуальных различий -- в последующих уровнях Вы увидите как мы разделяем работу по этим репозиториям."
|
||||
"Вот так! Теперь у нас есть удалённый репозиторий нашего проекта. Выглядит всё довольно одинаковым за исключением некоторых визуальных различий - в последующих уровнях Вы увидите как мы разделяем работу по этим репозиториям."
|
||||
],
|
||||
"command": "git clone",
|
||||
"beforeCommand": ""
|
||||
|
|
|
@ -409,11 +409,11 @@ exports.level = {
|
|||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"## Simulating collaboration",
|
||||
"## Симуляция совместной работы",
|
||||
"",
|
||||
"В данном уроке мы находимся в немного затруднительном положении -- для выполнения ряда упражнений нам нужно обучить Вас как скачивать наработки и изменения, которые были сделаны в удалённом репозитории.",
|
||||
"В данном уроке мы находимся в немного затруднительном положении - для выполнения ряда упражнений нам нужно обучить Вас как скачивать наработки и изменения, которые были сделаны в удалённом репозитории.",
|
||||
"",
|
||||
"Это означает, что нам следует \"сделать вид\", как будто мы знаем о том, что наш удалённый репозиторий, с которым мы работаем, был изменён наработками, сделанными одним из Ваших коллег / друзей / единомышленников. Это может быть какая-то ветка либо же какой-то конкретный коммит.",
|
||||
"Это означает, что нам следует \"сделать вид\", как будто мы знаем о том, что наш удалённый репозиторий, с которым мы работаем, был изменён наработками, сделанными одним из Ваших коллег / друзей / единомышленников. Это может быть какая-то ветка, либо же какой-то конкретный коммит.",
|
||||
"",
|
||||
"Для того, чтобы добится своих целей, нам предоставляется комманда со звучным именем `git fakeTeamwork`! Имя комманды однозначно даёт понят что она выполняет. Давайте ознакомимся с демо..."
|
||||
]
|
||||
|
@ -423,10 +423,10 @@ exports.level = {
|
|||
"type": "GitDemonstrationView",
|
||||
"options": {
|
||||
"beforeMarkdowns": [
|
||||
"Поведение комманды `fakeTeamwork` по-умолчанию заключаентся в том, чтобы просто \"инициировать\" коммит на master-е"
|
||||
"Поведение комманды `fakeTeamwork` по-умолчанию заключается в том, чтобы просто \"инициировать\" коммит на master-е"
|
||||
],
|
||||
"afterMarkdowns": [
|
||||
"Ну вот -- удалённый репозиторый был изменён при помощи добавления нового коммита, и мы не ещё не скачали этот коммит, потому что не запустили комманду `git fetch`."
|
||||
"Ну вот - удалённый репозиторый был изменён при помощи добавления нового коммита, и мы не ещё не скачали этот коммит, потому что не запустили комманду `git fetch`."
|
||||
],
|
||||
"command": "git fakeTeamwork",
|
||||
"beforeCommand": "git clone"
|
||||
|
|
|
@ -615,9 +615,9 @@ exports.level = {
|
|||
"markdowns": [
|
||||
"## Git Fetch",
|
||||
"",
|
||||
"Работа с удалёнными git репозиториями сводится к передаче данных _в_ и _из_ других репозиториев. До тех пор, пока мы может отправлять коммиты туда-обратно, мы можем делиться любыми изменениями, которые отслеживает git (следовательно, делиться новыми файлами, свежими идеями, любовными письмами и тд.).",
|
||||
"Работа с удалёнными git репозиториями сводится к передаче данных _в_ и _из_ других репозиториев. До тех пор, пока мы может отправлять коммиты туда-обратно, мы можем делиться любыми изменениями, которые отслеживает git (следовательно, делиться новыми файлами, свежими идеями, любовными письмами и т.д.).",
|
||||
"",
|
||||
"В этом уроке Вы научитесь тому, как извлекать данные _из_ удалённого репозитория -- и для этого у нас есть соответсвтующая команда `git fetch`.",
|
||||
"В этом уроке Вы научитесь тому, как извлекать данные _из_ удалённого репозитория - и для этого у нас есть соответсвтующая команда `git fetch`.",
|
||||
"",
|
||||
"Вы увидете, что как только мы изменим представление нашего удалённого репозитория, наши _удалённые_ ветки обновятся соответствующим образом и отобразят это представление. Это связывает воедино предыдущий урок про удалённые репозитории"
|
||||
]
|
||||
|
@ -647,11 +647,11 @@ exports.level = {
|
|||
"* связывается с указанным удалённым репозиторием и забирает все те данные проекта, которых у вас ещё нет, при этом...",
|
||||
"* у вас должны появиться ссылки на все ветки из этого удалённого репозиториея (например, `o/master`)",
|
||||
"",
|
||||
"Фактически `git fetch` синхранизирует _локальное_ представление удалённых репозиториев с тем, что является _актуальным_ на текущий момент времени.",
|
||||
"Фактически `git fetch` синхронизирует _локальное_ представление удалённых репозиториев с тем, что является _актуальным_ на текущий момент времени.",
|
||||
"",
|
||||
"На сколько Вы помните, в предыдущем уроке мы сказали о том, что удалённые ветки отображают состояние удалённых репозиториев _на тот момент_ когда вы 'общались' с ними в последний раз. `git fetch` является тем механизмом, который даёт Вам возможность общатся с удалёнными репозиториями! Надеюсь, что связь между удалёнными ветками и коммандой `git fetch` теперь прояснилась.",
|
||||
"Насколько Вы помните, в предыдущем уроке мы сказали о том, что удалённые ветки отображают состояние удалённых репозиториев _на тот момент_ когда вы 'общались' с ними в последний раз. `git fetch` является тем механизмом, который даёт Вам возможность общатся с удалёнными репозиториями! Надеюсь, что связь между удалёнными ветками и коммандой `git fetch` теперь прояснилась.",
|
||||
"",
|
||||
"`git fetch` обычно 'общается' с удалёнными репозиториями по средствам Интернета (через такие протоколы как `http://` или `git://`).",
|
||||
"`git fetch` обычно 'общается' с удалёнными репозиториями посредством Интернета (через такие протоколы, как `http://` или `git://`).",
|
||||
""
|
||||
]
|
||||
}
|
||||
|
@ -674,7 +674,7 @@ exports.level = {
|
|||
"type": "ModalAlert",
|
||||
"options": {
|
||||
"markdowns": [
|
||||
"Чтобы выполнить уровень просто запустите `git fetch` и скачайте все коммиты!"
|
||||
"Чтобы выполнить уровень, просто запустите `git fetch` и скачайте все коммиты!"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -541,7 +541,7 @@ exports.level = {
|
|||
"",
|
||||
"* `<удалённый репозиторий>/<имя ветки>`",
|
||||
"",
|
||||
"Следовательно, если Вы взгляние на имя ветки `o/master`, то здесь `master` - это имя ветки, а `o` - это имя удалённого репозитория.",
|
||||
"Следовательно, если Вы взглянете на имя ветки `o/master`, то здесь `master` - это имя ветки, а `o` - это имя удалённого репозитория.",
|
||||
"",
|
||||
"Большинство разработчиков именуют свои главные удалённые репозитории не как `o`, а как `origin`. Также общепринятым является именование удалённого репозитория как `origin`, когда Вы клонируете репозиторий командой `git clone`.",
|
||||
"",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue