Советы по организации работы c Git

Автор оригинала: Drew DeVault
  • Перевод
  • Tutorial
Как обычно используют git? Пара базовых команд, чтобы «всех синхронизировать». Разочарование от git часто возникает у тех, кто никогда не выходит за пределы этого поверхностного понимания. Однако освоение git наверняка окупится. Сколько времени вы тратите на использование git? Я бы предположил, что на вашем поясе немало инструментов, которые вы используете вдвое реже и потратили вдвое больше времени на изучение.



Если хотите больше узнать о git, предлагаю начать с главы 10 книги Pro Git (это бесплатно!), затем главы 2, 3 и 7. Остальное необязательно. В этой статье мы обсудим, как применить описанные в книге инструменты для дисциплинированной и продуктивной работы в git.

Основы: хорошие описания коммита




Возможно, вы слышали это раньше, но потерпи́те. Как правило, не нужно использовать git commit -m "ваше сообщение здесь". Начните с настройки git для использования любимого редактора: git config --global core.editor vim, затем просто запустите git commit. Откроется редактор, и вы сможете написать в нём своё описание коммита. Первую строку следует ограничить длиной 50 символов и завершить предложением: после применения этот коммит... «исправит рендеринг текста на языках CJK», «добавит поддержку протокола v3», «отрефакторит обработку CRTC» и т. д. Затем добавьте одну пустую строку и переходите к расширенному описанию коммита, которое должно быть жёстко отформатировано в 72 столбца и включать такие детали, как обоснование коммита, компромиссы, ограничения подхода и т. д.

Мы используем 72 символа, потому что это стандартная ширина сообщения электронной почты, а электронная почта — важный инструмент для git. Ограничение в 50 символов используется, потому что первая строка становится темой вашей электронной почты, и в начало можно добавить много текста вроде “[PATCH linux-usb v2 0/13]”. Вы можете найти такие ограничения форматирования раздражающими и обременительными, но учтите, что другие читают логи не в том же контексте, что и вы. Я часто читаю логи коммитов на вертикальном мониторе, и он не втиснет в одну строку столько текста, сколько ваш дисплей 4K 16:9.

Каждый коммит должен быть автономным изменением


Каждый коммит должен содержать только одно изменение — избегайте небольших несвязанных изменений в одном коммите (в этом отношении я мог бы почаще прислушиваться к собственным советам). Кроме того, избегайте разбиения одного изменения на несколько коммитов, если только идея не разбивается на отдельные шаги, каждый из которых представляет собой полноценное изменение. Если в вашем рабочем дереве несколько изменений и вам нужно зафиксировать только некоторые из них, попробуйте git add -i или git add -p. Кроме того, каждый коммит должен компилироваться, успешно проходить все тесты и избегать известных багов, которые будут исправлены в будущих коммитах.

Теперь можно взять любой коммит и ожидать, что код будет работать правильно. Это пригодится и позже, например, в процессе выборочного включения коммитов в ветку релиза. Такой подход также повышает полезность git-bisect1, потому что если вы ожидаете, что код скомпилируется и успешно пройдёт тесты для каждого коммита, то вы можете передать git-bisect скрипт, который программно проверяет дерево на наличие ошибки и избежит ложных срабатываний. Эти автономные коммиты с хорошими описаниями упростят подготовку описаний релиза с помощью git-shortlog, как это делает Линус с релизами Linux.

Трудно сделать всё правильно с первого раза


Мы подходим к одной из самых важных особенностей git, которая отличает его от своих предшественников: редактирование истории. Все системы управления версиями поставляются с какой-то «машиной времени», но раньше они были в основном доступны только для чтения. Однако машина времени git отличается: вы можете изменить прошлое. На самом деле вас даже поощряют делать это! Но предупреждаю: изменяйте только то прошлое, которое ещё не вошло в стабильную публичную ветку.

Суть в следующем. Писать коммиты без ошибок, автономные коммиты с хорошим описанием — трудно с первой попытки. Редактировать историю, наоборот, легко, и это часть эффективного рабочего процесса git. Ознакомьтесь с git-rebase и свободно его используйте. Можете использовать rebase для изменения порядка, объединения, удаления, редактирования и разделения коммитов. Например, я обычно вношу некоторые изменения в файл, отправляю fixup-коммит (git commit -m fixup), а затем использую git rebase -i, чтобы влить его в более ранний коммит.

