From a754d98530cb5e2e90333400b203a05cf028631e Mon Sep 17 00:00:00 2001 From: Tikhon Tarnavsky Date: Sat, 10 Jul 2010 20:30:16 +0300 Subject: [PATCH] ru/intro edited --- ru/intro.txt | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/ru/intro.txt b/ru/intro.txt index d68199e..e9c90a2 100644 --- a/ru/intro.txt +++ b/ru/intro.txt @@ -18,38 +18,40 @@ В некоторых играх сохранение — это и есть каталог с кучей файлов внутри. Эти игры скрывают детали от игрока и предоставляют удобный интерфейс для управления различными версиям этого каталога. -В системах управления версиями всё точно так же. У них у всех есть приятный интерфейс для управления каталогом с вашим скарбом. Вы можете сохранять состояние каталога так часто, как пожелаете, а затем восстановить любую из предыдущих сохраненных версий. Но, в отличие от компьютерных игр, они существенно экономят дисковое пространство. Обычно только несколько файлов меняется от версии к версии, не более. Хранение лишь различий вместо всей копии каталога требует меньше места. +В системах управления версиями всё точно так же. У них у всех есть приятный интерфейс для управления каталогом с вашим скарбом. Вы можете сохранять состояние каталога так часто, как пожелаете, а затем восстановить любую из предыдущих сохранённых версий. Но, в отличие от компьютерных игр, они существенно экономят дисковое пространство. Обычно от версии к версии изменяется только несколько файлов, и то ненамного. Хранение лишь различий вместо полный копий требует меньше места. -=== Распределенное управление === +=== Распределённое управление === А теперь представьте очень сложную компьютерную игру. Её настолько сложно пройти, что множество опытных игроков по всему миру решили объединиться и использовать общие сохранения, чтобы попытаться выиграть. Прохождения на скорость — живой пример. Игроки, специализирующиеся на разных уровнях игры, объединяются, чтобы в итоге получить потрясающий результат. Как бы вы организовали такую систему, чтобы игроки смогли легко получать сохранения других? А загружать свои? -Раньше каждый проект использовал централизованное управление версиями. Какой-нибудь сервер хранил все сохраненные игры. И никто больше. На машине каждого игрока хранилась только очень маленькая часть. Когда игрок хотел пройти немного дальше, он выкачивал самое последнее сохранение с сервера, играл немного, сохранялся и закачивал уже свое сохранение обратно на сервер, чтобы кто-нибудь другой смог им воспользоваться. +В былые времена каждый проект использовал централизованное управление версиями. Какой-нибудь сервер хранил все сохраненные игры. И никто больше. Каждый держал лишь несколько сохранений на своей машине. Когда игрок хотел пройти немного дальше, он выкачивал самое последнее сохранение с главного сервера, играл немного, сохранялся и закачивал уже свое сохранение обратно на сервер, чтобы остальные могли им воспользоваться. -А что если игрок по какой-то причине захотел использовать более старую сохраненную игру? Возможно, текущая версия сохраненной игры безвыигрышна, потому что кто-то забыл взять некий игровой предмет на каком-то предыдущем уровне, и нужно найти последнюю сохраненную игру, которая все еще выигрышна. Или, может быть, хочется сравнить две более старые сохраненные игры, чтобы установить вклад каждого игрока. +А что если игрок по какой-то причине захотел использовать более старую сохранённую игру? Возможно, нынешнее сохранение безвыигрышно, потому что кто-то забыл взять некий игровой предмет ещё на третьем уровне, и нужно найти последнее сохранение, где игру всё ещё можно закончить. Или, может быть, хочется сравнить две более старые сохранённые игры, чтобы установить вклад конкретного игрока. -Может быть много причин вернуться к более старой версии, но выход один: необходимо запросить центральный сервер о той старой сохраненной игре. Чем больше сохраненных игр требуется, тем больше понадобится связываться с сервером. +Может быть много причин вернуться к более старой версии, но выход один: нужно запросить центральный сервер о той старой сохранённой игре. Чем больше сохранённых игр требуется, тем больше понадобится связываться с сервером. -Новое поколение систем управления версиями, к которым относится Git, известны как распределенные системы, их можно понимать как обобщение централизованных систем. Когда игроки загружаются с главного сервера, они получают каждую сохраненную игру, а не только последнюю. Они как бы зеркалируют центральный сервер. +Системы управления версиями нового поколения, к которым относится Git, известны как распределенные системы, их можно понимать как обобщение централизованных систем. Когда игроки загружаются с главного сервера, они получают каждую сохраненную игру, а не только последнюю. Они как бы зеркалируют центральный сервер. -Эти первоначальные операции клонирования могут быть ресурсоёмкими, особенно если присутствует длинная история разработки, но это сполна окупается при длительной работе. Наиболее очевидная непосредственная выгода состоит в том, что если вам зачем-то потребуется более старая версия, дополнительное обращение к серверу не понадобится. +Эти первоначальные операции клонирования могут быть ресурсоёмкими, особенно при длинной истории, но это сполна окупается при длительной работе. Наиболее очевидная прямая выгода состоит в том, что если вам зачем-то потребуется более старая версия, взаимодействие с сервером не понадобится. === Глупые предрассудки === -Широко распространенное заблуждение состоит в том, что распределенные системы непригодны для проектов, требующих официального централизованного хранилища. Ничто не может быть более далеким от истины. Получение фотоснимка не приводит к тому, что мы крадем чью-то душу. Точно так же клонирование главного хранилища не уменьшает его важность. +Широко распространённое заблуждение состоит в том, что распределенные системы непригодны для проектов, требующих официального централизованного хранилища. Ничто не может быть более далеким от истины. Получение фотоснимка не приводит к тому, что мы крадем чью-то душу. Точно так же клонирование главного хранилища не уменьшает его важность. -В первом приближении можно сказать, что все, что делает централизованная система управления версиями, хорошо сконструированная распределенная система может сделать лучше. Сетевые ресурсы просто дороже локальных. Хотя дальше мы увидим, что в распределенном подходе есть свои недостатки, менее вероятно провести ложные аналогии, руководствуясь этим приближенным правилом. +В первом приближении можно сказать, что все, что делает централизованная система управления версиями, хорошо сконструированная распределённая система может сделать лучше. Сетевые ресурсы просто дороже локальных. Хотя дальше мы увидим, что в распределённом подходе есть свои недостатки, вы вряд ли ошибётесь при сравнении, руководствуясь этим приближённым правилом. -Небольшому проекту может понадобиться лишь часть функций, предлагаемых такой системой. Но использование плохо масштабируемой системы для маленьких проектов подобно использованию римских цифр в расчетах с небольшими числами. Более того, ваш проект может вырасти за пределы ваших первоначальных ожиданий. Использовать Git с самого начала — это как держать наготове швейцарский нож, даже если вы только открываете им бутылки. Однажды вам безумно понадобится отвертка и вы будете рады, что под рукой есть нечто большее, чем простая открывалка. +Небольшому проекту может понадобиться лишь частица функционала, предлагаемого такой системой. Но использование плохо масштабируемой системы для маленьких проектов подобно использованию римских цифр в расчетах с небольшими числами. + +Кроме того, ваш проект может вырасти сверх ваших первоначальных ожиданий. Использовать Git с самого начала — это как держать наготове швейцарский нож, даже если вы всего лишь открываете им бутылки. Однажды вам безумно понадобится отвертка и вы будете рады, что под рукой есть нечто большее, чем простая открывалка. === Конфликты при слиянии === Для этой темы аналогия с компьютерной игрой становится слишком натянутой. Вместо этого, давайте вернемся к редактированию документа. -Итак, допустим, что Алиса вставила строчку в начале файла, а Боб — в конец. Оба они закачивают свои изменения. Большинство систем автоматически сделает разумный вывод: принять и объединить их изменения так, чтобы обе правки — и Алисы, и Боба — были применены. +Итак, допустим, что Алиса вставила строчку в начале файла, а Боб — в конце. Оба они закачивают свои изменения. Большинство систем автоматически сделает разумный вывод: принять и соединить их изменения так, чтобы обе правки — и Алисы, и Боба — были применены. -Теперь предположим, что и Алиса, и Боб независимо друг от друга сделали изменения в одной и той же строке. Тогда становится невозможным разрешить конфликт без человеческого вмешательства. Тот из них, кто вторым закачает на сервер изменения, будет информирован о _конфликте слияния_ (merge conflict), и должен либо выбрать, чье изменение перекроет другое, либо скорректировать всю строку. +Теперь предположим, что и Алиса, и Боб внесли разные изменения в одну и ту же строку. В этом случае невозможно продолжить без человеческого вмешательства. Тот из них, кто вторым закачает на сервер изменения, будет информирован о _конфликте слияния_ (merge conflict), и должен либо предпочесть одно изменение другому, либо скорректировать всю строку. Могут случаться и более сложные ситуации. Системы управления версиями разрешают простые ситуации сами и оставляют сложные для человека. Обычно такое их поведение поддается настройке. -- 2.11.4.GIT