Независимо от выбранного языка или направления разработки, код, который пишет программист, остается обычным текстом записанным в множестве файлов на диске. Эти файлы регулярно добавляются, удаляются и изменяются. Некоторые из них могут содержать сотни строчек кода, а другие тысячи. Файлы в тысячу строк кода, вполне нормальное явление в программировании.

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

  • Как не потерять файлы с исходным кодом?
  • Как защититься от случайных исправлений и удалений?
  • Как отменить изменения, если они оказались некорректными?
  • Как одновременно поддерживать рабочую версию и разработку новой?

Представьте, что ваш проект состоит из сотни файлов и десятков тысяч строк кода. Вы делаете какую-то задачу, в процессе меняете 15 файлов и 300 строк кода и вдруг, становится понятно, что эта задача больше не актуальна. На этом моменте нужно вернуться к состоянию исходного кода, которое было до изменений. И это только один из множества вариантов событий. Другой вариант: в процессе работы над кодом стало понятно, что нужно срочно внести исправление в рабочий проект (сайт). Новую задачу в нерабочем состоянии выкладывать на сайт нельзя, а это значит, что исправление нужно вносить в ту версию кода, которая была до начала реализации новой задачи.

Самый простой вариант решения, указанных выше проблем - копирование директорий. К сожалению, такой подход обладает только недостатками. Перенос изменений из одной директории в другую возможен только полной перезаписью, так как точечные изменения отследить невозможно (только по памяти). Как только папок станет две, вы сразу начнете путаться в них. И все равно этот способ никак не поможет работать над кодом одновременно двум людям.

Совместная разработка отдельная головная боль. Если два программиста работают над задачами, требующими исправления кода в одних и тех же файлах, то как они выполнят эту работу так, чтобы не повредить или перезатереть изменения другого разработчика?

К счастью, эту задачу решили еще в 80-х годах. С тех пор инструментарий сильно развился и стал использоваться повсеместно не только для кода, но и, например, для написания и перевода книг. Решением является контроль версий. Выполняется он с помощью специальных программ, которые умеют отслеживать изменения кода. Вот некоторые из многочисленных возможностей данных систем:

  • Возврат к любой версии кода из прошлого
  • Просмотр истории изменений
  • Совместная работа без боязни потерять данные или затереть чужую работу

В этом курсе мы разберем общие принципы работы подобных программ, научимся работать с Git, а также познакомимся с важнейшим элементом работы с исходным кодом в современном мире - Github.

Сам курс не содержит практики, но предлагает задачки для самостоятельной работы. Он не пытается стать исчерпывающем руководством по git, а представляет собой, скорее, краткий обзор, для общего знакомства с темой и терминологией. Связано это с тем, что по git создано немало интерактивных курсов, написано книг и статей, которые полностью покрывают все необходимые потребности. По ходу повествования в тексте будут встречаться ссылки на дополнительные ресурсы, которые помогут прокачаться в конкретных навыках.

В любом случае, лучший способ познавать системы контроля версий, в частности git, это постоянная практика. Как минимум выполняйте все команды, которые демонстрируются в процессе курса.

Главный источник, помимо документации, для освоения git - книга progit