Главная страница
Навигация по странице:

  • 2 Базовые операции 3

  • 3 Все о клонировании 8

  • 4 Чудеса ветвления

  • 5 Уроки истории 16

  • 6 Групповая работа в Git 21

  • 7 Гроссмейстерство Git 26

  • 8 Раскрываем тайны 32

  • 9 Недостатки Git 37

  • 10 Приложение А: Перевод этого руководства 41 Магия Git viВведение

  • Глава 1 Предисловие

  • Глава 2 Базовые операции

  • 2.1 Сохранение состояния

  • 2.1.1 Добавление, удаление, переименование Приведенный выше пример будет отслеживать файлы, которые вы добавили, когда впервые запу- стили git add

  • Магия Git Магия Git iicollaborators


    Скачать 309.22 Kb.
    НазваниеМагия Git Магия Git iicollaborators
    Дата11.06.2022
    Размер309.22 Kb.
    Формат файлаpdf
    Имя файлаGit magic.pdf
    ТипДокументы
    #585642
    страница1 из 4
      1   2   3   4


    Магия Git i
    Магия Git

    Магия Git ii
    COLLABORATORS
    TITLE :
    Магия Git
    ACTION
    NAME
    DATE
    SIGNATURE
    WRITTEN BY
    Ben Lynn
    Август 2007
    REVISION HISTORY
    NUMBER
    DATE
    DESCRIPTION
    NAME
    Август 2007
    BL

    Магия Git iii
    Оглавление
    1 Предисловие
    1
    1.1 Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    1 1.2 Лицензия
    2
    2 Базовые операции
    3
    2.1 Сохранение состояния . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    3 2.1.1 Добавление, удаление, переименование . . . . . . . . . . . . . . . . . . . . . . . . .
    3 2.2 Расширенная отмена/Восстановление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    4 2.2.1 Возвраты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    5 2.3 Создание списка изменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    5 2.4 Скачивание файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    5 2.5 На острие ножа
    5 2.6 Публичный доступ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    5 2.7 Что я наделал? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    6 2.8 Упражнение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    7
    3 Все о клонировании
    8
    3.1 Синхронизация компьютеров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    8 3.2 Классический контроль исходного кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    8 3.3 Создание форка проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    9 3.4 Окончательные бэкапы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    9 3.5 Многозадачность со скоростью света . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    10 3.6 Другие системы контроля версий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    10
    4 Чудеса ветвления
    11
    4.1 Кнопка босса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    11 4.2 Грязная работа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    12 4.3 Быстрые исправления . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    13 4.4 Бесперебойный рабочий процесс . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    13 4.5 Собрать все в кучу . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    14 4.6 Управление Ветками . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    14 4.7 Временные Ветки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    15 4.8 Работайте как вам нравится
    15

    Магия Git iv
    5 Уроки истории
    16
    5.1 Оставаясь корректным . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    16 5.2 …И кое-что еще . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    16 5.3 Локальные изменения сохраняются . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    17 5.4 Переписывая историю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    17 5.5 Создавая Историю . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    18 5.6 Когда же все пошло не так? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    19 5.7 Из-за кого все пошло наперекосяк? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    20 5.8 Личный опыт . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    20
    6 Групповая работа в Git
    21
    6.1 Кто я? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    21 6.2 Git через SSH, HTTP
    21 6.3 Git через что угодно . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    22 6.4 Патчи: Общее применения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    23 6.5 К сожалению, мы переехали . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    23 6.6 Удаленные Ветки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    24 6.7 Несколько Удаленных Веток . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    25 6.8 Мои Настройки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    25
    7 Гроссмейстерство Git
    26
    7.1 Релизы исходников . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    26 7.2 Сохранение изменений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    26 7.3 Слишком большой коммит
    27 7.3.1 Этапные изменения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    27 7.4 Не теряй HEAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    27 7.5 Охота за HEAD'ами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    28 7.6 Git как основа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    29 7.7 Опасные трюки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    29 7.8 Улучшаем свой публичный образ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    30
    8 Раскрываем тайны
    32
    8.1 Невидимость . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    32 8.2 Целостность . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    32 8.3 Интеллект . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    33 8.4 Индексация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    33 8.5 Голые репозитории . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    33 8.6 Происхождение Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    33 8.7 База данных объектов
    33 8.7.1 Blobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    34 8.7.2 Деревья . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    34 8.7.3 Коммиты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    35 8.7.4 Неотличимо от магии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    36

    Магия Git v
    9 Недостатки Git
    37
    9.1 Недостатки SHA1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    37 9.2 Microsoft Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    37 9.3 Несвязанные файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    37 9.4 Кто и что редактировал ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    38 9.5 История файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    38 9.6 Начальное Клонирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    38 9.7 Изменчивые Проекты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    38 9.8 Глобальный счетчик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    39 9.9 Пустые подкаталоги
    39 9.10Первоначальный коммит
    39
    10 Приложение А: Перевод этого руководства
    41

    Магия Git vi
    Введение
    Я буду использовать аналогии, чтобы объяснить, что такое контроль версий. Если вам нужно более точное объяснение, обратитесь к статье википедии
    Работа - это игра
    Я играл в компьютерные игры почти всю свою жизнь. А вот использовать системы контроля версий я начал уже будучи взрослым. Подозреваю, что я не один такой, и сравнение этих двух занятий может помочь объяснению и пониманию их концепций.
    Представьте, что редактирование кода, документа или чего-либо еще — игра. Далеко продвинув- шись, вы захотите сохраниться. Чтобы сделать это, вы нажмете на кнопку "Сохранить" в вашем любимом редакторе.
    Но это перезапишет старую версию. Это как в древних играх, где был только один слот для со- хранения: вы можете сохраниться, но вы никогда не сможете вернуться к прежнему состоянию.
    Что досадно, так как одно из прежних сохранений может указывать на одно из очень интерес- ных мест в игре, и, может быть, однажды вы захотите вернуться к нему. Или, что еще хуже, вы сейчас находитесь в безвыигрышном состоянии и вынуждены начинать заново.
    Контроль версий
    Во время редактирования вы можете "Сохранить как …" в другой файл, или скопировать файл куда-нибудь перед сохранением, чтобы уберечь более старые версии. Может быть и заархивиро- вав их для сохранения места на диске. Это самый примитивный вид контроля версий, к тому же требующий интенсивной ручной работы. Компьютерные игры прошли этот этап давным-давно,
    в большинстве из них есть множество слотов для сохранения с автоматическими временными метками.
    Давайте усложним условия. Пусть у вас есть несколько файлов, используемых вместе, например,
    исходный код проекта или файлы для вебсайта. Теперь, чтобы сохранить старую версию, вы должны скопировать весь каталог. Поддерживать множество таких версий вручную неудобно, и быстро становится дорогим удовольствием.
    В некоторых играх сохранение — это и есть каталог с кучей файлов внутри. Эти игры скрывают детали от игрока и предоставляют удобный интерфейс для управления различными версиям этого каталога.
    В системах контроля версий всё точно так же. У них у всех есть приятный интерфейс для управ- ления каталогом, полным-полно всяких данных. Вы можете сохранять состояние каталога так часто, как пожелаете, и вы можете восстановить любую из предыдущих сохраненных версий. Но,
    в отличие от компьютерных игр, они умнее используют дисковое пространство. Обычно только несколько файлов меняется от версии к версии, не более. Сохранение различий, а не всей копии каталога, не так сильно расходует свободное место.

    Магия Git vii
    Распределенный контроль
    А теперь представьте очень сложную компьютерную игру. Её настолько сложно пройти, что множество опытных игроков по всему миру решили объединиться и использовать общие сохра- нения, чтобы попытаться выиграть. Прохождения на скорость — живой пример. Игроки, специ- ализирующиеся на разных уровнях игры, объединяются, чтобы в итоге получить потрясающий результат.
    Как бы вы организовали такую систему, чтобы игроки смогли легко забирать сохранения других?
    А загружать свои?
    Раньше каждый проект использовал централизованную систему контроля версий. Какой-нибудь сервер хранил все сохраненные игры. И никто больше. На машине каждого игрока хранилась только очень маленькая часть. Когда игрок хотел пройти немного дальше, он выкачивал самое последнее сохранение с сервера, играл немного, сохранялся и закачивал уже свое сохранение обратно на сервер, чтобы кто-нибудь другой смог его использовать.
    А что, если игрок по какой-то причине захотел использовать более старую сохраненную игру?
    Возможно, текущая версия сохраненной игры безвыигрышна, потому что кто-то из игроков за- был взять какой-либо игровой предмет на каком-то предыдущем уровне, и они хотят найти по- следнюю сохраненную игру, которая все еще выигрышна. Или, может быть, они хотят сравнить две более старые сохраненные игры, чтобы установить вклад каждого игрока.
    Может быть много причин вернуться к более старой версии, но выход один. Они должны за- просить центральный сервер о той старой сохраненной игре. Чем больше сохраненных игр они захотят, тем больше им понадобится связываться с сервером.
    Новое поколение систем контроля версий, к которым относится Git, известны как распределен- ные системы, их можно понимать как обобщение централизованных систем. Когда игроки загру- жаются с главного сервера, они получают каждую сохраненную игру, а не только последнюю.
    Это как если они зеркалируют центральный сервер.
    Эти первоначальные операции клонирования могут быть интенсивными, особенно если при- сутствует длинная история разработки, но это сполна окупается при длительной работе. Од- на немедленная выгода состоит в том, что если по какой-то причине потребуется более старая версия, дополнительное обращение к серверу не понадобится.
    Глупые предрассудки
    Широко распространенное заблуждение состоит в том, что распределенные системы непригод- ны для проектов, требующих официального централизованного репозитория. Ничто не может быть более далеким от истины. Получение фотоснимка не приводит к тому, что мы крадем чью- то душу. Проще говоря, клонирование главного репозитория не уменьшает его важность.
    В первом приближении можно сказать, что все, что делает централизованная система контро- ля версий, хорошо сконструированная распределенная система может сделать лучше. Сетевые ресурсы просто дороже локальных. Хотя дальше мы увидим, что в распределенном подходе есть свои недостатки, менее вероятно провести ложные аналогии руководствуясь этим приближен- ным правилом.
    Небольшому проекту может понадобиться лишь часть функций, предлагаемых такой системой.
    Но будете ли вы использовать римские цифры в расчетах с небольшими числами? Более того,
    ваш проект может вырасти за пределы ваших первоначальных ожиданий. Использовать Git с самого начала — это как держать наготове швейцарский армейский нож, даже если вы только открываете им бутылки. Однажды вам безумно понадобится отвертка и вы будете рады, что под рукой у вас нечто большее, чем простая открывалка.

    Магия Git viii
    Конфликты при слиянии
    Для этой темы аналогия с компьютерной игрой становится слишком натянутой. Вместо этого,
    давайте вернемся к редактированию документа.
    Итак, допустим, что Алиса вставила строчку в начале файла, а Боб — в конец. Оба они закачи- вают свои изменения. Большинство систем автоматически сделает разумный вывод: принять и объединить их изменения так, чтобы обе правки — и Алисы, и Боба — были применены.
    Теперь предположим, что и Алиса, и Боб независимо друг от друга сделали изменения в од- ной и той же строке. Тогда становится невозможным разрешить конфликт без человеческого вмешательства. Тот, кто вторым из них закачает на сервер изменения, будет информирован о конфликте слияния, и должен либо выбрать, чье изменение перекроет другое, либо заново от- редактировать строку целиком.
    Могут случаться и более сложные ситуации. Системы контроля версий разрешают простые ситу- ации сами, и оставляют сложные для человека. Обычно такое их поведение поддается настрой- ке.

    Магия Git
    1 / 41
    Глава 1
    Предисловие
    Git это Швейцарский армейский нож контроля версий. Надежный универсальный многоцелевой инструмент контроля версий, чья черезвычайная гибкость делает его сложным в изучении даже для многих профессионалов.
    Как говорил Артур Кларк - любая достаточно развитая технология неотличима от магии. Это отличный способ подхода Git: новички могут игнорировать принципы его внутренней работы и рассматривать Git как гизмо, который может поражать друзей и приводить в бешенство врагов своими чудесными способностями.
    Вместо того, чтобы вдаваться в подробности, мы предоставляем грубую инструкцию для кон- кретных действий. После частого использования вы постепенно поймете как работает каждый трюк и как адаптировать рецепты для ваших нужд.
    Переводчики

    Китайский (упрощенный)
    : JunJie, Meng и JiangWei. Хостинг - Google Docs.

    Испанский
    : Rodrigo Toledo.
    Другие Издания

    HTML одной страницей
    : один HTML без CSS.

    PDF файл
    : для печати.

    Пакет Debian
    : получите локальную копию этого сайта.
    Пакет Ubuntu (Jaunty Jackalope)
    . Также доступен когда этот сервер недоступен для сопровождающих
    1.1 Благодарности
    Благодарю Dustin Sallings, Alberto Bertogli, James Cameron, Douglas Livingstone, Michael Budde,
    Richard Albury, Tarmigan, Derek Mahar и Frode Aannevik за внесенные предложения и улучшения.
    Спасибо Daniel Baumann за создание и сопровождение пакета для Debian. Также благодарен
    JunJie, Meng и JiangWei за перевод на китайский, и Rodrigo Toledo за перевод на испанский.
    [Если я забыл про вас, пожалуйста, сообщите мне, поскольку я часто забывают обновлять этот раздел.]
    Мои благодарности остальным за вашу поддержку и похвалу. Если бы это была реальная физи- ческая книга, я смог бы разместить Ваши щедрые отзывы о ней на обложке, чтобы прореклами- ровать ее! Серьезно, я высоко ценю каждое ваше сообщение. Чтение их всегда поднимает мне настроение.
    Бесплатные хостинги Git

    Магия Git
    2 / 41

    http://repo.or.cz/
    хостинг свободных проектов. Первый сайт Git-хостинга. Основан и поддержи- вается одним из первых разработчиков Git.

    http://gitorious.org/
    другой сайт Git-хостинга, направленный на проекты с открытым кодом.

    http://github.com/
    хостинг проектов с открытым кодом, и закрытых проектов на платной основе.
    Большое спасибо каждому из этих участков для размещения данного руководства.
    1.2 Лицензия
    Это руководство выпущено под
    GNU General Public License version 3
    . Естественно, что источник находится в репозитории Git, и можно получить, набрав:
    $ git clone git://repo.or.cz/gitmagic.git
    # Создает каталог "gitmagic".
    или с одного из зеркал:
    $ git clone git://github.com/blynn/gitmagic.git
    $ git clone git://gitorious.org/gitmagic/mainline.git

    Магия Git
    3 / 41
    Глава 2
    Базовые операции
    Прежде чем погружаться в дебри многочисленных команд Git, попробуйте воспользоваться при- ведёнными ниже простыми примерами, чтобы немного освоиться. Несмотря на свою простоту,
    каждый из них является полезным.
    В самом деле, первые месяцы использования Git я не выходил за рамки материала, изложенного в этой главе.
    2.1 Сохранение состояния
    Выполняете опасную операцию? Прежде чем сделать это, создайте снимок всех файлов в теку- щей директории с помощью команд:
    $ git init
    $ git add .
    $ git commit -m "Мой первый бекап"
    Теперь, если ваши новые правки всё испортили, запустите:
    $ git reset --hard чтобы вернуться к исходному состоянию. Чтобы вновь сохраниться, выполните:
    $ git commit -a -m "Другой бекап"
    2.1.1 Добавление, удаление, переименование
    Приведенный выше пример будет отслеживать файлы, которые вы добавили, когда впервые запу- стили git add. Если вы хотите добавить новые файлы или поддиректории, вам придётся сказать
    Git:
    $ git add НОВЫЕ_ФАЙЛЫ...
    Аналогично, если вы хотите, чтобы Git забыл о некоторых файлах, например, потому что вы удалили их:
    $ git rm СТАРЫЕ_ФАЙЛЫ...
    Переименование файла — это то же, что и удаление старого имени и добавления нового. Для этого есть git mv, который имеет тот же синтаксис, что и команда mv. Например:
    $ git mv OLDFILE NEWFILE

    Магия Git
    4 / 41
    2.2 Расширенная отмена/Восстановление
    Иногда вы просто хотите вернуться к определенной точке и забыть все изменения, потому что все они были неправильными. В таком случае:
    $ git log покажет вам список последних изменений (коммитов, прим. пер.) и их SHA1 хеши. Далее введи- те:
    $ git reset --hard SHA1_HASH
    для восстановления состояния до указанного коммита и удаления всех последующих коммитов безвозвратно.
    Возможно, в другой раз вы захотите быстро вернуться к старому состоянию. В этом случае на- берите:
    $ git checkout SHA1_HASH
    Это перенесет вас назад во времени, до тех пор пока вы не сделаете новые коммиты. Как и в фантастических фильмах о путешествиях во времени, если вы редактируете и коммитите код,
    вы будете находиться в альтернативной реальности, потому что ваши действия отличаются от тех, что вы делали до этого.
    Эта альтернативная реальность называется «ветвь» (branch, прим. пер.), и чуть позже мы пого- ворим об этом
    . А сейчас просто запомните:
    $ git checkout master вернёт вас обратно в настоящее. Кроме того, чтобы не получать предупреждений от Git, всегда делайте коммит или сброс ваших изменений до запуска checkout.
    Ещё раз воспользуемся терминологией компьютерных игр:
    git reset --hard: загружает ранее сохраненную игру и удаляет все версии, сохраненные после только что загруженной.
    git checkout: загружает старую игру, но если вы продолжаете играть, состояние игры бу- дет отличаться от более новых сохранений, которые вы сделали в первый раз. Любая игра,
    которую вы теперь сохраняете, попадает в отдельную ветвь, представляющую альтенативную реальность, в которую вы вошли.
    Как мы договорились
    Вы можете выбрать для восстановления только определенные файлы и поддиректории путём перечисления их имён после команды:
    $ git checkout SHA1_HASH some.file another.file
    Будьте внимательны: такая форма checkout может незаметно перезаписать файлы. Чтобы избе- жать неприятных неожиданностей, выполняйте коммит до запуска checkout, особенно если вы только осваиваетесь с Git. Вообще, если вы не уверены в какой-либо операции, будь то команда
    Git или нет, сперва выполните git commit -a.
    Не любите копировать и вставлять хеши? Используйте:
    $ git checkout :/"Мой первый б"
    для перехода на коммит, который начинается с приведенной строки.
    Можно также запросить 5-ое с конца сохраненное состояние:
    $ git checkout master

    5

    Магия Git
    5 / 41
    2.2.1 Возвраты
    В зале суда в протокол могут вноситься изменения прямо во время слушания. Подобным образом и вы можете выбирать коммиты для возврата.
    $ git commit -a
    $ git revert SHA1_HASH
    отменит коммит с выбранным хешем. Запущенный git log показывает, что изменение записано в качестве нового коммита.
    2.3 Создание списка изменений
    Некоторым проектам требуется список изменений
    (changelog, прим. пер.). Создать такой список вы можете, просто направив вывод git log в файл:
    $ git log > ChangeLog
    2.4 Скачивание файлов
    Получить копию проекта под управлением Git можно, набрав:
    $ git clone git://server/path/to/files
    Например, чтобы получить все файлы, я создавал такой сайт:
    $ git clone git://git.or.cz/gitmagic.git
    Мы поговорим больше о команде clone позже.
    2.5 На острие ножа
    Если вы уже загрузили копию проекта с помощью git clone, вы можете обновить его до послед- ней версии, используя:
    $ git pull
    2.6 Публичный доступ
    Предположим, вы написали скрипт, которым хотите поделиться с другими. Можно просто поз- волить всем загружать его с вашего компьютера, но, если они будут делать это в то время, как вы дорабатываете его или добавляете экспериментальную функциональность, у них могут возник- нуть проблемы. Конечно, это одна из причин существования цикла разработки. Разработчики могут долго работать над проектом, но открывать доступ к коду следует только после того, как код приведен в приличный вид.
    Чтобы сделать это с помощью Git, выполните в директории, где лежит ваш скрипт:

    Магия Git
    6 / 41
    $ git init
    $ git add .
    $ git commit -m "Первый релиз"
    Затем скажите вашим пользователям запустить:
    $ git clone ваш.компьютер:/path/to/script для того чтобы загрузить ваш скрипт. Это подразумевает что у вас есть доступ по ssh. Если нет,
    запустите git daemon и скажите остальным использовать для запуска:
    $ git clone git://ваш.компьютер/path/to/script
    Теперь, всякий раз когда ваш скрипт готов к релизу, выполняйте:
    $ git commit -a -m "Следующий релиз"
    и ваши пользователи смогут обновить свои версии, перейдя в директорию, содержащую ваш скрипт, и, набрав:
    $ git pull ваши пользователи никогда не попадут на версии скрипта, доступ к которым вы скрываете. Без- условно, этот трюк работает для всего, а не только в случаях со скриптами.
    2.7 Что я наделал?
    Выясните, какие изменения вы сделали со времени последнего коммита:
    $ git diff
    Или со вчерашнего дня:
    $ git diff "@{yesterday}"
    Или между определенной версией и версией, сделанной 2 коммита назад:
    $ git diff SHA1_HASH "master2"
    В каждом случае на выходе будет патч, который может быть применён с помощью git apply.
    Попробуйте также:
    $ git whatchanged --since="2 weeks ago"
    Часто я смотрю историю при помощи qgit вместо стандартного способа, из-за приятного интер- фейса, или с помощью tig с текстовым интерфейсом, который хорошо работает при медленном соединении. В качестве альтернативы, можно запустить веб-сервер, введя git instaweb, и запу- стить любой веб-браузер.

    Магия Git
    7 / 41
    2.8 Упражнение
    Пусть A, B, C, D четыре успешных коммита, где В — то же, что и A, но с несколькими удаленными файлами. Мы хотим вернуть файлы в D, но не в B. Как это можно сделать?
    Существует как минимум три решения. Предположим, что мы находимся на D.
    1. Разница между A и B — удаление файлов. Мы можем создать патч, отражающий эти изме- нения, и применить его:
    $ git diff B A | git apply
    2. Поскольку в коммите A мы сохранили файлы, мы можем получить их обратно:
    $ git checkout A FILES...
    3. Мы можем рассматривать переход от A до B в качестве изменений, которые мы хотим от- менить:
    $ git revert B
    Какой способ лучший? Тот, который вам больше нравится. С Git легко сделать все, что вы хотите,
    причём часто существует много разных способов сделать одно и то-же.

    Магия Git
    8 / 41
      1   2   3   4


    написать администратору сайта