Quais caracteres são ilegais em um nome de filial?

Respostas:

299

Regras de nomenclatura para refname:

O Git impõe as seguintes regras sobre como as referências são nomeadas:

  1. Eles podem incluir barra /para agrupamento hierárquico (diretório), mas nenhum componente separado por barra pode começar com um ponto .ou terminar com a sequência .lock.

  2. Eles devem conter pelo menos um /. Isso reforça a presença de uma categoria como etc. heads/, tags/mas os nomes reais não são restritos. Se a --allow-onelevelopção for usada, essa regra será dispensada.

  3. Eles não podem ter dois pontos consecutivos em ..nenhum lugar.

  4. Eles não podem ter caracteres de controle ASCII (ou seja, bytes cujos valores são menores que \040, ou \177 DEL), espaço, til ~, cursor ^ou dois pontos em :qualquer lugar.

  5. Eles não podem ter ponto de interrogação ?, asterisco *ou colchete aberto em [qualquer lugar. Veja a --refspec-patternopção abaixo para uma exceção a esta regra.

  6. Eles não podem começar ou terminar com uma barra /ou conter várias barras consecutivas (consulte a --normalizeopção abaixo para obter uma exceção a esta regra)

  7. Eles não podem terminar com um ponto ..

  8. Eles não podem conter uma sequência @{.

  9. Eles não podem ser o único personagem @.

  10. Eles não podem conter a \.

Além disso, regra adicional para o nome da filial:

  1. Eles não podem começar com um traço -

Graças a Jakub Narębski , a página do homem para git check-ref-formattem mais detalhes.

Manoj Govindan
fonte
9
Vale ressaltar que '>' é permitido, mas para alternar para esse ramo no bash, é necessário escapar com um '\' anterior
igniteflow 25/10/13
3
Estou confuso sobre a regra nº 2 na página de manual que você vinculou. Diz "2. Eles devem conter pelo menos um /". Por favor explique? Nenhum dos meus ramos tem um /no nome.
chharvey
7
@chharvey: um “ramo” sem /ter heads/anteposto a ele “automaticamente”. Na verdade: sem um /, não está claro ainda se é uma sucursal ou uma marca ou outra coisa ...
Robert Siemer
1
@ DMTintner: vírgulas são permitidas.
Robert Siemer
3
aqui está uma expressão regular para isso /^^\./mpie-).\.|@{|[\/\.{-)^@$|[~^:\x00-\x20\x7F\s?* [\\] / g encontrará os caracteres inválidos para que você possa substituí-los por um '-' ou qualquer caractere que desejar.
Tony Brix