Skip to main content

Обработка специальных символов в именах ветвей и тегов

Git предоставляет множество разрешений для использования символов в именах ветвей и тегов. При использовании Git из оболочки командной строки может потребоваться исключить или заключить в кавычки специальные символы.

Сведения об именах ветвей и тегов

В большинстве репозиториев используются простые имена ветвей, например main или update-icons. Имена тегов также обычно имеют базовый формат, например номер версии — v1.2.3. Для структурирования в именах ветвей и тегов также может использоваться разделитель пути (/), например area/item или level-1/level-2/level-3. В Git накладываются минимальные ограничения на использование символов в именах ветвей и тегов. Например, имя не должно начинаться или заканчиваться символом косой черты и не должно содержать последовательность таких символов. Дополнительные сведения см. в разделе git-check-ref-format в документации по Git.

Почему необходимо экранировать специальные символы

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

Например, символ $ используется во многих оболочках для указания ссылки на переменную. В большинстве оболочек такое допустимое имя ветви, как hello-$USER, будет интерпретироваться не как литеральная строка hello-$USER, а как эквивалент слова "hello", за которым следует дефис, а затем — текущее значение переменной USER. Если имя ветви содержит символ $, необходимо исключить его расширение оболочкой в виде ссылки на переменную. Аналогичным образом, символ точки с запятой (;) в имени ветви, в большинстве оболочек интерпретируется как разделитель команд, поэтому его необходимо заключить в кавычки или экранировать.

Как экранировать специальные символы в именах ветвей и тегов

В большинстве случаев имена ветвей и тегов со специальными символами можно экранировать, заключив их в одинарные кавычки, например 'hello-$USER'.

  • В оболочке Bash используются одинарные кавычки для сохранения литерального значения символов, заключенных между ними.
  • В оболочке Zsh реализовано аналогичное Bash поведение, которое можно настроить с помощью параметра RC_QUOTES.
  • В PowerShell для сохранения литерального значения символов также используются одинарные кавычки.

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

Именование ветвей и тегов

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

  • Буквы английского алфавита (от a до z и от A до Z).
  • Цифры (от 0 до 9).
  • Некоторые знаки препинания:
    • точка (.);
    • дефис (-);
    • символ подчеркивания (_);
    • косая черта (/).

Во избежание путаницы имена ветвей должны начинаться с буквы.

Ограничения на имена в GitHub

GitHub ограничивает небольшое количество имен ветвей и тегов от отправки. Эти ограничения:

  • Имена, которые выглядят как идентификаторы объектов Git (40 символов, содержащих только 0-9 и A-F), чтобы предотвратить путаницу с фактическими идентификаторами объектов Git.
  • Имена, начинающиеся с refs/, чтобы предотвратить путаницу с полным именем Git refs. Дополнительные сведения о ссылках см. в разделе "Ссылки на Git" в документации по Git.