programing

지점 이름 내에서 사용할 수 없는 문자는 무엇입니까?

minimums 2023. 5. 3. 20:52
반응형

지점 이름 내에서 사용할 수 없는 문자는 무엇입니까?

지점 이름 내에서 사용할 수 없는 문자는 무엇입니까?

refname에 대한 이름 지정 규칙:

Git는 참조 이름을 지정하는 방법에 다음 규칙을 적용합니다.

  1. 슬래시를 포함할 수 있습니다./계층적(디렉토리) 그룹화의 경우 슬래시로 구분된 구성요소는 점으로 시작할 수 없습니다..또는 시퀀스로 끝납니다..lock.

  2. 하나 이상을 포함해야 합니다./이는 다음과 같은 범주의 존재를 강제합니다.heads/,tags/등이 있지만 실제 이름은 제한되지 않습니다.만약에--allow-onelevel옵션을 사용하면 이 규칙은 무시됩니다.

  3. 두 개의 연속된 점을 가질 수 없습니다...아무 곳이나.

  4. ASCII 제어 문자(즉, 값이 다음보다 낮은 바이트)를 사용할 수 없습니다.\040또는\177 DEL), 공백, 타일드~캐럿^또는 대장:아무 곳이나.

  5. 물음표를 사용할 수 없습니다.?별표*또는 개방형 브래킷[아무 곳이나.참조--refspec-pattern이 규칙에 대한 예외에 대한 아래 옵션.

  6. 슬래시로 시작하거나 끝낼 수 없습니다./또는 여러 개의 연속 슬래시를 포함합니다( 참조).--normalize이 규칙에 대한 예외에 대한 아래 옵션)

  7. 점으로 끝날 수 없습니다..

  8. 시퀀스를 포함할 수 없습니다.@{.

  9. 단일 문자일 수 없습니다.@.

  10. 다음을 포함할 수 없습니다.\.

또한 지점 이름에 대한 추가 규칙:

  1. 대시로 시작할 수 없습니다.-

Jakub Naręski 덕분에, 남성 페이지:git check-ref-format자세한 내용은 를 참조하십시오.

승인된 답변과 man 페이지에는 이미 Git 지점 이름에 적용되는 규칙이 설명되어 있습니다.

Git 소스 코드에서 refname_disposition 배열은 다음에서 다양한 문자를 처리하는 방법을 결정하는 데 사용됩니다.refnames배열의 인덱스는 ASCII 코드에 해당하며 값은 ASCII 문자가 처리되는 방식을 나타냅니다.

/*
 * How to handle various characters in refnames:
 * 0: An acceptable character for refs
 * 1: End-of-component
 * 2: ., look for a preceding . to reject .. in refs
 * 3: {, look for a preceding @ to reject @{ in refs
 * 4: A bad character: ASCII control characters, and
 *    ":", "?", "[", "\", "^", "~", SP, or TAB
 * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
 */
static unsigned char refname_disposition[256] = {
    1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
    4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
};

부터4해당 ASCII 문자가 분기 이름 내에서 허용되지 않음을 의미합니다. 허용되지 않는 문자는 39개입니다.허용되지 않는 문자는 ASCII 제어 문자(ASCII 코드 < 32), 인쇄 가능 문자입니다.: ? [ \ ^ ~공백/탭 문자를 사용할 수 있습니다.

3자 이상의 문자가 몇 가지 조건을 충족해야 합니다(문서 설명 참조).

  • .이후 두 개의 점은 금지됩니다.
  • {서브스트링@{금지되어 있습니다.
  • *다음이 아니면 거부REFNAME_REFSPEC_PATTERN설정됩니다.

null 바이트는 분기 이름을 종료하고/분기에 대한 새 디렉터리 계층 구조를 만듭니다.따라서 분기 이름은 슬래시로 끝날 수 없습니다.예를들면git checkout -b 'a/b/c'는 아에해디구만다듭니조를렉리터래당 아래에 를 생성합니다..git/refs/heads

:UTF-8지점 이름에 문자를 사용할 수 있습니다.

$ git checkout -b $'\xCE\xA9'
Switched to a new branch 'Ω'

또한 달러 기호를 사용할 경우 주의해야 합니다.$성격.

git branch pew$ign를 생성합니다.pew.

이 있는 $전체 이름은 문자열 리터럴로 만드는 따옴표로 감싸야 합니다.git branch 'pew$ign'이상적으로 기호는 사용하지 않는 것이 좋습니다.

Manoj Govindan 주요 답변을 완성하기 위해:

  • @ version 유효이분다니버름전입기한ongit(버전다▁g▁is▁a니유on)).git version 2.24.3 (Apple Git-128))
  • HEAD유효한 지점 이름이 아닙니다(캡틴 명백!).
  • 길이가 제한됨(OS에 따라 Mac OS 10.15.7에서는 250자가 최대(ASCII 또는 비ASCII)입니다.)

> 또는 ==> 또는 ->를 좋아하지 않습니다.

언급URL : https://stackoverflow.com/questions/3651860/which-characters-are-illegal-within-a-branch-name

반응형