Различные советы


  • Читайте маны! Выберите случайную страницу git man и прочитайте её сейчас. Кроме того, если вы не читали страницу git man верхнего уровня (просто man git), сделайте это.
  • В нижней части каждого мана для команды git высокого уровня обычно находится список команд git низкого уровня, на которые опирается команда высокого уровня. Если хотите узнать больше о том, как работает команда git высокого уровня, попробуйте прочитать эти справочные страницы.
  • Узнайте, как выбирать нужные коммиты с помощью rev selection.
  • Ветки полезны, но вы должны научиться работать без них, а также иметь хороший набор инструментов на поясе. Используйте команды вроде git pull --rebase, git send-email -1 HEAD~2 и git push origin HEAD~2:master.

1. В двух словах, git bisect — это инструмент, который выполняет двоичный поиск между двумя коммитами в вашей истории, просматривая коммиты между ними по одному, чтобы вы могли проверить наличие ошибки. Таким образом можно вычислить коммит, который вызвал проблему.
Поддержать автора
Поделиться публикацией

Похожие публикации

Комментарии 13

    +7
    Угу. В 2019 году писать описание коммита в виме, обязательно обрезая строки по 72 символа. Потому что электронная почта. Почтовые серверы и клиенты наверное взорвутся, если увидят строку в 73 символа.
      0
      я в 2019 году пишу описание коммитов в виме. Что в этом плохого? 0_о
      И делать описание коммита кратким — довольно хороший тон. История так просматривается быстрее.
        +1
        Я не про вим, я про 72 разбиение по 32 символа вручную.
      +3
      Обычно вы для перевода выбираете более качественные статьи, но в этот раз поставил минус. Статья первым абзацем обещала многое, а вышло пшиком: и по качеству материала, да даже и просто по объёму.
        0

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

          0
          … а тем временем под Windows существует такая штука как Git Extensions, позволяющая выделить мышкой пару строк файла и нажать S (от Stage). Или U (от Unstage).
        0
        Каждый коммит должен содержать только одно изменение — избегайте небольших несвязанных изменений в одном коммите (в этом отношении я мог бы почаще прислушиваться к собственным советам).

        Как-то следовал я этому правилу пока не потеря работу целого дня после сбоя кобмпьютера. И тогда я подумал что лучше коммитов будет больше. По бренчам — да — один бренч одна фича.
          +2

          Не буду додумывать за автора, но зачастую это имеет место быть для staging/stable веток и в принципе это довольно хороший тон — не засорять основные ветки мусорными коммитами. Но почему-то мало кто из "гуру статей по гиту" оговаривает, что всем пофигу, что творится с историей коммитов в ветках с фичами и воспринимать это как общее руководство не стоит. Ничто не мешает потом влить одним коммитом в мастер.


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

            0

            Влить одним коммитом в мастер значит оставить ветку висеть несмердженной. Хотя, конечно, почти всем пофигу.

            0
            Существует такая штука как интерактивный rebase. Позволяет сделать коммитов по-больше, а потом взять и сгруппировать их как нужно.
            0
            Что такое «отформатировано в 72 столбца»?
              +2
              Значит, каждая строка должна быть длиной 72 знака.

              Это со времен текстовых видеорежимов и «алфавитно-цифровых печатающих устройств», знакоместа в которых образовывали прямоугольную матрицу и адресовались строкой и столбцом (колонкой). Сейчас так адресуют пиксели.

              До появления SuperVGA таких столбцов на экране IBM-совместимых компьютеров было 80 или 40.

              +2
              Мы используем 72 символа, потому что это стандартная ширина сообщения электронной почты

              При этом в RFC по ссылке про длину строки сказано: «should be no more than 78 characters, excluding the CRLF», а «72» не встречается нигде. (И да, «should be» здесь значит рекомендуется", а жесткое ограничение прописано так: «MUST be no more than 998 characters»).

              Это, разумеется, претензия в сторону автора, а не переводчика.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое