Nice programing

분기 이름에 '공백'문자가 포함될 수없는 이유는 무엇입니까?

nicepro 2020. 12. 25. 22:56
반응형

분기 이름에 '공백'문자가 포함될 수없는 이유는 무엇입니까?


나는 시도했다 :

git branch "MyProj/bin/ ignored"

수신 :

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

자식 분기 받는 사람 페이지 포인트 자식 검사-REF 형식의 매뉴얼 페이지 유효한 지점 이름에 대한 실제 규칙을 얻을 수 있습니다.

물론 위의 치명적인 오류의 원인은 공백 문자가 포함 된 것 같습니다.

오늘날에도 공백이 브랜치 이름에서 여전히 제외되는 이유는 무엇입니까? (예를 들어 고대 CVS에서는 예상했지만 Git?)

이에 대한 유효한 기술적 이유는 무엇일까요?


이 바닥에서 순수하고 기술적 인 이유를 찾을 수 있을지는 모르겠습니다. 그러나 나는 공백이 모든 종류의 * nix 유틸리티 및 파일 이름 처리에 렌치를 던지는 경향이 있다고 제안 할 수 있으므로 실수로 더 이상 잘못된 작업을 수행하는 것을 피할 수 있습니다. 결국 git 브랜치는 리포지토리의 파일로 요약되며 이는 해당 파일 이름의 공백을 처리하는 것을 방지합니다 (특히 브랜치는 주석에서 언급했듯이 .git / refs / heads /의 파일입니다).

대부분 나는 그 이유가 철학적이며 일을 단순하게 유지하기위한 것이라고 생각합니다. 브랜치 이름은 복잡 할 실제 이유가없는 사람이 읽을 수있는 이름입니다 (그리고 모든 명령을 해독 할 수없는 세 글자 조합으로 별칭을 지정한 sysadmin의 유령을 호출하기 위해 매번 두 개의 추가 문자를 입력해야합니다). 그렇지 않으면 "cd가 chdir이 아닌 이유"인수라고도합니다.


오래된 스레드,하지만 헤이 ..
Mac에서는 alt + space를 사용합니다. 당신을 위해 트릭을 할 보이지 않는 캐릭터를 추가 할 것입니다. 마음 : 그것은 '공간'이 아니라 보이지 않는 캐릭터입니다. 시각적으로 동일하지만 사실상 동일하지는 않습니다. 100 %는 다른 사람을 혼란스럽게하고 모든 곳에서 혼돈을 가져올 가능성이 있지만 헤이, 킥을 위해 .. 왜 안돼? xD

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


당신이 충분히 절실하다면 가능한 해결 방법이 있습니다. 유니 코드 세트에는 공백과 유사한 문자가 많이 있습니다. 그러나 U + 0020 만 허용되지 않는 공간입니다. 예를 들어 비 분리 공백을 사용하면 공백이있는 분기 이름을 가질 수 있습니다. 주요 문제는 키보드에 해당 코드 포인트에 대한 키가 없을 가능성이 있다는 것입니다. 이 문제를 해결하기 위해 다음 스크립트를 사용합니다.

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

단순히 인수의 모든 공백을 비 구분 공백으로 바꿉니다.


"git checkout"명령의 기능을 복잡하게 만들 수 있기 때문에 허용되지 않습니다.

예 : 현재 마스터에 있지만 현재라는 분기가 있다고 가정합니다. 명령을 실행하려면

(마스터) : git checkout -b my fix

git은 "my fix"라는 새 브랜치를 만들 것인지 아니면 "master"브랜치가 아닌 원래 "fix"에 링크 된 "my"라는 새 브랜치를 만들 것인지 알 수 없습니다.

출처 : https://git-scm.com/docs/git-checkout(Git 문서)


쉘 스크립트에서 경로 이름을 올바르게 사용하는 것은 어렵 기 때문입니다. 링크 된 git check-ref-format매뉴얼 페이지 자체에서 :

이러한 규칙을 사용하면 쉘 스크립트 기반 도구가 참조 이름을 쉽게 구문 분석하고 참조 이름이 따옴표없이 (실수로) 사용될 때 쉘에 의한 경로 이름 확장을 쉽게 할 수 있으며 특정 참조 이름 표현식의 모호성을 피할 수 있습니다 (gitrevisions (7) 참조).

셸의 파일 이름 및 경로 이름 : 올바르게 수행하는 방법 도 참조하십시오 .

근본적인 문제는 오늘날 대부분의 유닉스 계열이 파일 이름에 거의 모든 바이트를 포함 할 수 있다는 것입니다 . 여기에는 줄 바꿈, 탭, 이스케이프 문자 (표시 될 때 명령을 실행할 수있는 이스케이프 시퀀스 포함), 기타 제어 문자, 공백 (어디서나!), 선행 대시 (-), 셸 메타 문자 및 합법적 인 UTF-가 아닌 바이트 시퀀스가 ​​포함됩니다. 8 현.

...

그러나 유닉스 계열 커널 의이 결함 (위험한 파일 이름 허용) 은 Bourne 쉘 언어의 추가적인 약점과 결합되어 쉘에서 파일 이름과 경로 이름을 올바르게 처리하기가 훨씬 더 어려워집니다. 쉘은 적절하게 사용할 때 짧은 스크립트에 적합한 언어라고 생각하지만 파일 이름의 과도한 허용 성은 쉬운 작업을 쉽게 수행 할 수있는 잘못된 작업으로 바꿉니다.

참조 URL : https://stackoverflow.com/questions/6619073/why-cant-a-branch-name-contain-the-space-char

반응형