Fixes in russian translation

Mostly grammar, typos, punctuation.
This commit is contained in:
Katya Demidova 2016-01-14 03:00:40 +03:00
parent 676b90a115
commit 5d995d32f9
31 changed files with 199 additions and 199 deletions

View file

@ -11,7 +11,7 @@ exports.level = {
"es_AR": "Múltiples padres", "es_AR": "Múltiples padres",
"pt_BR": "Múltiplos pais", "pt_BR": "Múltiplos pais",
"zh_TW": "多個 parent commit", "zh_TW": "多個 parent commit",
"ru_RU": "Здоровая семья или несколько родителей", "ru_RU": "Здоровая семья, или несколько родителей",
"ko" : "다수의 부모", "ko" : "다수의 부모",
'uk': 'Декілька батьків' 'uk': 'Декілька батьків'
}, },
@ -648,11 +648,11 @@ exports.level = {
"", "",
"Так же как тильда (~), каретка (^) принимает номер после себя.", "Так же как тильда (~), каретка (^) принимает номер после себя.",
"", "",
"Но в отличие от количества коммитов, на которые нужно откатиться назад (как делает `~`), номер после `^` определяет на какого из родителей мерджа надо перейти. Учитывая, что мерджевый коммит имеет двух родителей, просто указать ^ нельзя.", "Но в отличие от количества коммитов, на которые нужно откатиться назад (как делает `~`), номер после `^` определяет, на какого из родителей мерджа надо перейти. Учитывая, что мерджевый коммит имеет двух родителей, просто указать ^ нельзя.",
"", "",
"Git по умолчанию перейдёт на \"первого\" родителя коммита, но указание номера после `^` изменяет это поведение.", "Git по умолчанию перейдёт на \"первого\" родителя коммита, но указание номера после `^` изменяет это поведение.",
"", "",
"Посмотрим как это работает.", "Посмотрим, как это работает.",
"" ""
] ]
} }
@ -661,7 +661,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Вот мерджевый коммит. Если мы перейдём на master^ без номера, то попадём на первого родителя.", "Вот мерджевый коммит. Если мы перейдём на `master^` без номера, то попадём на первого родителя.",
"", "",
"(*На нашей визуализации первый родитель находится прямо над коммитом*)" "(*На нашей визуализации первый родитель находится прямо над коммитом*)"
], ],
@ -717,9 +717,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"### На практике", "### На практике",
"", "",
"Чтобы пройти этот уровень, надо создать ветку в указанном месте.", "Чтобы пройти этот уровень, создай ветку в указанном месте.",
"", "",
"Очевидно, что (в данном случае) будет проще указать коммит напрямую, но для того, чтобы закрепить пройденное, надо использовать модификаторы, о которых мы говорили выше." "Очевидно, что (в данном случае) будет проще указать коммит напрямую, но для того, чтобы закрепить пройденное, используй модификаторы, о которых мы говорили выше."
] ]
} }
} }

View file

@ -740,7 +740,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Ветвление в Git", "## Ветвление в Git",
"", "",
"Ветки в Git как и коммиты невероятно легковесны. Это просто ссылки на определённый коммит -- ничего более. Вот почему многие фанаты Git повторяют мантру", "Ветки в Git, как и коммиты, невероятно легковесны. Это просто ссылки на определённый коммит ничего более. Вот почему многие фанаты Git повторяют мантру",
"", "",
"```", "```",
"делай ветки сразу, делай ветки часто", "делай ветки сразу, делай ветки часто",
@ -748,7 +748,7 @@ exports.level = {
"", "",
"Так как создание множества веток никак не отражается на памяти или жестком диске, удобнее и проще разбивать свою работу на много маленьких веток, чем хранить все изменения в одной огромной ветке.", "Так как создание множества веток никак не отражается на памяти или жестком диске, удобнее и проще разбивать свою работу на много маленьких веток, чем хранить все изменения в одной огромной ветке.",
"", "",
"Чуть позже мы попробуем использовать ветки и коммиты и вы увидите как две эти возможности сочетаются. Можно сказать, что созданная ветка хранит изменения текущих коммитов и всех его родителей." "Чуть позже мы попробуем использовать ветки и коммиты, и вы увидите, как две эти возможности сочетаются. Можно сказать, что созданная ветка хранит изменения текущих коммитов и всех его родителей."
] ]
} }
}, },
@ -774,7 +774,7 @@ exports.level = {
"Теперь попробуем сделать некоторые изменения в этой ветке. Для этого нажми кнопку ниже." "Теперь попробуем сделать некоторые изменения в этой ветке. Для этого нажми кнопку ниже."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"О-оу! Ветка master сдвинулась тогда как ветка newImage - нет! Всё из-за того, что мы не переключились на новую ветку, а остались в старой, о чём говорит звёздочка около ветки master" "О-оу! Ветка master сдвинулась, тогда как ветка newImage - нет! Всё из-за того, что мы не переключились на новую ветку, а остались в старой, о чём говорит звёздочка около ветки master"
], ],
"command": "git commit", "command": "git commit",
"beforeCommand": "git branch newImage" "beforeCommand": "git branch newImage"
@ -790,7 +790,7 @@ exports.level = {
"git checkout [name]", "git checkout [name]",
"```", "```",
"", "",
"Эта команда перенесёт нас на новую ветку, в момент, когда мы ещё не коммитили изменения" "Эта команда перенесёт нас на новую ветку в момент, когда мы ещё не коммитили изменения"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Вот так! Наши изменения записаны уже в новую ветку" "Вот так! Наши изменения записаны уже в новую ветку"

View file

@ -431,7 +431,7 @@ exports.level = {
"## Коммиты в GIT", "## Коммиты в GIT",
"Коммит в git репозитории хранит снимок всех файлов в директории. Почти как огромная копия, только лучше", "Коммит в git репозитории хранит снимок всех файлов в директории. Почти как огромная копия, только лучше",
"", "",
"Git пытается быть лёгким и быстрым насколько это только возможно, так что он не просто слепо копирует всю директорию каждый раз, а ужимает (когда это возможно) коммит в набор изменений или \"дельту\" между текущей версией и предыдущей.", "Git пытается быть лёгким и быстрым насколько это только возможно, так что он не просто слепо копирует всю директорию каждый раз, а ужимает (когда это возможно) коммит в набор изменений или «дельту» между текущей версией и предыдущей.",
"", "",
"Также Git хранит всю историю о том, когда какой коммит был сделан. Вот почему большинство коммитов имеют предков - мы указываем на предков стрелками при визуализации. Поддержка истории коммитов более чем важна для всех, кто работает над проектом!", "Также Git хранит всю историю о том, когда какой коммит был сделан. Вот почему большинство коммитов имеют предков - мы указываем на предков стрелками при визуализации. Поддержка истории коммитов более чем важна для всех, кто работает над проектом!",
"", "",
@ -443,7 +443,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Посмотрим, как это выглядит на практике. Справа расположена визуализация небольшого git репозитория. Сейчас в нём два коммита -- первый, исходный коммит, С0 и один коммит после него С1, содержащий изменения. ", "Посмотрим, как это выглядит на практике. Справа расположена визуализация небольшого git репозитория. Сейчас в нём два коммита: первый, исходный коммит С0 и один коммит С1 после него, содержащий изменения.",
"", "",
"Нажми на кнопку, чтобы совершить коммит" "Нажми на кнопку, чтобы совершить коммит"
], ],

View file

@ -660,9 +660,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Ветки и слияния", "## Ветки и слияния",
"", "",
"Ок! Теперь мы знаем как создавать ветки и коммитить наши изменения. Теперь надо понять как объединять изменения из двух разных веток. Очень удобно создать ветку, сделать свою часть работы в ней и потом объединить изменения из своей ветки с общими.", "Ок! Мы уже знаем, как создавать ветки и коммитить наши изменения. Теперь надо понять, как объединять изменения из двух разных веток. Очень удобно создать ветку, сделать свою часть работы в ней и потом объединить изменения из своей ветки с общими.",
"", "",
"Первый способ объединения изменений, который мы рассмотрим - это `git merge` - слияние или просто мердж. Слияния в Git создают особый вид коммита, который имеет сразу двух родителей. Коммит с двумя родителями обычно означает, что мы хотим объединить изменения из одного коммита, с другим коммитом и всеми их родительскими коммитами.", "Первый способ объединения изменений, который мы рассмотрим - это `git merge` - слияние или просто мердж. Слияния в Git создают особый вид коммита, который имеет сразу двух родителей. Коммит с двумя родителями обычно означает, что мы хотим объединить изменения из одного коммита с другим коммитом и всеми их родительскими коммитами.",
"", "",
"Слишком запутанно =) На схеме всё проще и понятнее." "Слишком запутанно =) На схеме всё проще и понятнее."
] ]
@ -677,11 +677,11 @@ exports.level = {
"Мы сделаем `merge` ветки `bugFix` в ветку `master`" "Мы сделаем `merge` ветки `bugFix` в ветку `master`"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Что мы видим? Во-первых, ветка master теперь указывает на коммит, у которого два родителя. Если проследовать по стрелкам от этого коммита, вы пройдёте через каждый коммит в дереве прямиком к началу. Это означает, что теперь в ветке `master` содержатся все изменения репозитория.", "Что мы видим? Во-первых, ветка `master` теперь указывает на коммит, у которого два родителя. Если проследовать по стрелкам от этого коммита, вы пройдёте через каждый коммит в дереве прямиком к началу. Это означает, что теперь в ветке `master` содержатся все изменения репозитория.",
"", "",
"Во-вторых, обрати внимание как изменились цвета коммитов. Мы ввели цветовую дифференциацию, чтобы помочь помниманию. Каждая ветка своего цвета. Каждый коммит становится того цвета, какого его ветка. Если в нём изменения сразу двух веток - он становится цветом, смешанным из цветов родительских веток.", "Во-вторых, обрати внимание, как изменились цвета коммитов. Мы ввели цветовую дифференциацию, чтобы помочь пониманию. У каждой ветки — свой цвет. Каждый коммит становится того цвета, какого его ветка. Если в нём изменения сразу двух веток - он становится цветом, смешанным из цветов родительских веток.",
"", "",
"И вот мы видим, что цвет ветки `master` подмешан к каждому коммиту, а ветки `bugFix` - нет. Это можно поправить." "И вот мы видим, что цвет ветки `master` подмешан к каждому коммиту, а ветки `bugFix` - нет. Это можно поправить."
], ],
"command": "git merge bugFix", "command": "git merge bugFix",
"beforeCommand": "git checkout -b bugFix; git commit; git checkout master; git commit" "beforeCommand": "git checkout -b bugFix; git commit; git checkout master; git commit"
@ -706,7 +706,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Чтобы пройти этот уровень сделай следующее:", "Чтобы пройти этот уровень, сделай следующее:",
"", "",
"* Создай новую ветку под названием `bugFix`", "* Создай новую ветку под названием `bugFix`",
"* Переключись на новую ветку `bugFix` командой `git checkout bugFix`", "* Переключись на новую ветку `bugFix` командой `git checkout bugFix`",

View file

@ -640,9 +640,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Git Rebase", "## Git Rebase",
"", "",
"Второй способ объединения изменений в ветках - это *rebasing.* При ребэйзе Git по сути копирует набор коммитов и переносит их в другое место.", "Второй способ объединения изменений в ветках - это *rebasing*. При ребейзе Git по сути копирует набор коммитов и переносит их в другое место.",
"", "",
"Несмотря на то, что это звучит достаточно непонятно, преимущество rebase в том, что при его помощи можно делать чистые и красивые линейные последовательности коммитов. История коммитов будет чище, если вы применяете rebase.", "Несмотря на то, что это звучит достаточно непонятно, преимущество `rebase` в том, что при его помощи можно делать чистые и красивые линейные последовательности коммитов. История коммитов будет чище, если вы применяете `rebase`.",
"", "",
"Посмотрим, как это работает..." "Посмотрим, как это работает..."
] ]
@ -652,18 +652,18 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"У нас тут снова две ветки. Обрати внимание, что выбрана ветка bugFix (отмечена звёздочкой)", "У нас здесь снова две ветки. Обрати внимание, что выбрана ветка `bugFix` (отмечена звёздочкой)",
"", "",
"Хочется сдвинуть наши изменения из bugFix прямо на вершину ветки master. Таким образом всё будет выглядеть, как будто эти изменения делались последовательно, хотя на самом деле - параллельно.", "Хочется сдвинуть наши изменения из `bugFix` прямо на вершину ветки `master`. Благодаря этому всё будет выглядеть, как будто эти изменения делались последовательно, хотя на самом деле - параллельно.",
"", "",
"Применим `git rebase`" "Применим `git rebase`"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Супер! Теперь изменения из bugFix находятся в конце ветки master и являют собой линейную последовательность коммитов.", "Супер! Теперь изменения из `bugFix` находятся в конце ветки `master` и являют собой линейную последовательность коммитов.",
"", "",
"Обрати внимание, что коммит С3 до сих пор существует где-то, а С3' - это его \"копия\" в ветке master", "Обрати внимание, что коммит С3 до сих пор существует где-то, а С3' - это его \"копия\" в ветке `master`",
"", "",
"Единственная проблема - ветка master не обновлена до последних изменений. Это легко исправить." "Единственная проблема - ветка `master` не обновлена до последних изменений. Это легко исправить."
], ],
"command": "git rebase master", "command": "git rebase master",
"beforeCommand": "git commit; git checkout -b bugFix C1; git commit" "beforeCommand": "git commit; git checkout -b bugFix C1; git commit"
@ -691,7 +691,7 @@ exports.level = {
"* Переключись на ветку `bugFix`", "* Переключись на ветку `bugFix`",
"* Сделай коммит", "* Сделай коммит",
"* Вернись на `master` и сделай коммит ещё раз", "* Вернись на `master` и сделай коммит ещё раз",
"* Переключись на bugFix и сделай rebase на master", "* Переключись на `bugFix` и сделай rebase на `master`",
"", "",
"Удачи!" "Удачи!"
] ]

