Почему Git такой сложный

Почему Git такой сложный

16 ноября 2022 г.

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

Почему так должно быть?

Интерфейс командной строки — CLI

Большинство обычных пользователей компьютеров не привыкли к роскоши текстовых интерфейсов. Я называю это роскошью, потому что, как я писал ранее, есть несколько больших преимуществ. к этому, хотя может потребоваться некоторое время, чтобы привыкнуть к пользовательскому интерфейсу. Итак, если ваши ассоциации совпадают с ассоциациями в списке:

  • кошка — пушистое животное,
  • cd — как люди слушали музыку и
  • grep — звукоподражания,

тогда, скорее всего, ваш первый опыт работы с Git будет сопряжен с дополнительными трудностями при изучении основ командной строки. Что-то, что Windows 95 и ему подобные забрали у вас.

Цели разработки Git

Git никогда не был простым. Он создавался с разными целями: и более важными, и более сложными.

Надежное хранение сохраненных данных

Git предназначен для того, чтобы всегда возвращать вам данные точно в том виде, в каком они были сохранены, ИЛИ сообщать вам, что репозиторий поврежден. И он отлично справляется с этим — вы можете быть уверены, что состояние, которое вы получаете при проверке коммита, точно такое, каким его задумал автор. Конечно, это предполагает, что они знали, что делают.

Как Git обеспечивает такую ​​надежную защиту данных? Он делает это умным способом: сохраняет все — коммиты, папки и файлы. Каждый объект идентифицируется криптографическим хешем его содержимого — числом, генерируемым на основе содержимого объекта, которое изменится, если что-либо изменится внутри файлов. Поскольку ссылки между объектами также хешируются, почти невозможно вмешаться в репозиторий, чтобы Git не заметил, что что-то не так. И даже в этих случаях осмысленный код будет заменен длинной текстовой тарабарщиной.

Работа в незащищенных сетях с недоверенными участниками

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

Для дополнительного уровня безопасности Git предлагает регистрацию коммитов — дополнительный способ убедиться, что коммит создан человеком, который назначен его автором.

Поддержание обратной совместимости

Интерфейс Git сложнее, чем должен быть, потому что он уважает старые привычки своих пользователей. Я изучил Git в 2011 году и до прошлой недели не замечал новой команды git switch, которая рекомендуется для смены веток. То, как я это делал (git checkout + различные флаги), по-прежнему работает нормально. Git отдает предпочтение старшим пользователям и их привычкам, а не простоте для новых пользователей, что подводит нас к следующему пункту.

Удобство для суперпользователей

Git – это инструмент, созданный специально для суперпользователей. Он был написан Линусом Торвальдсом для управления кодовой базой Linux — задача не для новичков. Основные пользователи Git разрабатывают операционные системы, имеют многолетний опыт программирования и живут внутри командной строки. Все другие варианты использования случайны и не являются главной заботой людей, разрабатывающих Git.

Компромиссы простоты

При разработке систем ничто не бывает бесплатным, включая простоту для пользователей.

Скрытие сложности

Когда вы имеете дело с проблемой, которая по своей сути сложна, вы упрощаете решение, абстрагируя сложность. Это прошло? Нет, это просто скрыто от пользователя. Например, в случае с интернет-соединением я и большинство людей понимаю качество соединения только как количество полосок на 📶:

  • меньше — плохо
  • чем больше, тем лучше

Этого достаточно для использования Интернета, но это затрудняет понимание и устранение любых проблем с подключением.

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

Простой и безопасный

Еще одна часть Git, которая сбивает пользователей с толку, — это очень длинные идентификаторы коммитов, а также невозможность запомнить числа. Даже в удобной для пользователя сокращенной форме они выглядят как 0828ae1. И полный идентификатор: 0828ae10b20500fbc777cc40aa88feefd123ea5e. Можем ли мы вместо этого использовать только номера по порядку или использовать только имена ветвей? Проблема в том, что идентификаторы коммитов — это хэши, которые гарантируют целостность данных — они гарантируют, что коммит X на моей машине совпадает с коммитом X на удаленной или вашей машине. А несовпадения между ними могут появляться по разным причинам:

  • преднамеренные — перебазирование, исправление, сжатие или любые другие операции, изменяющие историю.
  • непреднамеренный — ошибка или атака на кодовую базу

Упрощение интерфейса и скрытие формы идентификатора фиксации лишило бы пользователя возможности понять, что происходит с кодовой базой, которую он запускает на своем компьютере. А поскольку код по определению запускается на компьютере, любая уязвимость безопасности будет чрезвычайно опасной.

Правильный ли это подход?

Когда я изучал Git, это было еще в новинку: я изучал его в 2011 году, а Git был создан в 2005 году (первая фиксация взята из Чт, 7 апреля 15:13:13 2005 -07:00). В то время я использовал SVN на работе и Mercurial часто рассматривался как более удобная альтернатива Git. Вы слышали эти имена в последнее время? Git почти полностью доминировал на рынке контроля версий. Он приобрел большую популярность с появлением GitHub, но даже если это сложно для новичков, это очень эффективный инструмент, и он никуда не денется.

Что делать начинающему программисту?

Мой совет: выучите его как можно раньше. Маловероятно, что Git скоро станет проще. Или когда-либо. Системы контроля версий в целом избавляют от головной боли при программировании. Я не могу представить себе эффективную работу с кодом, если вы изо всех сил пытаетесь перемещать версии своей кодовой базы. Хорошее изучение Git поможет вам сосредоточиться на проблемах с кодом, а не бороться с потерянными файлами или исправлять так называемые «проблемы с Git», которые почти всегда связаны с тем, что люди сами портят свой репозиторий.

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

Как узнать больше?

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

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE