Подтвердить что ты не робот

Почему имя ветки не может содержать пробел char?

Я пробовал:

git branch "MyProj/bin/ ignored"

и получил:

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Не допускается, поскольку это усложнит функциональность команды "git checkout".

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

(мастер): git checkout -b мое исправление

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

Источник: https://git-scm.com/docs/git-checkout (Git Документация)