View file

@ -541,9 +541,9 @@
"markdowns": [ "markdowns": [
"### Git Describe", "### Git Describe",
"", "",
"Теги являются прекрасными ориентирами в истории изменений, поэтому в git есть команда, которая показывает как далеко текущее состоянии от ближайшего тега. И эта команда называется `git describe`", "Теги являются прекрасными ориентирами в истории изменений, поэтому в git есть команда, которая показывает, как далеко текущее состоянии от ближайшего тега. И эта команда называется `git describe`",
"", "",
"Git describe помогает сориентироваться после отката на много коммитов по истории изменений. Такое может случиться, когда вы сделали git bisect или если вы недавно вернулись из отпуска =)" "Git describe помогает сориентироваться после отката на много коммитов по истории изменений. Такое может случиться, когда вы сделали `git bisect` или если вы недавно вернулись из отпуска =)"
] ]
} }
}, },
@ -555,7 +555,7 @@
"", "",
"`git describe <ref>`", "`git describe <ref>`",
"", "",
"Где `ref` это что-либо, что указывает на конкретный коммит. Если не указать `ref`, то git будет считать, что указано текущее положение (`HEAD`).", "Где `ref` это что-либо, что указывает на конкретный коммит. Если не указать `ref`, то git будет считать, что указано текущее положение (`HEAD`).",
"", "",
"Вывод команды выглядит примерно так:", "Вывод команды выглядит примерно так:",
"", "",
@ -588,9 +588,9 @@
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Это, в общем-то всё, что можно сказать про git describe. Попробуй выполнить команду на нескольких коммитах.", "Это, в общем-то, всё, что можно сказать про `git describe`. Попробуй выполнить команду на нескольких коммитах.",
"", "",
"Как только наиграешься, просто сделай один коммит и уровень будет пройден." "Как только наиграешься, просто сделай один коммит, и уровень будет пройден."
] ]
} }
} }

View file

@ -403,7 +403,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"Вот ситуация, которая часто случается при разработке: мы пытаемся отследить ошибку, но она не очень очевидна. Для того, чтобы достичь успеха на этом поприще, мы используем несколько команд для отладки и вывода", "Вот ситуация, которая часто случается при разработке: мы пытаемся отследить ошибку, но она не очень очевидна. Для того, чтобы достичь успеха на этом поприще, мы используем несколько команд для отладки и вывода",
"", "",
"Каждая отладочная команда или команды вывода находится в своём коммите. В итоге, мы нашли ошибку, исправили её и порадовались!", "Каждая отладочная команда (команды) вывода находится в своём коммите. В итоге мы нашли ошибку, исправили её и порадовались!",
"", "",
"Но проблема в том, что мы хотим добавить в `master` только исправление ошибки из ветки `bugFix`. Если мы воспользуемся простым fast-forward, то в `master` попадут также отладочные команды. Должен быть другой способ..." "Но проблема в том, что мы хотим добавить в `master` только исправление ошибки из ветки `bugFix`. Если мы воспользуемся простым fast-forward, то в `master` попадут также отладочные команды. Должен быть другой способ..."
] ]

View file

@ -358,7 +358,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Жонглируем коммитами", "## Жонглируем коммитами",
"", "",
"Вот ещё одна ситуация, которая часто случается. Есть некоторые изменения (`newImage`) и другие изменения (`caption`), которые связаны, так что находятся друг подверх друга в репозитории.", "Вот ещё одна ситуация, которая часто случается. Есть некоторые изменения (`newImage`) и другие изменения (`caption`), которые связаны так, что находятся друг поверх друга в репозитории.",
"", "",
"Штука в том, что иногда нужно внести небольшие изменения в более ранний коммит. В таком случае надо немного поменять `newImage`, несмотря на то, что коммит уже в прошлом!" "Штука в том, что иногда нужно внести небольшие изменения в более ранний коммит. В таком случае надо немного поменять `newImage`, несмотря на то, что коммит уже в прошлом!"
] ]
@ -373,11 +373,11 @@ exports.level = {
"* Переставить коммит так, чтобы нужный находился наверху при помощи `git rebase -i`", "* Переставить коммит так, чтобы нужный находился наверху при помощи `git rebase -i`",
"* Внести изменения при помощи `commit --amend`", "* Внести изменения при помощи `commit --amend`",
"* Переставить всё обратно при помощи `git rebase -i`", "* Переставить всё обратно при помощи `git rebase -i`",
"* И наконец, переместить master на изменённуй часть дерева, чтобы закончить уровень.", "* И наконец, переместить master на изменённую часть дерева, чтобы закончить уровень.",
"", "",
"Этот уровень можно закончить несколькими способами, но в этом уровне нужно сосредоточиться на вышеописанном методе.", "Это задание можно выполнить несколькими способами (и, гляжу, ты посматриваешь на cherry-picking), но сейчас сосредоточься на вышеописанном методе.",
"", "",
"Обрати внимание на итоговое состояние в этом уровне так как мы дважды перемещаем коммиты, они каждый получат по апострофу. Ещё один апостроф добавляется, когда мы делаем commit --amend.", "Обрати внимание на итоговое состояние в этом уровне так как мы дважды перемещаем коммиты, оба они получат по апострофу. Ещё один апостроф добавляется, когда мы делаем `commit --amend`.",
"", "",
"Важно, чтобы совпадало не только дерево коммитов, но и количество апострофов." "Важно, чтобы совпадало не только дерево коммитов, но и количество апострофов."
] ]

View file

@ -430,11 +430,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Жонглируем коммитами №2", "## Жонглируем коммитами №2",
"", "",
"*Перед прохождением этого уровня обязательно надо пройти предыдущий уровен 'Жонглируем коммитами №1'*", "*Перед прохождением этого уровня обязательно надо пройти предыдущий уровень 'Жонглируем коммитами №1'*",
"", "",
"В прошлом уровне мы использовали `rebase -i`, чтобы переставлять коммиты. Как только нужный нам коммит оказывался в конце, мы могли спокойно изменить его при помощи --ammend и переставить обратно.", "В прошлом уровне мы использовали `rebase -i`, чтобы переставлять коммиты. Как только нужный нам коммит оказывался в конце, мы могли спокойно изменить его при помощи `--amend` и переставить обратно.",
"", "",
"Единственная проблема тут - это множество перестановок, которые могут спровоцировать конфликты. Посмотрим, как с этой же задачей справится cherry-pick" "Единственная проблема тут - это множество перестановок, которые могут спровоцировать конфликты. Посмотрим, как с этой же задачей справится cherry-pick."
] ]
} }
}, },
@ -442,7 +442,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Важно помнить, что cherry-pick поместит любой коммит сразу после HEAD (только, если этот коммит не является предком HEAD)", "Важно помнить, что cherry-pick поместит любой коммит сразу после HEAD (только если этот коммит не является предком HEAD)",
"", "",
"Вот небольшое демо для напоминания:" "Вот небольшое демо для напоминания:"
], ],

View file

@ -453,7 +453,7 @@
"markdowns": [ "markdowns": [
"## Теги", "## Теги",
"", "",
"В прошлых уроках мы усвоили, что ветки просто двигать туда-сюда и они часто ссылаются на разные коммиты, как на изменения данных в ветке. Ветки просто изменить, они часто временны и постоянно меняют своё состояние.", "В прошлых уроках мы усвоили, что ветки просто двигать туда-сюда и они часто ссылаются на разные коммиты как на изменения данных в ветке. Ветки просто изменить, они часто временны и постоянно меняют своё состояние.",
"", "",
"В таком случае, где взять *постоянную* ссылку на момент в истории изменений? Для таких вещей, как релиз, большие слияния нужно нечто более постоянное, чем ветка.", "В таком случае, где взять *постоянную* ссылку на момент в истории изменений? Для таких вещей, как релиз, большие слияния нужно нечто более постоянное, чем ветка.",
"" ""
@ -489,9 +489,9 @@
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Чтобы пройти этот уровень, просто создай теги как показано на визуализации и потом перейди на тег `v1`. Обрати внимание, что ты перейдёшь в состояние `detached HEAD`, так как нельзя сделать коммит прямо в тег `v1`.", "Чтобы пройти этот уровень, просто создай теги так, как показано на визуализации, и потом перейди на тег `v1`. Обрати внимание, что ты перейдёшь в состояние `detached HEAD`, так как нельзя сделать коммит прямо в тег `v1`.",
"", "",
"В следующем уровне, мы попробуем более интересные способы применения тегов." "В следующем уровне мы попробуем более интересные способы применения тегов."
] ]
} }
} }

View file

@ -497,9 +497,9 @@
"", "",
"Итак, мы уже освоили основы Git: коммиты, ветки, перемещение по дереву изменений. Уже этих знаний достаточно, чтобы овладеть 90% мощью Git-репозиториев и покрыть нужды разработчиков.", "Итак, мы уже освоили основы Git: коммиты, ветки, перемещение по дереву изменений. Уже этих знаний достаточно, чтобы овладеть 90% мощью Git-репозиториев и покрыть нужды разработчиков.",
"", "",
"А оставшиеся 10% будут очень полезны при сложных workfow (или если ты попал в сложную ситуацию). Теперь речь пойдёт о перемещении изменений, другими словами, возможности, позволяющие разработчику сказать \"Хочу, чтобы эти изменения были вот тут, а вот эти вон там\" и получить точные, правильные результаты, не теряя при этом гибкости разработки.", "А оставшиеся 10% будут очень полезны при сложных workflow (или если ты попал в сложную ситуацию). Теперь речь пойдёт о перемещении изменений — возможности, позволяющей разработчику сказать \"Хочу, чтобы эти изменения были вот тут, а вот эти вон там\" и получить точные, правильные результаты, не теряя при этом гибкости разработки.",
"", "",
"На первый взгляд запутано, но на самом деле всё просто." "На первый взгляд запутанно, но на самом деле всё просто."
] ]
} }
}, },
@ -509,7 +509,7 @@
"markdowns": [ "markdowns": [
"## Git Cherry-pick", "## Git Cherry-pick",
"", "",
"Первая из таких команд - это git cherry-pick`. Она выглядит вот так:", "Первая из таких команд - это `git cherry-pick`. Она выглядит вот так:",
"", "",
"* `git cherry-pick <Commit1> <Commit2> <...>`", "* `git cherry-pick <Commit1> <Commit2> <...>`",
"", "",
@ -527,7 +527,7 @@
"Вот репозиторий, где есть некие изменения в ветке `side`, которые мы хотим применить и в ветку `master`. Мы можем сделать это при помощи команды rebase, которую мы уже прошли, но давай посмотрим, как cherry-pick справится с этой задачей." "Вот репозиторий, где есть некие изменения в ветке `side`, которые мы хотим применить и в ветку `master`. Мы можем сделать это при помощи команды rebase, которую мы уже прошли, но давай посмотрим, как cherry-pick справится с этой задачей."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Вуаля! Мы хотели перенести коммиты `C2` и `C4`, Git дал нам их там где они нужны. Всё просто!" "Вуаля! Мы хотели перенести коммиты `C2` и `C4`, Git дал нам их там, где они нужны. Всё просто!"
], ],
"command": "git cherry-pick C2 C4", "command": "git cherry-pick C2 C4",
"beforeCommand": "git checkout -b side; git commit; git commit; git commit; git checkout master; git commit;" "beforeCommand": "git checkout -b side; git commit; git commit; git commit; git checkout master; git commit;"
@ -537,7 +537,7 @@
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Чтобы пройти этот уровень, просто скопируй изменения из этих трёх веток в мастер. Чтобы понять, какие коммиты копировать, просто посмотри на визуализацию уровня.", "Чтобы пройти этот уровень, просто скопируй изменения из этих трёх веток в мастер. Чтобы понять, какие коммиты копировать, посмотри на визуализацию уровня.",
"" ""
] ]
} }

View file

@ -11,7 +11,7 @@ exports.level = {
"zh_TW": "分離 HEAD", "zh_TW": "分離 HEAD",
"de_DE": "Den Kopf abtrennen", "de_DE": "Den Kopf abtrennen",
"ja" : "HEADの分離", "ja" : "HEADの分離",
"ru_RU": "Теряем \"голову\" или detached HEAD", "ru_RU": "Теряем голову, или detached HEAD",
"ko" : "HEAD 분리하기", "ko" : "HEAD 분리하기",
"uk": "Втрачаємо голову чи detached HEAD" "uk": "Втрачаємо голову чи detached HEAD"
}, },
@ -653,9 +653,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Прогулка по Git", "## Прогулка по Git",
"", "",
"Прежде, чем перейти к более продвинутым фичам Git, важно понять различные способы перемещения по дереву коммитов вашего проекта.", "Прежде чем перейти к более продвинутым фичам Git, важно понять различные способы перемещения по дереву коммитов вашего проекта.",
"", "",
"Как только вы научитесь свободно передвигаться по дереву коммитов, ваши возможности в Git преумножатся.", "Как только вы научитесь свободно передвигаться по дереву коммитов, ваши возможности в Git приумножатся.",
"", "",
"", "",
"", "",
@ -670,11 +670,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"## HEAD", "## HEAD",
"", "",
"В первую очередь, поговорим о \"HEAD\". HEAD - это символическое имя текущего выбранного коммита -- это, по сути, тот коммит, над которым мы в данным момент работаем.", "В первую очередь, поговорим о \"HEAD\". HEAD - это символическое имя текущего выбранного коммита это, по сути, тот коммит, над которым мы в данным момент работаем.",
"", "",
"HEAD всегда указывает на последний коммит, из вашего локального дерева. Большинство команд Git, изменяющих рабочее дерево, начнут с изменения HEAD.", "HEAD всегда указывает на последний коммит из вашего локального дерева. Большинство команд Git, изменяющих рабочее дерево, начнут с изменения HEAD.",
"", "",
"Обычно HEAD указывает на имя ветки (например bugFix). Когда вы делаете коммит, статус ветки bugFix меняется и это изменение видно через HEAD." "Обычно HEAD указывает на имя ветки (например, `bugFix`). Когда вы делаете коммит, статус ветки `bugFix` меняется и это изменение видно через HEAD."
] ]
} }
}, },
@ -682,10 +682,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Посмотрим как это работает. Посмотрим где находится HEAD до и после коммита." "Посмотрим, как это работает. Обратите внимание на то, где находится HEAD до и после коммита."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Вот! HEAD всё это время скрывался за веткой master." "Вот! HEAD всё это время скрывался за веткой `master`."
], ],
"command": "git checkout C1; git checkout master; git commit; git checkout C2", "command": "git checkout C1; git checkout master; git commit; git checkout C2",
"beforeCommand": "" "beforeCommand": ""
@ -715,9 +715,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Чтобы пройти уровень, давай отделим HEAD от ветки bugFix и присвоим его последнему коммиту в этой же ветке.", "Чтобы пройти уровень, давай отделим HEAD от ветки `bugFix` и присвоим его последнему коммиту в этой же ветке.",
"", "",
"Укажи коммит при помощи его идентификатора (hash). Hash для каждого коммита указан а кружке на схеме." "Укажи коммит при помощи его идентификатора (hash). Hash для каждого коммита указан в кружке на схеме."
] ]
} }
} }

