- PVSM.RU - https://www.pvsm.ru -

Как научить людей использовать Git

По работе приходится участвовать в разных проектах, поэтому я хорошо знаю, как работают все мои коллеги. Помню, что компания начала использовать Git буквально за пару недель до моего прихода. На мониторах разработчиков кругом висели наклейки с напоминанием: сначала add, потом коммит, затем пуш.

Как научить людей использовать Git - 1

Они не знали, зачем. Программистам просто сказали строго следовать инструкции, иначе беда. Но проблемы возникали так часто, что я решила провести семинар по Git.

Идея

Мне нравится составлять карту в голове. Я не говорю «ментальные карты», потому что это хорошо известный тип диаграмм. Речь о неких картинках, структурах или любом графическом представлении в уме. Например, в детстве я учила арифметику, представляя игральные кубики.

Поэтому я подготовила несколько рисунков. Не обязательно их смотреть, чтобы понять текст. Для каждого есть пояснение.

Кроме того, очень важно научить человека терминам. Иначе он не поймёт сообщения от Git. Рисунки — хороший способ.

Распределенная система контроля версий

Как научить людей использовать Git - 2

На рисунке четыре области распределены следующим образом:

  • Среда разработки:
    • Рабочий каталог
    • Промежуточная область (staging) или индекс
    • Локальный репозиторий
  • Сервер:
    • Удалённый репозиторий

Здесь можно объяснить преимущества распределённой системы управления версиями.

Клонирование репозитория

Как научить людей использовать Git - 3

При клонировании данные из удалённого репозитория перемещаются в две области:

  • Рабочий каталог
  • Локальный репозиторий

Внесение изменений в рабочий каталог

Как научить людей использовать Git - 4

В рабочем каталоге два типа файлов:

  • Отслеживаемые: файлы, о которых знает Git.
  • Неотслеживаемые: которые ещё не были добавлены, поэтому Git не знает о них.

Обновление удаленного репозитория

Как научить людей использовать Git - 5

После подготовки изменений в рабочем каталоге их необходимо добавить в промежуточную область (staging area).

Когда там накопился ряд изменений с общей целью, самое время создать в локальном репозитории коммит с сообщением об этой цели.

Если в локальном репозитории есть один или несколько коммитов, готовых к совместному использованию всем остальным миром, они отправляются в удалённый репозиторий.

В этот момент можно говорить о различных состояниях файла в среде разработки: изменённом, промежуточном (staged) и зафиксированном (commited).

Как научить людей использовать Git - 6

Далее вы можете объяснить:

  • как показать изменения файла в рабочем каталоге: git diff
  • как показать изменения файла в промежуточной области: git diff --staged
  • как изменить файл в рабочем каталоге после добавления в промежуточную область
  • и т. д.

Обновление среды разработки

Получение (fetching)

Как научить людей использовать Git - 7

При выполнении git fetch данные из удалённого репозитория перемещаются только в локальный репозиторий.

Вытягивание (pulling)

Как научить людей использовать Git - 8

При выполнении git pull данные из удалённого репозитория перемещаются в две области:

  • В локальный репозиторий: fetch
  • В рабочий каталог: merge

Если важна история коммитов, рассмотрите возможность использования git pull --rebase. Тогда вместо команд fetch + merge выполняются команды fetch + rebase. Ваши локальные коммиты будут воспроизведены, так что вы не увидите в истории коммитов известную форму бриллианта [1].

Как научить людей использовать Git - 9

Дальнейшие действия

Можете добавить в среду разработки ещё одну область, чтобы проще прятать накопленные изменения: грязный рабочий каталог.

Когда люди усвоят эти понятия, вам будет легче объяснить дальнейшее: ветви, историю коммитов, перебазировку и так далее, потому что прочный фундамент уже заложен.

Дружеское напоминание

Я работала с другими системами управления версиями (Visual SourceSafe, TFS и Subversion): по моему скромному опыту, недостаток знаний вредит и со старым инструментом, и с новым. Сосредоточьтесь не только на выборе инструмента, но и на его освоении.

Дальнейшее чтение

Полученные отзывы

Мой друг Марк Виллаграса [3] напомнил, что очень полезно решить задачки Git [4] и делиться с коллегами решением.

Ресурсы из комментариев на Hacker News [5]:

Прочитав комментарии на Reddit [18], я подумала, что более точным названием этой статьи было бы «Идея, как научить людей использовать Git», потому что это только идея, которая появилась в моей голове, когда я сама несколько лет назад изучала Git по книге Pro Git [2]. Статья не является полным руководством, лишь отправная точка. Уверена, что все эти ресурсы будут очень полезны. Спасибо!

И спасибо Стюарту Максвеллу [19], который поделился ссылкой на Hacker News, и u/cryptoz [20], который запостил её на Reddit!

Автор: m1rko

Источник [21]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/git/306028

Ссылки в тексте:

[1] форму бриллианта: https://stackoverflow.com/questions/16666089/whats-the-difference-between-git-merge-and-git-rebase

[2] Книга Pro Git: https://git-scm.com/book/en

[3] Марк Виллаграса: https://twitter.com/marcvege

[4] задачки Git: https://www.slideshare.net/raquelmorenocarmena/git-challenges

[5] комментариев на Hacker News: https://news.ycombinator.com/item?id=18919599

[6] Величайшее изобретение Линуса Торвальдса: http://perl.plover.com/yak/git/

[7] Лекция Линуса Торвальдса о Git: https://www.youtube.com/watch?v=4XpnKHJAok8

[8] Linux.conf.au 2013 — Git для детей от 4 лет: https://www.youtube.com/watch?v=1ffBJ4sVUb4

[9] Git от начала до конца: https://jwiegley.github.io/git-from-the-bottom-up

[10] Git от начала до конца (PDF): http://ftp.newartisans.com/pub/git.from.bottom.up.pdf

[11] Изучаем ветвления Git: https://learngitbranching.js.org/

[12] Правила полётов для git: https://github.com/k88hudson/git-flight-rules

[13] Пакет Emacs: Magit: https://magit.vc/

[14] Как написать хорошее сообщение для коммита: https://chris.beams.io/posts/git-commit/

[15] Станьте гуру git: https://www.atlassian.com/git/tutorials

[16] Погружение в Git: http://gitimmersion.com/

[17] Udacity: как использовать Git и GitHub: https://eu.udacity.com/course/how-to-use-git-and-github--ud775#

[18] комментарии на Reddit: https://www.reddit.com/r/programming/comments/agko6r/how_to_teach_git/

[19] Стюарту Максвеллу: https://stuartm.com/

[20] u/cryptoz: https://www.reddit.com/user/cryptoz

[21] Источник: https://habr.com/ru/post/437000/?utm_campaign=437000