Почему имя ветви не может содержать символ «пробел»? - PullRequest
57 голосов
/ 08 июля 2011

Я пытался:

git branch "MyProj/bin/ ignored"

и получил:

fatal: 'MyProj/bin/ ignored' is not a valid branch name.

Страница руководства git-branch указывает на страницу руководства git-check-ref-format , чтобы получить действительные правила для действительного имени ветви.

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

Любая идея, почему в наше время пробелы по-прежнему исключаются из имени ветви (я бы ожидал, например, в древнем CVS, но в Git?)

Какие могут быть действительные технические причины для этого?

Ответы [ 5 ]

59 голосов
/ 08 июля 2011

Я не знаю, собираетесь ли вы найти чисто техническую причину внизу этого. Тем не менее, я могу предложить, чтобы пробелы, как правило, создавали ключи во всех видах утилит * nix и при обработке имен файлов, поэтому, возможно, было предотвращение случайного совершения чего-либо неправильного в дальнейшем. В конце концов, ветка git сводится к файлу в репозитории, и это позволяет избежать пробелов в имени этого файла (в частности, ветвь - это файл в .git / refs /head /, как упомянуто в комментарии).

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

4 голосов
/ 16 декабря 2016

старый поток, но эй ..
на Mac я использую Alt + пробел.он добавит невидимого персонажа, который поможет вам.ум: это не «космос», это невидимый персонаж.визуально то же самое, но фактически не то же самое.100% вероятности собьют с толку кого-то еще и определенно принесут хаос повсюду, но, эй, ради пинков .. почему бы и нет?xD

git checkout -b US24024 Automated Tests - Profile A Switched to a new branch 'US24024 Automated Tests - Profile A'

4 голосов
/ 01 июля 2015

Существует возможный обходной путь, если вы достаточно отчаянны.В наборе Unicode много пробеловых символов.Но только U + 0020 - это пространство, которое запрещено.Возьмите, например, неразрывный пробел, и вы можете иметь имя ветви с пробелами.Основная проблема заключается в том, что ваша клавиатура, скорее всего, не имеет клавиши для этого кода.Чтобы обойти эту проблему, я использую следующий скрипт:

#!/bin/zsh
git co -b "${@// / }"

Он просто заменяет все пробелы в аргументах неразрывными пробелами ...

1 голос
/ 26 июля 2016

Это не разрешено, потому что это усложнит функциональность команды "git checkout".

Ex: Предположим, у вас есть ветвь с именем, хотя вы в настоящее время в мастере Если бы вы запустили команду

(мастер): git checkout -b my fix

git не будет знать, хотите ли вы создать новую ветку с именем "my fix" или если вы хотите создать новую ветку с именем "my", которая связана с вашим исходным "fix", а не с веткой "master" .

Источник: https://git -scm.com / docs / git-checkout (Git Documentation)

0 голосов
/ 24 декабря 2018

Потому что правильно использовать имена путей в скриптах оболочки сложно.На самой связанной справочной странице git check-ref-format:

Эти правила позволяют инструментам, основанным на сценариях оболочки, анализировать имена ссылок, расширение имени пути оболочкой, когда имя ссылки являетсяиспользуется без кавычек (по ошибке), а также избегает неоднозначностей в определенных ссылочных выражениях (см. gitrevisions (7)):

См. также Имена файлов и путей в Shell: как это сделать правильно :

Основная проблема заключается в том, что сегодня большинство Unix-подобных файлов позволяют именам файлов включать практически любые байты .Это включает в себя новые строки, табуляции, escape-символ (включая escape-последовательности, которые могут выполнять команды при отображении), другие управляющие символы, пробелы (где угодно!), Начальные черты (-), метасимволы оболочки и последовательности байтов, которые не являются допустимыми UTF-8 строк.

...

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

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