View file

@ -563,7 +563,7 @@
"", "",
"Git cherry-pick прекрасен, когда точно известно, какие коммиты нужны (и известны их точные хеши)", "Git cherry-pick прекрасен, когда точно известно, какие коммиты нужны (и известны их точные хеши)",
"", "",
"Но как быть в случае, когда точно не известно какие коммиты нужны? К счастью, Git позаботился о таких ситуациях! Можно использовать интерактивный rebase для этого - лучший способ, чтобы отобрать набор коммитов для rebase.", "Но как быть в случае, когда точно не известно какие коммиты нужны? К счастью, Git позаботился о таких ситуациях! Можно использовать интерактивный rebase для этого - лучший способ отобрать набор коммитов для rebase.",
"", "",
"Углубимся в детали." "Углубимся в детали."
] ]
@ -573,7 +573,7 @@
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Всё, что нужно для интерактивного rebase - это опция -i", "Всё, что нужно для интерактивного rebase - это опция `-i`",
"", "",
"Если добавить эту опцию, Git откроет интерфейс просмотра того, какие коммиты готовы к копированию на цель rebase (target). Также показываются хеши коммитов и комментарии к ним, так что можно легко понять что к чему.", "Если добавить эту опцию, Git откроет интерфейс просмотра того, какие коммиты готовы к копированию на цель rebase (target). Также показываются хеши коммитов и комментарии к ним, так что можно легко понять что к чему.",
"", "",
@ -585,11 +585,11 @@
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"После открытия окна интерактивного rebase, есть три варианта для каждого коммита:", "После открытия окна интерактивного rebase есть три варианта для каждого коммита:",
"", "",
"* Можно сменить положение коммита по порядку, просто переставив строчку с ним в редакторе (у нас в окошке строку с коммитом можно перенести просто мышкой).", "* Можно сменить положение коммита по порядку, переставив строчку с ним в редакторе (у нас в окошке строку с коммитом можно перенести просто мышкой).",
"* Можно \"выкинуть\" коммит из ребейза. Для этого есть pick - переключение его означает, что нужно выкинуть коммит.", "* Можно \"выкинуть\" коммит из ребейза. Для этого есть `pick` - переключение его означает, что нужно выкинуть коммит.",
"* Наконец, можно соединить коммиты. В этом уровне игры у нас не реализована эта возможность, но, если кратко - при помощи этой функции можно объединять изменения двух коммитов.", "* Наконец, можно соединить коммиты. В этом уровне игры у нас не реализована эта возможность, но, вкратце, при помощи этой функции можно объединять изменения двух коммитов.",
"", "",
"Ну что ж, посмотрим на примеры!" "Ну что ж, посмотрим на примеры!"
] ]
@ -599,10 +599,10 @@
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"После нажатия на эту кнопку, появится окно интерактивного rebase. Переставь несколько коммитов (или удали кое-какие) и посмотри, что получится в итоге!" "После нажатия на эту кнопку появится окно интерактивного rebase. Переставь несколько коммитов (или удали кое-какие) и посмотри, что получится в итоге!"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Бах! Git скопировал коммиты в точности как было указано через интрефейс!" "Бах! Git скопировал коммиты в точности так, как было указано через интерфейс!"
], ],
"command": "git rebase -i HEAD~4 --aboveAll", "command": "git rebase -i HEAD~4 --aboveAll",
"beforeCommand": "git commit; git commit; git commit; git commit" "beforeCommand": "git commit; git commit; git commit; git commit"
@ -612,7 +612,7 @@
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Чтобы пройти этот уровень, переставь коммиты в таком порядке, как указано на визуализации при помощи интерактивного rebase. На всякий случай, помни, что всегда можно исправить ошибку, вызвав команду undo или reset." "Чтобы пройти этот уровень, переставь коммиты при помощи интерактивного rebase в таком порядке, как указано на визуализации. На всякий случай, помни, что всегда можно исправить ошибку, вызвав команду undo или reset."
] ]
} }
} }

View file

@ -639,9 +639,9 @@ exports.level = {
"", "",
"Передвигаться по дереву Git при помощи указания хешей коммитов немного неудобно. В реальной ситуации у вас вряд ли будет красивая визуализация дерева в терминале, так что придётся каждый раз использовать `git log`, чтобы найти хеш нужного коммита", "Передвигаться по дереву Git при помощи указания хешей коммитов немного неудобно. В реальной ситуации у вас вряд ли будет красивая визуализация дерева в терминале, так что придётся каждый раз использовать `git log`, чтобы найти хеш нужного коммита",
"", "",
"Более того, хеши в реальном репозитории Git сильно более длинные. Например, хеш для коммита, который приведён в предыдущем уровне - `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Не очень просто для произношения =)", "Более того, хеши в реальном репозитории Git намного более длинные. Например, хеш для коммита, который приведён в предыдущем уровне - `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Не очень просто для произношения =)",
"", "",
"Хорошая новость в том, что Git достаточно умён в работе с хешеми. Ему нужно лишь первые несколько символов для того, чтобы идентифицировать конкретный коммит. Так что можно написать просто `fed2` вместо колбасы выше." "Хорошая новость в том, что Git достаточно умён в работе с хешами. Ему нужны лишь первые несколько символов для того, чтобы идентифицировать конкретный коммит. Так что можно написать просто `fed2` вместо колбасы выше."
] ]
} }
}, },
@ -670,7 +670,7 @@ exports.level = {
"", "",
"`master^^` означает предок предка ветки `master`", "`master^^` означает предок предка ветки `master`",
"", "",
"Получим предка ветки master на практике" "Получим предка ветки `master` на практике"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Опачки! Готово. Сильно проще, чем поиск и указание хеша." "Опачки! Готово. Сильно проще, чем поиск и указание хеша."

View file

@ -586,11 +586,11 @@ exports.level = {
"", "",
"Теперь мы разбираемся в относительных ссылках, так что можно реально использовать их для дела.", "Теперь мы разбираемся в относительных ссылках, так что можно реально использовать их для дела.",
"", "",
"Одна из наиболее распространённых целей, для которых используются относительные ссылки - это перемещение веток. Можно напрямую прикрепить ветку к коммиту при помощи опции `-f`. Например команда:", "Одна из наиболее распространённых целей, для которых используются относительные ссылки - это перемещение веток. Можно напрямую прикрепить ветку к коммиту при помощи опции `-f`. Например, команда:",
"", "",
"`git branch -f master HEAD~3`", "`git branch -f master HEAD~3`",
"", "",
"Переместит (принудительно) ветку master на три родителя назад от HEAD." "Переместит (принудительно) ветку `master` на три родителя назад от `HEAD`."
] ]
} }
}, },
@ -598,10 +598,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Посмотрим как работает эта команда" "Посмотрим, как работает эта команда"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Вуаля! Относительная ссылка дала нам возможность просто сослаться на `C1`, а branch forcing (`-f`) дал нам возможность быстро переместить указатель ветки на этот коммит." "Вуаля! Относительная ссылка дала нам возможность просто сослаться на `C1`, а branch forcing (`-f`) позволил быстро переместить указатель ветки на этот коммит."
], ],
"command": "git branch -f master HEAD~3", "command": "git branch -f master HEAD~3",
"beforeCommand": "git commit; git commit; git commit; git checkout -b bugFix" "beforeCommand": "git commit; git commit; git commit; git checkout -b bugFix"
@ -613,7 +613,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"Мы рассмотрели относительные ссылки и branch forcing вкупе, так что теперь пришло время пройти следующий уровень.", "Мы рассмотрели относительные ссылки и branch forcing вкупе, так что теперь пришло время пройти следующий уровень.",
"", "",
"Чтобы пройти этот уровень, передвинь `HEAD`, `master` и `bugFix` так как показано на визуализации." "Чтобы пройти этот уровень, передвинь `HEAD`, `master` и `bugFix` так, как показано на визуализации."
] ]
} }
} }

View file

@ -605,7 +605,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Отмена изменений в Git", "## Отмена изменений в Git",
"", "",
"Есть много путей для отмены изменений в Git. Так же как и коммит, отмена изменений в Git возможна и на низком уровне (добавление в коммит отдельных файлов и наборов строк) и на высоком (как изменения реально отменяются). Сейчас сфокусируемся на высокоуровневой части.", "Есть много путей для отмены изменений в Git. Так же как и коммит, отмена изменений в Git возможна и на низком уровне (добавление в коммит отдельных файлов и наборов строк), и на высоком (как изменения реально отменяются). Сейчас сфокусируемся на высокоуровневой части.",
"", "",
"Есть два основных способа отмены изменений в Git: первый - это `git reset`, а второй - `git revert`. Попробуем оба на следующем шаге.", "Есть два основных способа отмены изменений в Git: первый - это `git reset`, а второй - `git revert`. Попробуем оба на следующем шаге.",
"" ""
@ -618,12 +618,12 @@ exports.level = {
"beforeMarkdowns": [ "beforeMarkdowns": [
"## Git Reset", "## Git Reset",
"", "",
"`git reset` отменяет изменения, перенося ссылку на ветку назад, на более старый коммит. Это своего рода \"переписывание истории\"; `git reset` перенесёт ветку назад как будто некоторых коммитов вовсе и не было.", "`git reset` отменяет изменения, перенося ссылку на ветку назад, на более старый коммит. Это своего рода \"переписывание истории\"; `git reset` перенесёт ветку назад, как будто некоторых коммитов вовсе и не было.",
"", "",
"Посмотрим, как это работает:" "Посмотрим, как это работает:"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Неплохо! Git просто перенёс ссылку на master обратно на коммит `C1`. Теперь наш локальный репозиторий в состоянии, как будто `C2` никогда не было." "Неплохо! Git просто перенёс ссылку на `master` обратно на коммит `C1`. Теперь наш локальный репозиторий в состоянии, как будто `C2` никогда не существовал."
], ],
"command": "git reset HEAD~1", "command": "git reset HEAD~1",
"beforeCommand": "git commit" "beforeCommand": "git commit"
@ -640,9 +640,9 @@ exports.level = {
"Чтобы отменить изменения и поделиться отменёнными изменениями с остальными, надо использовать `git revert`. Посмотрим, как это работает" "Чтобы отменить изменения и поделиться отменёнными изменениями с остальными, надо использовать `git revert`. Посмотрим, как это работает"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Забавно, появился новый коммит. Это потому что новый коммит `C2'` просто содержит изменения полностью противоположные тем, что сделаны в коммите `C2`.", "Забавно, появился новый коммит. Дело в том, что новый коммит `C2'` просто содержит изменения, полностью противоположные тем, что сделаны в коммите `C2`.",
"", "",
"После revert можно сделать push и поделиться изменениями с остальными." "После `revert` можно сделать `push` и поделиться изменениями с остальными."
], ],
"command": "git revert HEAD", "command": "git revert HEAD",
"beforeCommand": "git commit" "beforeCommand": "git commit"
@ -652,9 +652,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Чтобы пройти этот уровень, отмени два последних коммита и в `local` и в `pushed`", "Чтобы пройти этот уровень, отмени два последних коммита и в `local`, и в `pushed`",
"", "",
"Помни, что `pushed` - это remote ветка, а `local` - это локальная ветка - это поможет выбрать способ отмены изменений." "Помни, что `pushed` - это remote ветка, а `local` - это локальная ветка. Это поможет выбрать способ отмены изменений."
] ]
} }
} }

View file

@ -206,7 +206,7 @@ exports.level = {
"", "",
"У нас тут куча веток! Было бы круто перенести все изменения из них в мастер.", "У нас тут куча веток! Было бы круто перенести все изменения из них в мастер.",
"", "",
"Но начальство усложняет нашу задачу тем, что желает видеть все коммиты по порядку. Так что коммит С7' должен идти после коммита С6' и так далее.", "Но начальство усложняет нашу задачу тем, что желает видеть все коммиты по порядку. Так что коммит `С7'` должен идти после коммита `С6'` и так далее.",
"", "",
"Если что-то пойдёт не так не надо стесняться использовать `reset`, чтобы начать всё с чистого листа. Постарайся сделать как можно меньше манипуляций!" "Если что-то пойдёт не так не надо стесняться использовать `reset`, чтобы начать всё с чистого листа. Постарайся сделать как можно меньше манипуляций!"
] ]

View file

@ -491,15 +491,15 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Удалённые репозитории в Git", "## Удалённые репозитории в Git",
"", "",
"На самом деле удалённые репозитории в Git не так сложны, как кажутся на первый взгляд. Кажется, что в современном мире облачных вычислений под термином удалённый репозиторий подразумевается что-то сложное и загадочное. Однако, удалённые репозитории всего-навсего копии вашего репозитория, хранящиеся на другом компьютере. Обычно вы можете связываться с этим другим компьютером через Интернет, что позволяет вам передавать коммиты туда и сюда.", "На самом деле удалённые репозитории в Git не так сложны, как кажутся на первый взгляд. Кажется, что в современном мире облачных вычислений под термином «удалённый репозиторий» подразумевается что-то сложное и загадочное. Однако, удалённые репозитории — это всего-навсего копии вашего репозитория, хранящиеся на другом компьютере. Обычно вы можете связываться с этим другим компьютером через Интернет, что позволяет вам передавать коммиты туда и сюда.",
"", "",
"Как уже было сказано, удалённые репозитории обладают рядом замечательных свойств:", "Как уже было сказано, удалённые репозитории обладают рядом замечательных свойств:",
"", "",
"- В первую очередь, удалённые репозитории - это замечательное средство резервного копирования! На сколько Вам известно локальные репозитории способны восстанавливать файлы, используя предыдущие состояния, но вся эта информация хранится локально. Потеряв все свои локальные данные, вы способны восстановить их при наличии копии своего репозитория на другом компьютере.", "- В первую очередь, удалённые репозитории - это замечательное средство резервного копирования! Насколько вам известно, локальные репозитории способны восстанавливать файлы, используя предыдущие состояния, но вся эта информация хранится локально. Потеряв все свои локальные данные, вы способны восстановить их при наличии копии своего репозитория на другом компьютере.",
"", "",
"- Что ещё более важно, удалённые репозитории позволяют сделать процесс разработки более социальным! Теперь, когда копия вашего проекта размещена в другом месте, Ваши друзья запросто могут внести свой вклад в Ваш проект или забрать последние и актуальные изменения.", "- Что ещё более важно, удалённые репозитории позволяют сделать процесс разработки более социальным! Теперь, когда копия вашего проекта размещена в другом месте, ваши друзья запросто могут внести свой вклад в ваш проект или забрать последние и актуальные изменения.",
"", "",
"Набирает популярность использование web сайтов для визуализации активности удалённых репозиториев (например, [GitHub](https://github.com/) или [Phabricator](http://phabricator.org/)), однако удалённые репозитории _всегда_ выступают в качестве базы для таких инструментов. Поэтому так важно понимать как устроены удалённые репозитории!" "Набирает популярность использование web-сайтов для визуализации активности удалённых репозиториев (например, [GitHub](https://github.com/) или [Phabricator](http://phabricator.org/)), однако удалённые репозитории _всегда_ выступают в качестве базы для таких инструментов. Поэтому так важно понимать, как устроены удалённые репозитории!"
] ]
} }
}, },
@ -509,9 +509,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Наша команда для создания удалённого репозитория", "## Наша команда для создания удалённого репозитория",
"", "",
"До настоящего момента мы были сфокусированы на изучении основ работы сокальным_ репозиторием (ветвление, слияние, перемещение и т.д.). Однако, теперь, когда мы хотим научиться работать с удалёнными репозиториями, нам нужны новые команды для настройки рабочей среды для этих упражнений. В качестве такой команды нам послужит `git clone`", "До настоящего момента мы были сфокусированы на изучении основ работы сокальным_ репозиторием (ветвление, слияние, перемещение и т.д.). Однако теперь, когда мы хотим научиться работать с удалёнными репозиториями, нам нужны новые команды для настройки рабочей среды для этих упражнений. Такой командой нам послужит `git clone`",
"", "",
"Технически, `git clone` в реальной жизни - это команда, которая создаст _локальную_ копию удалённого репозитория (например, с GitHub). На наших занятиях в Learn Git Branching мы используем эту команду немного иначе - `git clone` создаёт удалённый репозиторий на основе Вашего локального репозитория. Это на самом деле является полной противоположностью реальной команды, однако, такой подход поможет нам наладить связь между склонированным и удалённым репозиторием. Давайте просто запустим эту команду.", "Технически, `git clone` в реальной жизни - это команда, которая создаст _локальную_ копию удалённого репозитория (например, с GitHub). На наших занятиях в Learn Git Branching мы используем эту команду немного иначе - `git clone` создаёт удалённый репозиторий на основе вашего локального репозитория. На самом деле, это является полной противоположностью реальной команды, однако такой подход поможет нам наладить связь между склонированным и удалённым репозиторием. Давайте просто запустим эту команду.",
"" ""
] ]
} }
@ -524,7 +524,7 @@ exports.level = {
"" ""
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Вот так! Теперь у нас есть удалённый репозиторий нашего проекта. Выглядит всё довольно одинаковым за исключением некоторых визуальных различий - в последующих уровнях Вы увидите как мы разделяем работу по этим репозиториям." "Вот так! Теперь у нас есть удалённый репозиторий нашего проекта. Выглядит всё довольно одинаковым за исключением некоторых визуальных различий - в последующих уровнях вы увидите, как мы разделяем работу по этим репозиториям."
], ],
"command": "git clone", "command": "git clone",
"beforeCommand": "" "beforeCommand": ""
@ -534,7 +534,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Чтобы завершить уровень просто выполните `git clone` на своём существующем репозитории. Настоящее обучение появится в последующих уроках." "Чтобы завершить уровень, просто выполните `git clone` на своём существующем репозитории. Настоящее обучение появится в последующих уроках."
] ]
} }
} }

View file

@ -415,11 +415,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Симуляция совместной работы", "## Симуляция совместной работы",
"", "",
"В данном уроке мы находимся в немного затруднительном положении - для выполнения ряда упражнений нам нужно обучить Вас как скачивать наработки и изменения, которые были сделаны в удалённом репозитории.", "В данном уроке мы находимся в немного затруднительном положении - для выполнения ряда упражнений нам нужно обучить вас скачивать наработки и изменения, которые были сделаны в удалённом репозитории.",
"", "",
"Это означает, что нам следует \"сделать вид\", как будто мы знаем о том, что наш удалённый репозиторий, с которым мы работаем, был изменён наработками, сделанными одним из Ваших коллег / друзей / единомышленников. Это может быть какая-то ветка, либо же какой-то конкретный коммит.", "Это означает, что нам следует \"сделать вид\", как будто мы знаем о том, что наш удалённый репозиторий, с которым мы работаем, был изменён одним из ваших коллег / друзей / единомышленников. Это может быть какая-то ветка, либо же какой-то конкретный коммит.",
"", "",
"Для того, чтобы добиться своих целей, нам предоставляется команда со звучным именем `git fakeTeamwork`! Имя команды однозначно даёт понять что она выполняет. Давайте ознакомимся с демо..." "Для того, чтобы добиться своих целей, нам предоставляется команда со звучным именем `git fakeTeamwork`! Имя команды однозначно даёт понять, что она выполняет. Давайте ознакомимся с демо..."
] ]
} }
}, },
@ -430,7 +430,7 @@ exports.level = {
"Поведение команды `fakeTeamwork` по умолчанию заключается в том, чтобы просто \"инициировать\" коммит на master-е" "Поведение команды `fakeTeamwork` по умолчанию заключается в том, чтобы просто \"инициировать\" коммит на master-е"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Ну вот - удалённый репозиторый был изменён при помощи добавления нового коммита, и мы ещё не скачали этот коммит, потому что не запустили команду `git fetch`." "Ну вот - удалённый репозиторий был изменён при помощи добавления нового коммита, и мы ещё не скачали этот коммит, потому что не запустили команду `git fetch`."
], ],
"command": "git fakeTeamwork", "command": "git fakeTeamwork",
"beforeCommand": "git clone" "beforeCommand": "git clone"
@ -440,7 +440,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"В данной команде Вам доступна возможность указать ветку и количество добавляемых коммитов" "В данной команде вам доступна возможность указать ветку и количество добавляемых коммитов"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"С помощью одной лишь команды мы симулируем добавление трёх коммитов в ветку `foo` на удалённом репозитории" "С помощью одной лишь команды мы симулируем добавление трёх коммитов в ветку `foo` на удалённом репозитории"
@ -453,9 +453,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Последующие уровни будут довольно сложными, поэтому в этом упражнении от Вас больше ничего не требуется.", "Последующие уровни будут довольно сложными, поэтому в этом упражнении от вас больше ничего не требуется.",
"", "",
"Вперёд! Склонируйте удалённый репозиторий (с помощью `git clone`), симулируйте какие-нибудь изменения на этом удалённом репозитории, сделайте какие-нибудь свои коммиты и затем скачайте \"чужие\" изменения. Это выглядит как несколько уроков в одном!" "Вперёд! Склонируйте удалённый репозиторий (с помощью `git clone`), симулируйте любые изменения на этом удалённом репозитории, сделайте какие-нибудь свои коммиты и затем скачайте \"чужие\" изменения. Это выглядит как несколько уроков в одном!"
] ]
} }
} }

View file

@ -621,7 +621,7 @@ exports.level = {
"", "",
"Работа с удалёнными git репозиториями сводится к передаче данных _в_ и _из_ других репозиториев. До тех пор, пока мы можем отправлять коммиты туда-обратно, мы можем делиться любыми изменениями, которые отслеживает git (следовательно, делиться новыми файлами, свежими идеями, любовными письмами и т.д.).", "Работа с удалёнными git репозиториями сводится к передаче данных _в_ и _из_ других репозиториев. До тех пор, пока мы можем отправлять коммиты туда-обратно, мы можем делиться любыми изменениями, которые отслеживает git (следовательно, делиться новыми файлами, свежими идеями, любовными письмами и т.д.).",
"", "",
"В этом уроке Вы научитесь тому, как извлекать данные _из_ удалённого репозитория - и для этого у нас есть соответствующая команда `git fetch`.", "В этом уроке вы научитесь тому, как извлекать данные _из_ удалённого репозитория - и для этого у нас есть соответствующая команда `git fetch`.",
"", "",
"Вы увидите, что как только мы изменим представление нашего удалённого репозитория, наши _удалённые_ ветки обновятся соответствующим образом и отобразят это представление. Это связывает воедино предыдущий урок про удалённые репозитории." "Вы увидите, что как только мы изменим представление нашего удалённого репозитория, наши _удалённые_ ветки обновятся соответствующим образом и отобразят это представление. Это связывает воедино предыдущий урок про удалённые репозитории."
] ]
@ -634,7 +634,7 @@ exports.level = {
"Прежде чем углубляться в детали команды `git fetch`, давайте взглянем на её визуализацию в действии! Здесь у нас имеется удалённый репозиторий, который содержит в себе два коммита, отсутствующих в нашем локальном репозитории." "Прежде чем углубляться в детали команды `git fetch`, давайте взглянем на её визуализацию в действии! Здесь у нас имеется удалённый репозиторий, который содержит в себе два коммита, отсутствующих в нашем локальном репозитории."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Вот и всё! Коммиты `C2` и `C3` были успешно скачены в наш локальный репозиторий, и наша удалённая ветка `o/master` отобразила эти изменения соответствующим образом." "Вот и всё! Коммиты `C2` и `C3` были успешно скачаны в наш локальный репозиторий, и наша удалённая ветка `o/master` отобразила эти изменения соответствующим образом."
], ],
"command": "git fetch", "command": "git fetch",
"beforeCommand": "git clone; git fakeTeamwork 2" "beforeCommand": "git clone; git fakeTeamwork 2"
@ -651,9 +651,9 @@ exports.level = {
"* связывается с указанным удалённым репозиторием и забирает все те данные проекта, которых у вас ещё нет, при этом...", "* связывается с указанным удалённым репозиторием и забирает все те данные проекта, которых у вас ещё нет, при этом...",
"* у вас должны появиться ссылки на все ветки из этого удалённого репозитория (например, `o/master`)", "* у вас должны появиться ссылки на все ветки из этого удалённого репозитория (например, `o/master`)",
"", "",
"Фактически `git fetch` синхронизирует _локальное_ представление удалённых репозиториев с тем, что является _актуальным_ на текущий момент времени.", "Фактически, `git fetch` синхронизирует _локальное_ представление удалённых репозиториев с тем, что является _актуальным_ на текущий момент времени.",
"", "",
"Насколько Вы помните, в предыдущем уроке мы сказали о том, что удалённые ветки отображают состояние удалённых репозиториев _на тот момент_ когда вы 'общались' с ними в последний раз. `git fetch` является тем механизмом, который даёт Вам возможность общаться с удалёнными репозиториями! Надеюсь, что связь между удалёнными ветками и командой `git fetch` теперь прояснилась.", "Насколько вы помните, в предыдущем уроке мы сказали, что удалённые ветки отображают состояние удалённых репозиториев _на тот момент_ когда вы 'общались' с ними в последний раз. `git fetch` является тем механизмом, который даёт вам возможность общаться с удалёнными репозиториями! Надеюсь, что связь между удалёнными ветками и командой `git fetch` теперь прояснилась.",
"", "",
"`git fetch` обычно 'общается' с удалёнными репозиториями посредством Интернета (через такие протоколы, как `http://` или `git://`).", "`git fetch` обычно 'общается' с удалёнными репозиториями посредством Интернета (через такие протоколы, как `http://` или `git://`).",
"" ""
@ -668,9 +668,9 @@ exports.level = {
"", "",
"Важно отметить, что команда `git fetch` забирает данные в ваш _локальный_ репозиторий, но не сливает их с какими-либо вашими наработками и не модифицирует то, над чем вы работаете в данный момент.", "Важно отметить, что команда `git fetch` забирает данные в ваш _локальный_ репозиторий, но не сливает их с какими-либо вашими наработками и не модифицирует то, над чем вы работаете в данный момент.",
"", "",
"Важно это помнить и понимать, потому что многие разработчики думают, что, запустив команду `git fetch`, они приведут всю свою локальную работу к такому же виду как и на удалённом репозитории. Команда всего-лишь скачивает все необходимые данные, но Вам необходимо вручную слить эти данные с вашими, когда вы будете готовы. В следующих уроках мы научимся это делать :D", "Важно это помнить и понимать, потому что многие разработчики думают, что, запустив команду `git fetch`, они приведут всю свою локальную работу к такому же виду, как и на удалённом репозитории. Команда всего лишь скачивает все необходимые данные, но вам потребуется вручную слить эти данные с вашими, когда вы будете готовы. В следующих уроках мы научимся это делать :D",
"", "",
"Одним словом вы можете относиться к `git fetch` как к процедуре скачивания." "Одним словом, вы можете относиться к `git fetch` как к процедуре скачивания."
] ]
} }
}, },

View file

@ -894,9 +894,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Аргументы git fetch", "## Аргументы git fetch",
"", "",
"Итак, мы только что изучили всё, касательно аргументов git push, мы узнали о параметре `<пункт назначения>`, и даже об аргументе, задающем отдельно источник и получатель коммитов (`<источник>:<получатель>`). Можем ли мы применить все эти полученные знания для команды `git fetch` ?", "Итак, мы только что изучили всё, что касается аргументов git push, мы узнали о параметре `<пункт назначения>`, и даже об аргументе, задающем отдельно источник и получатель коммитов (`<источник>:<получатель>`). Можем ли мы применить все эти полученные знания для команды `git fetch` ?",
"", "",
"Ещё бы! Аргументы для команды `git fetch` на самом деле *очень, очень* похожи на те, что мы использовали в `git push`. В данном случае используется тот же подход, только применяемый в противоположном направлении (так как теперь Вы скачиваете коммиты, а не закачиваете их).", "Ещё бы! Аргументы для команды `git fetch` на самом деле *очень, очень* похожи на те, что мы использовали в `git push`. В данном случае применяется тот же подход, только в противоположном направлении (так как теперь вы скачиваете коммиты, а не закачиваете их).",
"", "",
"Давайте ознакомимся с принципами один за одним..." "Давайте ознакомимся с принципами один за одним..."
] ]
@ -908,7 +908,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Параметр `<пункт назначения>`", "### Параметр `<пункт назначения>`",
"", "",
"Если Вы указываете пункт назначения в команде git fetch, например так, как в следующем примере:", "Если вы указываете пункт назначения в команде git fetch, например так, как в следующем примере:",
"", "",
"`git fetch origin foo`", "`git fetch origin foo`",
"", "",
@ -935,9 +935,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Вы, должно быть, спрашиваете себя -- зачем git поместил эти коммиты в ветку `o/foo` вместо того, чтобы разместить из в локальной ветке `foo` ? Ведь я думал о параметре `<пункт назначения>`, как о месте, ветке, которая существует в обоих - локальном и удалённом репозитории. Верно ?", "Вы, должно быть, спрашиваете себя зачем git поместил эти коммиты в ветку `o/foo` вместо того, чтобы разместить из в локальной ветке `foo` ? Ведь я думал о параметре `<пункт назначения>`, как о месте, ветке, которая существует в обоих - локальном и удалённом репозитории. Верно?",
"", "",
"На самом деле, в данном случае git делает исключение, потому что Вы, возможно, работаете над веткой `foo`, которую не хотите привести в беспорядок!! Об этом упоминалось в ранних уроках по `git fetch` -- эта комманда не обновляет Ваши локальные 'не удалённые', она лишь скачивает коммиты (соответственно, Вы можете инспектировать / объединять их позже).", "На самом деле, в данном случае git делает исключение, потому что вы, возможно, работаете над веткой `foo`, которую не хотите привести в беспорядок!! Об этом упоминалось в ранних уроках по `git fetch` - эта команда не обновляет ваши локальные 'не удалённые', она лишь скачивает коммиты (соответственно, вы можете инспектировать / объединять их позже).",
"" ""
] ]
} }
@ -948,11 +948,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"\"Что же тогда произойдёт, если я явно укажу оба параметра: и источник и получатель, пользуясь синтаксисом `<источник>:<получатель>` ?\"", "\"Что же тогда произойдёт, если я явно укажу оба параметра: и источник и получатель, пользуясь синтаксисом `<источник>:<получатель>` ?\"",
"", "",
"Если Вы уверенны в том, что хотите закачать коммиты *прямиком* в Вашу локальную ветку, тогда да, Вы можете явно указать источник и получатель через двоеточние. Вы можете воспользоваться таким приёмом лишь для ветки, на которой Вы не находитесь в настоящий момент `checkout`.", "Если вы уверены в том, что хотите закачать коммиты *прямиком* в вашу локальную ветку, тогда да, вы можете явно указать источник и получатель через двоеточние. Вы можете воспользоваться таким приёмом лишь для ветки, на которой вы не находитесь в настоящий момент `checkout`.",
"", "",
"Теперь у нас `<источник>` - это место на *удалённом репозитории*, а `<получатель>` - место в *локальном* репозитории, в который соедует помещать коммиты. Аргументы в точности да наоборот повторяют git push, и не мудрено, ведь теперь мы переносим данные в обратном направлении!", "Теперь у нас `<источник>` - это место на *удалённом репозитории*, а `<получатель>` - место в *локальном* репозитории, в который следует помещать коммиты. Аргументы в точности до наоборот повторяют git push, и немудрено, ведь теперь мы переносим данные в обратном направлении!",
"", "",
"Как уже было сказано, разработчики редко используют такой подход на практике. Целью демонстрации такой возможности было показать на сколько сходи концептуально `fetch` и `push`. Их отличие лишь в направлении переноса данных." "Как уже было сказано, разработчики редко используют такой подход на практике. Целью демонстрации этой возможности было показать, насколько схожи концептуально `fetch` и `push`. Их отличие лишь в направлении переноса данных."
] ]
} }
}, },
@ -976,7 +976,7 @@ exports.level = {
"А что, если ветка-получатель не существует на момент запуска команды? Давайте ещё раз взглянем на предыдущий слайд, но на этот раз ветки `bar` ещё не существует." "А что, если ветка-получатель не существует на момент запуска команды? Давайте ещё раз взглянем на предыдущий слайд, но на этот раз ветки `bar` ещё не существует."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Видите, поведение совсем такое же как и у git push. Git создал ветку-получатель локально прежде чем скачивать данные. Всё совсем также как и в случае, когда git создаёт получателя в удалённом репозитории, когда мы закачиваем изменения (если получатель не существует)." "Видите, поведение совсем такое же, как и у git push. Git создал ветку-получатель локально прежде чем скачивать данные. Всё как и в случае, когда git создаёт получателя в удалённом репозитории, когда мы закачиваем изменения (если получатель не существует)."
], ],
"command": "git fetch origin foo~1:bar", "command": "git fetch origin foo~1:bar",
"beforeCommand": "git branch foo; git clone; git fakeTeamwork foo 2" "beforeCommand": "git branch foo; git clone; git fakeTeamwork foo 2"
@ -988,7 +988,7 @@ exports.level = {
"beforeMarkdowns": [ "beforeMarkdowns": [
"А если вообще без аргументов ?", "А если вообще без аргументов ?",
"", "",
"Если комманда `git fetch` выполняется без аргументов, она скачивает все-все коммиты с удалённого репозитория и помещает их в соответствующие удалённо-локальные ветки в локальном репозитории..." "Если команда `git fetch` выполняется без аргументов, она скачивает все-все коммиты с удалённого репозитория и помещает их в соответствующие удалённо-локальные ветки в локальном репозитории..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Достаточно просто, после того как мы пережили все эти технические тонкости." "Достаточно просто, после того как мы пережили все эти технические тонкости."

View file

@ -1049,11 +1049,11 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Представьте себе, Вы склонировали репозиторий в понедельник и начали разрабатывать какую-то новую и уникальную часть приложения (на сленге разработчиков - `фича`). В пятницу вечером Вы наконец-то готовы опубликовать Вашу фичу. Но, о нет! Ваш коллега в течении недели написал кучу кода, который делает все Ваши наработки устарелыми. Этот код был также закоммичен и опубликован на общедоступном удалённом репозитории, поэтому теперь *Ваш* код базируется на *устаревшей* версии проекта и более не уместен.", "Представьте себе, вы склонировали репозиторий в понедельник и начали разрабатывать какую-то новую и уникальную часть приложения (на сленге разработчиков - `фича`). В пятницу вечером вы наконец-то готовы опубликовать вашу фичу. Но, о нет! Ваш коллега в течение недели написал кучу кода, который делает все ваши наработки устарелыми. Этот код был также закоммичен и опубликован на общедоступном удалённом репозитории, поэтому теперь *ваш* код базируется на *устаревшей* версии проекта и более не уместен.",
"", "",
"В этом случае использование команды `git push` является сомнительным. Как поведёт себя команда `git push`, если Вы её выполните? Может быть она изменит удалённый репозиторий и вернёт всё к тому состоянию, которое было в понедельник? А может быть команда попробует добавить Ваш код, не удаляя при этом новый? Или же она проигнорирует Ваши изменения, так как они уже устарели?", "В этом случае использование команды `git push` является сомнительным. Как поведёт себя команда `git push`, если вы её выполните? Может быть, она изменит удалённый репозиторий и вернёт всё к тому состоянию, которое было в понедельник? А может, команда попробует добавить ваш код, не удаляя при этом новый? Или же она проигнорирует ваши изменения, так как они уже устарели?",
"", "",
"По причине того, что в данной ситуации (когда история расходится) слишком много двусмысленностей и неопределённостей, git не даст Вам закачать (`push`) Ваши изменения. Чтобы поделится и закачать свои наработки, git будет принуждать Вас включить в состав своей работы все те последние наработки и изменения, находящиеся на удалённом репозитории." "По причине того, что в данной ситуации (когда история расходится) слишком много двусмысленностей и неопределённостей, git не даст вам закачать (`push`) ваши изменения. Он будет принуждать вас включить в состав своей работы все те последние наработки и изменения, которые находятся на удалённом репозитории."
] ]
} }
}, },
@ -1064,7 +1064,7 @@ exports.level = {
"Слишком много болтовни! Давайте посмотрим, как всё работает на живом примере" "Слишком много болтовни! Давайте посмотрим, как всё работает на живом примере"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Видите? Ничего не произошло. Всё потому, что команда `git push` не выполнилась успешно. Дело в том, что Ваш последний коммит `C3` основан на удалённом коммите `C1`. В свою очередь удалённый репозиторий уже изменился под воздействием `C2`. Вот почему git отклонил Ваш push." "Видите? Ничего не произошло. Всё потому, что команда `git push` не выполнилась успешно. Дело в том, что ваш последний коммит `C3` основан на удалённом коммите `C1`. В свою очередь, удалённый репозиторий уже изменился под воздействием `C2`. Вот почему git отклонил ваш push."
], ],
"command": "git push", "command": "git push",
"beforeCommand": "git clone; git fakeTeamwork; git commit" "beforeCommand": "git clone; git fakeTeamwork; git commit"
@ -1074,9 +1074,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Как же разрешить данную ситуацию? Всё очень просто! Всё что Вам нужно - перебазировать свою работу на наиболее последнюю версию удалённой ветки.", "Как же разрешить данную ситуацию? Всё очень просто! Всё, что вам нужно - перебазировать свою работу на самую последнюю версию удалённой ветки.",
"", "",
"Существует множество путей, как сделать это, но наиболее простой способ 'сдвинуть' свои наработки - через перебазировку или rebasing. Давайте посмотрим, как это выглядит." "Существует множество способов сделать это, но наиболее простой способ 'сдвинуть' свои наработки - через перебазировку или rebasing. Давайте посмотрим, как это выглядит."
] ]
} }
}, },
@ -1084,7 +1084,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Теперь, когда мы сперва перебазиуемся прежде чем публиковать изменения..." "Теперь, когда мы сперва перебазируемся прежде чем публиковать изменения..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Опа! Мы только что обновили наш локальный образ удалённого репозитория средствами `git fetch`. Ещё мы перебазировали наши наработки, чтобы они отражали все изменения с удалённого репозитория, и опубликовали их с помощью `git push`" "Опа! Мы только что обновили наш локальный образ удалённого репозитория средствами `git fetch`. Ещё мы перебазировали наши наработки, чтобы они отражали все изменения с удалённого репозитория, и опубликовали их с помощью `git push`"
@ -1097,9 +1097,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"А есть ещё какие-либо варианты чтобы обновить мои наработки, к тому моменту как удалённый репозиторий был обновлён? Конечно есть! Давайте ознакомимся с парочкой новых штучек, но в этот раз с помощью команды `merge`.", "А есть ещё какие-либо варианты обновить мои наработки к тому моменту, как удалённый репозиторий был обновлён? Конечно есть! Давайте ознакомимся с парочкой новых штучек, но в этот раз с помощью команды `merge`.",
"", "",
"Несмотря на то, что `git merge` не передвигает ваши наработки (а всего лишь создаёт новый коммит, в котором Ваши и удалённые изменения объединены), этот способ помогает указать git-у на то, что Вы собираетесь включить в состав Ваших наработок все изменения с удалённого репозитория. Это значит, что Ваш коммит отразится на всех коммитах удалённой ветки, поскольку удалённая ветка является *предком* Вашей собственной локальной ветки.", "Несмотря на то, что `git merge` не передвигает ваши наработки (а всего лишь создаёт новый коммит, в котором Ваши и удалённые изменения объединены), этот способ помогает указать git-у на то, что вы собираетесь включить в состав ваших наработок все изменения с удалённого репозитория. Это значит, что ваш коммит отразится на всех коммитах удалённой ветки, поскольку удалённая ветка является *предком* вашей собственной локальной ветки.",
"", "",
"Давайте взглянем на демонстрацию..." "Давайте взглянем на демонстрацию..."
] ]
@ -1112,7 +1112,7 @@ exports.level = {
"Таким образом, если мы объединим (merge) вместо перебазирования (rebase)..." "Таким образом, если мы объединим (merge) вместо перебазирования (rebase)..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Опа! Мы обновили наше локальное представление удалённого репозитория с помощью `git fetch`, *объединили* Ваши новые наработки с нашими наработками (чтобы отразить изменения в удалённом репозитории), и затем опубликовали их с помощью `git push`" "Опа! Мы обновили наше локальное представление удалённого репозитория с помощью `git fetch`, *объединили* ваши новые наработки с нашими наработками (чтобы отразить изменения в удалённом репозитории) и затем опубликовали их с помощью `git push`"
], ],
"command": "git fetch; git merge o/master; git push", "command": "git fetch; git merge o/master; git push",
"beforeCommand": "git clone; git fakeTeamwork; git commit" "beforeCommand": "git clone; git fakeTeamwork; git commit"
@ -1124,7 +1124,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"Здорово! А можно ли как-то сделать всё то же самое, но с меньшим количеством команд?", "Здорово! А можно ли как-то сделать всё то же самое, но с меньшим количеством команд?",
"", "",
"Конечно -- ведь Вы уже знаете команду `git pull`, которая является аналогом и более кратким аналогом для совместных fetch и merge. А команда `git pull --rebase` - аналог для совместно вызванных fetch и rebase!", "Конечно - ведь вы уже знаете команду `git pull`, которая является аналогом и более кратким аналогом для совместных fetch и merge. А команда `git pull --rebase` - аналог для совместно вызванных fetch и rebase!",
"", "",
"Давайте взглянем на эти оба варианта." "Давайте взглянем на эти оба варианта."
] ]
@ -1137,7 +1137,7 @@ exports.level = {
"Сперва - с флагом `--rebase`..." "Сперва - с флагом `--rebase`..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Тот же результат как и ранее, но намного короче вызов команд." "Тот же результат, как и ранее, но намного короче вызов команд."
], ],
"command": "git pull --rebase; git push", "command": "git pull --rebase; git push",
"beforeCommand": "git clone; git fakeTeamwork; git commit" "beforeCommand": "git clone; git fakeTeamwork; git commit"
@ -1160,14 +1160,14 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Рабочий процесс получения изменений (fetching), перебазирования/объединения (rebase/merging) и публикации изменений (pushing) довольно часто используемый. В последующих уроках мы изучим более сложные варианты этих рабочих процессов, но пока что, давайте остановимся на том, что есть.", "Рабочий процесс получения изменений (fetching), перебазирования/объединения (rebase/merging) и публикации изменений (pushing) используется довольно часто. В последующих уроках мы изучим более сложные варианты этих рабочих процессов, но пока что давайте остановимся на том, что есть.",
"", "",
"Выполните следующее, чтобы выполнить задание уровня:", "Чтобы выполнить задание уровня, сделайте следующее:",
"", "",
"* Склонируйте репозиторий", "* Склонируйте репозиторий",
"* Сфабрикуйте командную работу (1 коммит)", "* Сфабрикуйте командную работу (1 коммит)",
"* Сделайте свой собственный коммит (1 коммит)", "* Сделайте свой собственный коммит (1 коммит)",
"* Опубликуйте свои наработки посредствам *перебазировки rebasing*" "* Опубликуйте свои наработки посредством *перебазировки (rebasing)*"
] ]
} }
} }

View file

@ -396,7 +396,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Merge? Нет, нет, спасибо.", "## Merge? Нет, нет, спасибо.",
"", "",
"Чтобы закачать (push) новые изменения в удалённый репозиторий, всё что Вам нужно сделать - это *смешать* последние изменения из удалённого репозитория. Это значит, что Вы можете выполнить rebase *или* merge на удалённом репозитории (например, `o/master`).", "Чтобы закачать (push) новые изменения в удалённый репозиторий, всё, что вам нужно сделать - это *смешать* последние изменения из удалённого репозитория. Это значит, что вы можете выполнить rebase *или* merge на удалённом репозитории (например, `o/master`).",
"", "",
"Если мы можем воспользоваться одним из двух методов, то почему же эти упражнения сфокусированы в основном на rebase? К чему такая нелюбовь к `merge`, когда речь идёт о работе с удалёнными репозиториями?", "Если мы можем воспользоваться одним из двух методов, то почему же эти упражнения сфокусированы в основном на rebase? К чему такая нелюбовь к `merge`, когда речь идёт о работе с удалёнными репозиториями?",
"" ""
@ -411,7 +411,7 @@ exports.level = {
"", "",
"За:", "За:",
"", "",
"* Rebasing делает дерево коммитов более чистым, читабельным потому что всё представляется единой прямой линией.", "* Rebasing делает дерево коммитов более чистым и читабельным, потому что всё представляется единой прямой линией.",
"", "",
"Против:", "Против:",
"", "",
@ -419,7 +419,7 @@ exports.level = {
"", "",
"Например, коммит `C1` может быть перебазирован *после* `C3`. Соответственно, в дереве работа над `C1'` будет отображаться как идущая после `C3`, хотя на самом деле она была выполнена раньше.", "Например, коммит `C1` может быть перебазирован *после* `C3`. Соответственно, в дереве работа над `C1'` будет отображаться как идущая после `C3`, хотя на самом деле она была выполнена раньше.",
"", "",
"Некоторые разработчики любят сохранять историю, и таким образом, предпочитают слияние (merging). Другие (такие как я) предпочитают иметь чистое дерево коммитов, и пользуются перебазировкой (rebasing). Всё зависит от Ваших предпочтений и вкусов :D" "Некоторые разработчики любят сохранять историю и предпочитают слияние (merging). Другие (такие как я) предпочитают иметь чистое дерево коммитов, и пользуются перебазировкой (rebasing). Всё зависит от ваших предпочтений и вкусов :D"
] ]
} }
}, },
@ -427,7 +427,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Для этого уровня, давайте решим предыдущие задачи, но с помощью *слияния (merging)*. Может быть получится слегка неказисто, однако такое упражнение хорошо отразит суть различий." "Чтобы пройти этот уровень, решите предыдущие задачи, но с помощью *слияния (merging)*. Может быть, получится слегка неказисто, однако такое упражнение хорошо отразит суть различий."
] ]
} }
} }

View file

@ -450,16 +450,16 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Git Pull", "## Git Pull",
"", "",
"Теперь, когда мы познакомились с тем, как извлекать данные из удалённого репозитория с помощью `git fetch`, давайте обновим нашу работу чтобы отобразить все эти изменения!", "Теперь, когда мы познакомились с тем, как извлекать данные из удалённого репозитория с помощью `git fetch`, давайте обновим нашу работу, чтобы отобразить все эти изменения!",
"", "",
"Существует множество вариантов решений -- как только у вас имеется локальный коммит, Вы можете соединить его с другой веткой. Это значит Вы можете выполнить одну из команд:", "Существует множество вариантов решений - как только у вас имеется локальный коммит, вы можете соединить его с другой веткой. Это значит, вы можете выполнить одну из команд:",
"", "",
"* `git cherry-pick o/master`", "* `git cherry-pick o/master`",
"* `git rebase o/master`", "* `git rebase o/master`",
"* `git merge o/master`", "* `git merge o/master`",
"* и т.д.", "* и т.д.",
"", "",
о факту процедура *скачивания (fetching)* изменений с удалённой ветки и *объединения (merging)* настолько частая и распространённая, что git предоставляет вместо двух команд - одну! Эта команда - `git pull`." роцедура *скачивания (fetching)* изменений с удалённой ветки и *объединения (merging)* настолько частая и распространённая, что git предоставляет вместо двух команд - одну! Эта команда - `git pull`."
] ]
} }
}, },
@ -470,7 +470,7 @@ exports.level = {
"Давайте рассмотрим, как `fetch` и `merge` выполняются последовательно" "Давайте рассмотрим, как `fetch` и `merge` выполняются последовательно"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Опа -- мы скачали `C3` с помощью команды `fetch` и затем объединяем эти наработки с помощью `git merge o/master`. Теперь наша ветка `master` отображает изменения с удалённого репозитория (в данном случае с репозитория `origin`)" "Опа - мы скачали `C3` с помощью команды `fetch` и затем объединяем эти наработки с помощью `git merge o/master`. Теперь наша ветка `master` отображает изменения с удалённого репозитория (в данном случае с репозитория `origin`)"
], ],
"command": "git fetch; git merge o/master", "command": "git fetch; git merge o/master",
"beforeCommand": "git clone; git commit; git fakeTeamwork" "beforeCommand": "git clone; git commit; git fakeTeamwork"
@ -480,10 +480,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Что же произойдёт если вместо этих команд мы воспользуемся `git pull` ?" "Что же произойдёт, если вместо этих команд мы воспользуемся `git pull`?"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Абсолютно то же самое! Нужно ясно и чётко понимать, что `git pull` существенно уменьшает Вашу рутинную работу, если бы Вы использовали `git fetch` и последующее слияние (merging) скаченной ветки." "Абсолютно то же самое! Нужно чётко понимать, что `git pull` существенно уменьшает вашу рутинную работу, если бы вы использовали `git fetch` и последующее слияние (merging) скаченной ветки."
], ],
"command": "git pull", "command": "git pull",
"beforeCommand": "git clone; git commit; git fakeTeamwork" "beforeCommand": "git clone; git commit; git fakeTeamwork"
@ -495,7 +495,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"Мы изучим детали команды `git pull` чуть позже (включая опции и аргументы вызова команды), а пока что давайте просто попробуем эту команду.", "Мы изучим детали команды `git pull` чуть позже (включая опции и аргументы вызова команды), а пока что давайте просто попробуем эту команду.",
"", "",
"Помните -- Вы также можете выполнить этот уровень с помощью команд `fetch` и `merge`, но нужно ли делать так, когда можно воспользоваться всего лишь одной командой ? :P" "Помните, вы также можете выполнить этот уровень с помощью команд `fetch` и `merge`, но нужно ли делать так, когда можно воспользоваться всего лишь одной командой ? :P"
] ]
} }
} }

View file

@ -551,9 +551,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Аргументы для pull", "## Аргументы для pull",
"", "",
"Аргументы для `git pull` не покажутся вам чем-то новым, учитывая, что Вы уже знакомы с аргументами для `git fetch` и `git push` :)", "Аргументы для `git pull` не покажутся вам чем-то новым, учитывая, что вы уже знакомы с аргументами для `git fetch` и `git push` :)",
"", "",
"Как мы помним `git pull` делает следующее: сначала выполняет `git fetch`, а следом сразу `git merge` с той веткой, в которую притянулись обновления командой fetch. Другими словами, это все равно, что выполнить git fetch с теми-же аргументами, которые Вы указали для pull, а затем выполнить git merge с веткой, указанной в аргументе <приемник> команды pull.", "Как мы помним, `git pull` сначала выполняет `git fetch`, а следом сразу `git merge` с той веткой, в которую притянулись обновления командой fetch. Другими словами, это все равно, что выполнить git fetch с теми же аргументами, которые вы указали для pull, а затем выполнить git merge с веткой, указанной в аргументе <приемник> команды pull.",
"", "",
"Рассмотрим на примерах:" "Рассмотрим на примерах:"
] ]
@ -585,10 +585,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Здесь, сначала выполнится fetch с аргументом указанным к pull, а merge выполняется с теми измененями которые будут скачаны командой fetch" "Здесь сначала выполнится fetch с аргументом указанным к pull, а merge выполняется с теми изменениями, которые будут скачаны командой fetch"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Как видно, мы указали `master`, поэтому как обычно все обновления притянулись на ветку `o/master`. Затем мы слили(merge) обновленную ветку `o/master` с веткой на которой мы находимся." "Как видно, мы указали `master`, поэтому как обычно все обновления притянулись на ветку `o/master`. Затем мы слили (merge) обновленную ветку `o/master` с веткой, на которой мы находимся."
], ],
"command": "git pull origin master", "command": "git pull origin master",
"beforeCommand": "git clone; go -b bar; git commit; git fakeTeamwork" "beforeCommand": "git clone; go -b bar; git commit; git fakeTeamwork"
@ -598,10 +598,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Будет ли это работать если указать `<источник>` и `<приемник>`? Проверим:" "Будет ли это работать, если указать `<источник>` и `<приемник>`? Проверим:"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Ого, сколько всего выполнено всего одной командой!. Мы создали новую ветку `foo` в локальном репозитории, скачали на неё изменения с ветки master удаленного репозитория, а затем слили эту ветку с веткой `bar` на которой мы находились!" "Ого, сколько всего выполнено всего одной командой!. Мы создали новую ветку `foo` в локальном репозитории, скачали на неё изменения с ветки `master` удаленного репозитория, а затем слили эту ветку с веткой `bar`, на которой мы находились!"
], ],
"command": "git pull origin master:foo", "command": "git pull origin master:foo",
"beforeCommand": "git clone; git fakeTeamwork; go -b bar; git commit" "beforeCommand": "git clone; git fakeTeamwork; go -b bar; git commit"
@ -611,7 +611,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"В последнем упражнении, необходимо привести дерево к аналогичному в примере. Нужно скачать несколько изменений, создать несколько новых веток, слить одни ветки в другие, но постарайтесь использовать как можно меньше команд. Удачи! :P" "В последнем упражнении необходимо привести дерево к аналогичному в примере. Нужно скачать несколько изменений, создать несколько новых веток, слить одни ветки в другие, но постарайтесь использовать как можно меньше команд. Удачи! :P"
] ]
} }
} }

View file

@ -330,15 +330,15 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Git Push", "## Git Push",
"", "",
"Хорошо, мы скачали изменения с удалённого репозитория и включили их в наши локальные наработки. Всё это замечательно, но, как нам поделиться _своими_ наработками и изменениями с другими участниками проекта?", "Хорошо, мы скачали изменения с удалённого репозитория и включили их в наши локальные наработки. Всё это замечательно, но как нам поделиться _своими_ наработками и изменениями с другими участниками проекта?",
"", "",
"Способ, которым мы воспользуемся, является противоположным тому способу, которым мы пользовались ранее для скачивания наработок (`git pull`). Этот способ - использование команды `git push`!", "Способ, которым мы воспользуемся, является противоположным тому способу, которым мы пользовались ранее для скачивания наработок (`git pull`). Этот способ - использование команды `git push`!",
"", "",
"Команда `git push` отвечает за загрузку _Ваших_ изменений в указанный удалённый репозиторий, а также включение Ваших коммитов в состав удалённого репозитория. По окончанию работы команды `git push` все Ваши друзья смогут скачать себе все сделанные Вами наработки.", "Команда `git push` отвечает за загрузку _ваших_ изменений в указанный удалённый репозиторий, а также включение ваших коммитов в состав удалённого репозитория. По окончании работы команды `git push` все ваши друзья смогут скачать себе все сделанные вами наработки.",
"", "",
"Вы можете рассматривать команду `git push` как \"публикацию\" своей работы. Эта команда скрывает в себе множество тонкостей и нюансов, с которыми мы познакомимся в ближайшее время, а пока что давайте начнём с малого...", "Вы можете рассматривать команду `git push` как \"публикацию\" своей работы. Эта команда скрывает в себе множество тонкостей и нюансов, с которыми мы познакомимся в ближайшее время, а пока что давайте начнём с малого...",
"", "",
"*замечание -- поведение команды `git push` без аргументов варьируется в зависимости от значения `push.default`, указанной в настройках git-а. Значение по умолчанию зависит от версии git, которую Вы используете, однако в наших уроках мы будем использовать значение `upstream`. Лучше всегда проверять эту опцию прежде чем push-ить Ваши настоящие проекты.*" "*замечание - поведение команды `git push` без аргументов варьируется в зависимости от значения `push.default`, указанной в настройках git-а. Значение по умолчанию зависит от версии git, которую вы используете, однако в наших уроках мы будем использовать значение `upstream`. Лучше всегда проверять эту опцию прежде чем push-ить ваши настоящие проекты.*"
] ]
} }
}, },
@ -346,10 +346,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Здесь у нас имеются изменения, которых нету в удалённом репозитории. Давайте же закачаем их туда!" "Здесь у нас имеются изменения, которых нет в удалённом репозитории. Давайте же закачаем их туда!"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Вот так -- удалённый репозиторий получил новый коммит `C2`, ветка `master` на удалённом репозитории теперь указывает на `C2`, и наше *собственное* локальное отображение удалённого репозитория (`o/master`) изменилось соответственно. Всё синхронизировалось!" "Вот так - удалённый репозиторий получил новый коммит `C2`, ветка `master` на удалённом репозитории теперь указывает на `C2`, и наше *собственное* локальное отображение удалённого репозитория (`o/master`) изменилось соответственно. Всё синхронизировалось!"
], ],
"command": "git push", "command": "git push",
"beforeCommand": "git clone; git commit" "beforeCommand": "git clone; git commit"

View file

@ -541,9 +541,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Аргументы команды Push", "## Аргументы команды Push",
"", "",
"Отлично! Теперь, когда Вы знаете, как следить за удалёнными ветками мы можем начать изучение того, что скрыто под занавесом работы команд git push, fetch, и pull. Мы будем рассматривать одну команду за другой, однако принципы у них очень схожи.", "Отлично! Теперь, когда вы знаете, как следить за удалёнными ветками, мы можем начать изучение того, что скрыто под занавесом работы команд git push, fetch и pull. Мы будем рассматривать одну команду за другой, однако принципы у них очень схожи.",
"", "",
"Сперва взглянем на `git push`. В уроке посвящённому слежением за удалённым репозиторием, Вы узнали о том, что git находит удалённый репозиторий *и* ветку, в которую нужно необходимо push-ить, благодаря свойствам текущей ветки, на которой мы находимся. Это так называемое поведение без аргументов, однако команда git push может быть также использована и с аргументами. Вид команды в данном случае:", "Сперва взглянем на `git push`. В уроке, посвящённом слежению за удалённым репозиторием, вы узнали о том, что git находит удалённый репозиторий *и* ветку, в которую необходимо push-ить, благодаря свойствам текущей ветки, на которой мы находимся. Это так называемое поведение без аргументов, однако команда git push может быть также использована и с аргументами. Вид команды в данном случае:",
"", "",
"`git push <удалённый_репозиторий> <целевая_ветка>`", "`git push <удалённый_репозиторий> <целевая_ветка>`",
"", "",
@ -561,11 +561,11 @@ exports.level = {
"", "",
"дословный перевод с английского будет таким:", "дословный перевод с английского будет таким:",
"", "",
"*Перейди в ветку с именем \"master\" в моём локальном репозитории, возьми все коммиты, и затем перейди на ветку \"master\" на удалённом репозитории \"origin.\". На этоу удалённую ветку скопируй все отсутствующие коммиты, которые есть у меня, и скажи, когда ты закончишь.*", "*Перейди в ветку с именем \"master\" в моём локальном репозитории, возьми все коммиты и затем перейди на ветку \"master\" на удалённом репозитории \"origin.\". На эту удалённую ветку скопируй все отсутствующие коммиты, которые есть у меня, и скажи, когда ты закончишь.*",
"", "",
"Указывая `master` в качестве аргумента \"целевая_ветка\", мы тем самым говорим git-у откуда будут *приходить* и *уходить* наши коммиты. Аргумент \"целевая_ветка\" или \"местонахождение\" - это синхранизация между двумя репозиториями.", "Указывая `master` в качестве аргумента \"целевая_ветка\", мы тем самым говорим git-у откуда будут *приходить* и *уходить* наши коммиты. Аргумент \"целевая_ветка\" или \"местонахождение\" - это синхронизация между двумя репозиториями.",
"", "",
"Имейте ввиду, что с тех пор, как мы сказали git-у всё, что ему необходимо (указав оба аргумента), ему - git-у - абсолютно всё равно что Вы зачекаутили до этого!" "Имейте в виду, что с тех пор, как мы сказали git-у всё, что ему необходимо (указав оба аргумента), ему - git-у - абсолютно всё равно, что вы зачекаутили до этого!"
] ]
} }
}, },
@ -589,7 +589,7 @@ exports.level = {
"А что бы было, ели бы мы не указывали эти аргументы, при этом используя тот же алгоритм?" "А что бы было, ели бы мы не указывали эти аргументы, при этом используя тот же алгоритм?"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Как Вы видите, команда не выполнилась, так как `HEAD` потерялся и не находится на удалённо-отслеживаемой ветке." "Как вы видите, команда не выполнилась, так как `HEAD` потерялся и не находится на удалённо-отслеживаемой ветке."
], ],
"command": "git checkout C0; git push", "command": "git checkout C0; git push",
"beforeCommand": "git clone; git commit" "beforeCommand": "git clone; git commit"
@ -602,7 +602,7 @@ exports.level = {
"Хорошо, для выполнения этого уровня давайте обновим обе ветки `foo` и `master` на удалённом репозитории. Фишка в том, что команда `git checkout` не доступна на этом уровне!", "Хорошо, для выполнения этого уровня давайте обновим обе ветки `foo` и `master` на удалённом репозитории. Фишка в том, что команда `git checkout` не доступна на этом уровне!",
"", "",
"*Замечание: Удалённые ветки помечены как `o/`, а не `origin/`. Дело в том, что полная метка не помещается на экране. Не волнуйтесь ", "*Замечание: Удалённые ветки помечены как `o/`, а не `origin/`. Дело в том, что полная метка не помещается на экране. Не волнуйтесь ",
"по этому поводу... просто как всегда используйте знакомый нам `origin` для обращения к удалённому репозиторию.*" "по этому поводу... просто используйте знакомый нам `origin` для обращения к удалённому репозиторию.*"
] ]
} }
} }

View file

@ -523,13 +523,13 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Подробности аргумента `<пункт назначения>`", "## Подробности аргумента `<пункт назначения>`",
"", "",
"Помните, когда в прошлом занятии мы указали в качестве аргумента ветку `master` для команды git push, мы указали совместно *источник* откуда будут приходить коммиты и *пункт назначения (получатель)*, куда коммиты будут уходить.", "Помните, когда в прошлом занятии мы указали в качестве аргумента ветку `master` для команды git push, мы указали совместно *источник*, откуда будут приходить коммиты, и *пункт назначения (получатель)*, куда коммиты будут уходить.",
"", "",
"Однако, Вы, наверное, задаётесь вопросом -- а что, если я хочу, чтобы мои источник и получатель коммитов были различными? Что если мы хотим запушить коммиты из локальной ветки `foo` в ветку `bar` на удалённом репозитории?", "Однако, вы, наверное, задаётесь вопросом - а что, если я хочу, чтобы мои источник и получатель коммитов были различными? Что, если мы хотим запушить коммиты из локальной ветки `foo` в ветку `bar` на удалённом репозитории?",
"", "",
"К огромному сожалению, это невозможно сделать средствами git... Да ладно! Я пошутил! Конечно это возможно :)... git сам по себе достаточно гибок (даже слишком).", "К огромному сожалению, это невозможно сделать средствами git... Да ладно! Я пошутил! Конечно, это возможно :)... git сам по себе достаточно гибок (даже слишком).",
"", "",
"Мы увидим как на следующем слайде..." "Мы увидим, как именно, на следующем слайде..."
] ]
} }
}, },
@ -537,13 +537,13 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"В том случае, когда Вам необходимо разделить источник и получатель аргумента `<пункт назначения>`, просто соедините их вместе, используя двоеточие:", "В том случае, когда вам необходимо разделить источник и получатель аргумента `<пункт назначения>`, соедините их вместе, используя двоеточие:",
"", "",
"`git push origin <источник>:<получатель>`", "`git push origin <источник>:<получатель>`",
"", "",
"Обычно это называется как refspec. Refspec это всего лишь модное имя для определения местоположения, которое git может распознать (например, ветка `foo` или просто `HEAD~1`)", "Обычно это называется `refspec`. Refspec — это всего лишь модное имя для определения местоположения, которое git может распознать (например, ветка `foo` или просто `HEAD~1`)",
"", "",
"Как только Вы указали оба источник и получатель независимо друг от друга, Вы можете довольно причудливо и точно использовать команды для работы с удалёнными ветками и репозиториями. Давайте взглянем демонстрацию!" "Как только вы указали источник и получатель независимо друг от друга, вы можете довольно причудливо и точно использовать команды для работы с удалёнными ветками и репозиториями. Давайте взглянем на демонстрацию!"
] ]
} }
}, },
@ -554,7 +554,7 @@ exports.level = {
"Помните, `источник` - всего лишь местоположение, которое git должен понять:" "Помните, `источник` - всего лишь местоположение, которое git должен понять:"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Вау! Это довольно нетривиальная команда, однако она имеет смысл -- git видит в `foo^` не что иное, как местоположение, закачивает все коммиты, которые не присутствуют на удалённом репозитории, и затем обновляет получателя." "Вау! Это довольно нетривиальная команда, однако она имеет смысл - git видит в `foo^` не что иное, как местоположение, закачивает все коммиты, которые не присутствуют на удалённом репозитории, и затем обновляет получателя."
], ],
"command": "git push origin foo^:master", "command": "git push origin foo^:master",
"beforeCommand": "git clone; go -b foo; git commit; git commit" "beforeCommand": "git clone; go -b foo; git commit; git commit"
@ -564,7 +564,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"А что если пункт назначения, в который Вы хотите запушить, не существует? Без проблем! Просто укажите имя ветки и git сам создаст ветку на удалённом репозитории для Вас." "А что если пункт назначения, в который вы хотите запушить, не существует? Без проблем! Укажите имя ветки, и git сам создаст ветку на удалённом репозитории для вас."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Класс! Довольно легко! :D" "Класс! Довольно легко! :D"
@ -577,7 +577,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Для выполнения данного уровня попытайтесь привести своё дерево к такому же виду, которое представлено на визуализации. И не забудьте о формате:", "Для выполнения данного уровня попытайтесь привести своё дерево к такому же виду, как на визуализации. И не забудьте о формате:",
"", "",
"`<источник>:<получатель>`" "`<источник>:<получатель>`"
] ]

View file

@ -407,15 +407,15 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Слияние фича-бранчей (веток)", "## Слияние фича-бранчей (веток)",
"", "",
"Теперь, когда Вы умело владеете командами fetch, pull и push давайте применим эти навыки в сочетании с новым рабочим процессом (он же workflow).", "Теперь, когда вы умело владеете командами fetch, pull и push, давайте применим эти навыки в сочетании с новым рабочим процессом (он же workflow).",
"", "",
"Для разработчиков, вовлечённых в большой проект, является довольно распространённым выполнять всю свою работу в так называемых фича-бранчах (вне `master`). А затем, как только работа выполнена, разработчик интегрирует всё что было им сделано. Всё это, за исключением одного шага, довольно похоже на предыдущий урок (там, где мы закачивали ветки на удалённый репозиторий)", "Среди разработчиков, вовлечённых в большой проект, довольно распространённ приём — выполнять всю свою работу в так называемых фича-бранчах (вне `master`). А затем, как только работа выполнена, разработчик интегрирует всё, что было им сделано. Всё это, за исключением одного шага, похоже на предыдущий урок (там, где мы закачивали ветки на удалённый репозиторий)",
"", "",
"Ряд разработчиков делают push и pull лишь на локальную ветку `master` -- таким образом ветка `master` всегда обновлена с тем, что находится на удалённом репозитории (`o/master`).", "Ряд разработчиков делают push и pull лишь на локальную ветку `master` - таким образом ветка `master` всегда синхронизирована с тем, что находится на удалённом репозитории (`o/master`).",
"", "",
"Для этого рабочего процесса мы совместили две вещи:", "Для этого рабочего процесса мы совместили две вещи:",
"", "",
"* интеграция фича-бранчей в `master`, а также ", "* интеграцию фича-бранчей в `master`",
"* закачку (push) и скачку (pull) с удалённого репозитория" "* закачку (push) и скачку (pull) с удалённого репозитория"
] ]
} }
@ -440,13 +440,13 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Текущая задача является достаточно обильной -- здесь представлена общая схема выполнения:", "Текущая задача является достаточно обильной - здесь представлена общая схема выполнения:",
"", "",
"* Есть три фича-бранчи (фича-ветки) -- `side1` `side2` и `side3`", "* Есть три фича-бранчи (фича-ветки) - `side1` `side2` и `side3`",
"* Нам необходимо закачать каждую из них по очереди на удалённый репозиторий", "* Нам необходимо закачать каждую из них по очереди на удалённый репозиторий",
"* При этом удалённый репозиторий хранит в себе какие-то наработки, которые также следует скачать к себе", "* При этом удалённый репозиторий хранит в себе какие-то наработки, которые также следует скачать к себе",
"", "",
":O Сложно! Желаю Вам удачи в выполнении этой непростой задачи." ":O Сложно! Желаю вам удачи в выполнении этой непростой задачи."
] ]
} }
} }

View file

@ -525,13 +525,13 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Удалённые ветки в Git", "## Удалённые ветки в Git",
"", "",
"Теперь, когда Вы уже увидели `git clone` в действии, давайте углубимся в детали и посмотрим что же на самом деле изменилось.", "Теперь, когда вы уже увидели `git clone` в действии, давайте углубимся в детали и посмотрим что же на самом деле изменилось.",
"", "",
"Во-первых, Вы должны были заметить что у нас появилась новая ветка в нашем локальном репозитории с именем `o/master`. Такой тип ветки называется _удалённой_ веткой; поскольку удалённые ветки играют важную и уникальную роль, они обладают рядом специальных свойств.", "Во-первых, вы должны были заметить, что у нас в локальном репозитории появилась новая ветка с именем `o/master`. Такой тип ветки называется _удалённой_ веткой. Поскольку удалённые ветки играют важную и уникальную роль, они обладают рядом специальных свойств.",
"", "",
"Удалённые ветки отражают _состояние_ удалённых репозиториев (с того момента как Вы обращались к этим удалённым репозиториям в последний раз). Они позволяют Вам отслеживать и видеть разницу между Вашими локальными наработками и тем что было сделано другими участниками -- важный шаг, который необходимо делать, прежде чем делиться своими наработками с другими.", "Удалённые ветки отражают _состояние_ удалённых репозиториев (с того момента, как вы обращались к этим удалённым репозиториям в последний раз). Они позволяют вам отслеживать и видеть разницу между вашими локальными наработками и тем, что было сделано другими участниками - важный шаг, который необходимо делать, прежде чем делиться своими наработками с другими.",
"", "",
"Важным свойством удалённых веток является тот факт, что когда Вы извлекаете их Вы отделяете (detaching) `HEAD`. Git делает это потому что Вы не можете работать непосредственно в этих ветках; сперва Вам необходимо сделать наработки где-либо, а уж затем делиться ими с удалёнными репозиториями (после чего Ваши удалённые ветки будут обновлены)." "Важным свойством удалённых веток является тот факт, что когда вы извлекаете их, вы отделяете (detaching) `HEAD`. Git делает это потому, что вы не можете работать непосредственно в этих ветках; сперва вам необходимо сделать наработки где-либо, а уж затем делиться ими с удалёнными репозиториями (после чего ваши удалённые ветки будут обновлены)."
] ]
} }
}, },
@ -539,17 +539,17 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"### Что такое `o/` в названии ветки ?", "### Что такое `o/` в названии ветки?",
"", "",
"Вы наверное догодались, что первый символ `o/` в названии ветки служит для обозначения именно удалённых веток. Да. Удалённые ветки также имеют (обязательное) правило именования -- они отображаются в формате:", "Вы, наверное, догадались, что первый символ `o/` в названии ветки служит для обозначения именно удалённых веток. Да. Удалённые ветки также имеют (обязательное) правило именования - они отображаются в формате:",
"", "",
"* `<удалённый репозиторий>/<имя ветки>`", "* `<удалённый репозиторий>/<имя ветки>`",
"", "",
"Следовательно, если Вы взглянете на имя ветки `o/master`, то здесь `master` - это имя ветки, а `o` - это имя удалённого репозитория.", "Следовательно, если вы взглянете на имя ветки `o/master`, то здесь `master` - это имя ветки, а `o` - это имя удалённого репозитория.",
"", "",
"Большинство разработчиков именуют свои главные удалённые репозитории не как `o`, а как `origin`. Также общепринятым является именование удалённого репозитория как `origin`, когда Вы клонируете репозиторий командой `git clone`.", "Большинство разработчиков именуют свои главные удалённые репозитории не как `o`, а как `origin`. Также общепринятым является именование удалённого репозитория как `origin`, когда вы клонируете репозиторий командой `git clone`.",
"", "",
"К сожалению, полное имя `origin` не помещается на элементах дизайна наших уроков, поэтому мы используем краткое `o` :( Просто помните, когда Вы пользуетесь git в реальном проекте, Ваш удалённый репозиторий скорее всего будет называться `origin`!", "К сожалению, полное имя `origin` не помещается на элементах дизайна наших уроков, поэтому мы используем краткое `o` :( Просто помните, когда вы пользуетесь git в реальном проекте, ваш удалённый репозиторий скорее всего будет называться `origin`!",
"", "",
"Давайте посмотрим на всё это в действии." "Давайте посмотрим на всё это в действии."
] ]
@ -562,7 +562,7 @@ exports.level = {
"Давайте извлечём (check out) удалённую ветку и посмотрим что произойдёт" "Давайте извлечём (check out) удалённую ветку и посмотрим что произойдёт"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Как Вы можете видеть, git отделил (detached) `HEAD` и не обновил `o/master`, когда мы добавили новый коммит. Всё потому, что `o/master` обновится тогда и только тогда, когда обновится сам удалённый репозиторий." "Как вы можете видеть, git отделил (detached) `HEAD` и не обновил `o/master`, когда мы добавили новый коммит. Всё потому, что `o/master` обновится тогда и только тогда, когда обновится сам удалённый репозиторий."
], ],
"command": "git checkout o/master; git commit", "command": "git checkout o/master; git commit",
"beforeCommand": "git clone" "beforeCommand": "git clone"
@ -572,7 +572,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Для завершения уровня, выполните коммит единожды на `master`, а затем на `o/master` (предварительно переключившись на эту ветку). Это наглядно продемонстрирует поведение удалённых веток, а также покажет, как изменения влияют на состояние удалённых репозиториев." "Для завершения уровня выполните коммит единожды на `master`, а затем на `o/master` (предварительно переключившись на эту ветку). Это наглядно продемонстрирует поведение удалённых веток, а также покажет, как изменения влияют на состояние удалённых репозиториев."
] ]
} }
} }

View file

@ -854,10 +854,10 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Удалённые-отслеживаемые ветки", "### Удалённые-отслеживаемые ветки",
"", "",
"Единственное, что могло бы показаться Вам \"магией\" в нескольких предыдущих уроках - это то, как git знает, что ветка `master` соответствует `o/master`. Конечно, эти ветки имеют схожие имена и связь между локальной и удалённой ветками `master` выглядит вполне логично, однако, эта связь наглядно продемонстрирована в двух сценариях:", "Единственное, что могло бы показаться вам \"магией\" в нескольких предыдущих уроках - это то, как git знает, что ветка `master` соответствует `o/master`. Конечно, эти ветки имеют схожие имена и связь между локальной и удалённой ветками `master` выглядит вполне логично, однако, эта связь наглядно продемонстрирована в двух сценариях:",
"", "",
"* Вовремя операции pull, коммиты скачиваются в ветку `o/master` и затем *соединяются* в ветку `master`. Подразумеваемая цель слияния определяется исходя из этой связи.", "* Во время операции pull коммиты скачиваются в ветку `o/master` и затем *соединяются* в ветку `master`. Подразумеваемая цель слияния определяется исходя из этой связи.",
"* Вовремя операции push, наработки из ветки `master` закачиваются на удалённую ветку `master` (которая в локальном представлении выглядит как `o/master`). *Пункт назначения* операции push определяется исходя из связи между `master` и `o/master`.", "* Во время операции push наработки из ветки `master` закачиваются на удалённую ветку `master` (которая в локальном представлении выглядит как `o/master`). *Пункт назначения* операции push определяется исходя из связи между `master` и `o/master`.",
"" ""
] ]
} }
@ -870,13 +870,13 @@ exports.level = {
"", "",
"Короче, связь между `master` и `o/master` объясняется не иначе как свойство \"удалённое отслеживание\" веток. Ветка `master` настроена так, чтобы следить за `o/master` -- это подразумевает наличие источника для merge и пункта назначения для push в контексте ветки `master`.", "Короче, связь между `master` и `o/master` объясняется не иначе как свойство \"удалённое отслеживание\" веток. Ветка `master` настроена так, чтобы следить за `o/master` -- это подразумевает наличие источника для merge и пункта назначения для push в контексте ветки `master`.",
"", "",
"Вы должно быть удивлены, как это отслеживание появилось на ветке `master`, если мы не запускали ни одной специфической команды. На самом деле, когда Вы клонируете репозиторий это слежение включается автоматически.", "Вы, должно быть, удивлены, как это отслеживание появилось на ветке `master`, если мы не запускали ни одной специфической команды. На самом деле, когда вы клонируете репозиторий, это слежение включается автоматически.",
"", "",
"В процессе клонирования, git локально создаёт удалённые ветки для каждой ветки с удалённого репозитория (такие как `o/master`). Затем он - git - создаёт локальные ветки, которые отслеживают текущую, активную ветку на удалённом репозитории. В большинстве случаев - это `master`.", "В процессе клонирования git локально создаёт удалённые ветки для каждой ветки с удалённого репозитория (такие как `o/master`). Затем он - git - создаёт локальные ветки, которые отслеживают текущую, активную ветку на удалённом репозитории. В большинстве случаев - это `master`.",
"", "",
"К тому моменту как git clone завершит своё выполнение, у Вас будет лишь одна локальная ветка (так что вы ещё не сильно перегружены), но, если Вам будет интересно, Вы сможете увидеть все удалённые ветки (при желании).", "К тому моменту как `git clone` завершит своё выполнение, у вас будет лишь одна локальная ветка (так что вы ещё не сильно перегружены), но, если вам будет интересно, вы сможете увидеть все удалённые ветки (при желании).",
"", "",
"Именно это объясняет, почему сразу после клонирования Вы видите в консоли надпись:", "Именно это объясняет, почему сразу после клонирования вы видите в консоли надпись:",
"", "",
" local branch \"master\" set to track remote branch \"o/master\"", " local branch \"master\" set to track remote branch \"o/master\"",
"", "",
@ -890,7 +890,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"### А могу ли я сделать это самостоятельно?", "### А могу ли я сделать это самостоятельно?",
"", "",
"Само собой! Вы можете сказать любой из веток, чтобы она отслеживала `o/master`, и если Вы так сделаете, эта ветка будет иметь такой же пункт назначения для push и merge как и локальная ветка `master`. Это значит, что Вы можете выполнить `git push`, находясь на ветке `totallyNotMaster`, и все Ваши наработки с ветки `totallyNotMaster` будут закачены на ветку `master` удалённого репозитория!", "Само собой! Вы можете сказать любой из веток, чтобы она отслеживала `o/master`, и если вы так сделаете, эта ветка будет иметь такой же пункт назначения для push и merge как и локальная ветка `master`. Это значит, что вы можете выполнить `git push`, находясь на ветке `totallyNotMaster`, и все ваши наработки с ветки `totallyNotMaster` будут закачены на ветку `master` удалённого репозитория!",
"", "",
"Есть два способа сделать это. Первый - это выполнить checkout для новой ветки, указав удалённую ветку в качестве ссылки. Для этого необходимо выполнить команду", "Есть два способа сделать это. Первый - это выполнить checkout для новой ветки, указав удалённую ветку в качестве ссылки. Для этого необходимо выполнить команду",
"", "",
@ -907,7 +907,7 @@ exports.level = {
"Хватит болтовни, давайте взглянем на демонстрацию! Мы выполним checkout для новой ветки `foo` и укажем ей, чтобы она отслеживала `master` с удалённого репозитория." "Хватит болтовни, давайте взглянем на демонстрацию! Мы выполним checkout для новой ветки `foo` и укажем ей, чтобы она отслеживала `master` с удалённого репозитория."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Как вы увидели, мы использовали `o/master` чтобы обновить ветку `foo`. Обратите внимание, как обновился master!!" "Как вы увидели, мы использовали `o/master`, чтобы обновить ветку `foo`. Обратите внимание, как обновился `master`!!"
], ],
"command": "git checkout -b foo o/master; git pull", "command": "git checkout -b foo o/master; git pull",
"beforeCommand": "git clone; git fakeTeamwork" "beforeCommand": "git clone; git fakeTeamwork"
@ -932,11 +932,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Способ №2", "### Способ №2",
"", "",
"Другой способ указать ветке отслеживать удалённую ветку, это просто использовать команду `git branch -u`. Выполнив команду, ", "Другой способ указать ветке отслеживать удалённую ветку это просто использовать команду `git branch -u`. Выполнив команду",
"", "",
"`git branch -u o/master foo`", "`git branch -u o/master foo`",
"", "",
"Вы укажите ветке `foo` следить за `o/master`. А если Вы ещё при этом находитесь на ветке `foo`, то её можно не указывать команде:", "вы укажете ветке `foo` следить за `o/master`. А если вы ещё при этом находитесь на ветке `foo`, то её можно не указывать:",
"", "",
"`git branch -u o/master`", "`git branch -u o/master`",
"" ""
@ -960,7 +960,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Отлично! Для выполнения этого уровня давайте выполним push наших наработок в ветку `master` на удалённом репозитории при этом *не* скачивая и не создавая ветку `master` локально. Я объясню Вам оставшееся чуть позже, т.к. это продвинутый курс :P" "Отлично! Для выполнения этого уровня давайте выполним push наших наработок в ветку `master` на удалённом репозитории, при этом *не* скачивая и не создавая ветку `master` локально. Я объясню вам оставшееся чуть позже, т.к. это продвинутый курс :P"
] ]
} }
} }