prosource

Git 분기 이름에 슬래시 문자 사용

probook 2023. 5. 3. 21:31
반응형

Git 분기 이름에 슬래시 문자 사용

저는 인기 있는 Git 프로젝트의 어딘가에서 지점들이 "feature/xyz"와 같은 패턴을 가지고 있는 것을 보았다고 확신합니다.

그러나 슬래시 문자로 분기를 만들 때 다음과 같은 오류가 발생합니다.

$ git branch labs/feature
error: unable to resolve reference refs/heads/labs/feature: Not a directory
fatal: Failed to lock ref for update: Not a directory

동일한 문제(초기 시도):

$ git checkout -b labs/feature

슬래시 문자로 Git에 분기를 만들려면 어떻게 해야 합니까?

지점이 확실합니까?labs( 스레드에서와 같이) 이미 존재하지 않습니까?

이름이 같은 디렉토리와 파일을 모두 가질 수 없습니다.

당신은 기본적으로 이 일을 하게 하려고 노력하고 있습니다.

% cd .git/refs/heads
% ls -l
total 0
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 labs
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 master
% mkdir labs
mkdir: cannot create directory 'labs': File exists

"cannot create directory" 오류와 동일한 오류가 발생합니다.
슬래시가 있는 분기가 있는 경우 다음과 같은 디렉토리 계층 구조로 저장됩니다..git/refs/heads.


참고:labsddruganov설명에서 지적한 처럼 기존 분기가 아니어야 합니다.

 git switch -c 19023-commerce/19033-commerce-view 19023-commerce

 # Fails with:

 fatal: cannot lock ref 'refs/heads/19073-commerce-view/99999-test-branch': 
 'refs/heads/19073-commerce-view' exists; 
  cannot create 'refs/heads/19073-commerce-view/99999-test-branch'

존재, 생성할 수 없음에서 설명한 git push: refs/heads/my/subbranch것처럼:

  • 분기 b가 있으면 b/anything이라는 분기를 만들 수 없습니다.
  • 마찬가지로 분기 dev/b가 있으면 dev/b/c를 만들 수 없습니다.

이것은 약간의 내부 제한입니다.

계층적 분기 이름(슬래시가 있는 분기 이름)을 가질 수 있습니다.예를 들어 저장소에 이러한 분기가 있습니다.한 가지 주의할 점은 저장소에 분기 'foo'와 분기 'foo/bar'를 둘 수 없다는 것입니다.

이름에 슬래시가 있는 분기를 만드는 것이 문제가 아닙니다.

나뭇가지를 꺾어/바오류: 참조 참조/헤드/키워드/기능을 확인할 수 없습니다.디렉터리가 아님치명적: 업데이트를 위해 참조를 잠그지 못했습니다.디렉터리가 아님

위의 오류 메시지는 'foo/bar'가 아닌 'labs/feature' 분기에 대해 말합니다(copy'n'paste의 실수가 아니라면, 즉 세션의 일부를 편집했습니다).의 결과는 무엇입니까?git branch또는git rev-parse --symbolic-full-name HEAD?

이미 사용하지 않은 제품이 있다는 것을 잊었습니다.labs분점.삭제를 통해 문제가 해결되었습니다.

git branch -d labs
git checkout -b labs/feature

설명:

이름은 부모 분기 또는 일반 분기일 수 있으며, 둘 다일 수는 없습니다.그래서 나뭇가지들이labs 그리고. labs/feature둘 다 동시에 존재할 수 없습니다.

이유: 분기가 파일 시스템에 저장되므로 파일을 가질 수 없습니다.labs및 디렉토리labs같은 수준으로

기본 이름을 가진 분기가 이미 있는 경우 이러한 문제가 발생할 수 있습니다.

시도해 봤습니다.

git checkout -b features/aName origin/features/aName

불행하게도, 나는 이미 이름이 붙은 지점을 가지고 있었습니다.features질문하는 사람을 제외하고 말입니다

제거 입니다.features문제를 해결했고, 위의 명령이 작동했습니다.

지점 이름은 대소문자를 구분하므로 릴리스 관리자가 Azure에서 만든 폴더가 있는 경우 폴더 이름이 정확히 일치해야 합니다.매니저와 함께 키우면서 열심히 배웠습니다.

방금 같은 문제가 있었지만, 더 이상 충돌하는 지점을 찾을 수 없었습니다.

저의 경우 레포는 이전에 "foo" 브랜치를 가지고 있었지만, 더 이상은 아닙니다. 저는 원격에서 "foo/bar"를 만들고 체크아웃하려고 했습니다.제가 말했듯이 "foo"는 더 이상 존재하지 않지만, 문제는 계속되었습니다.

결국, 분기 "foo"는 삭제 후에도 여전히 .git/config 파일에 있었습니다. :)

수 가 있는 경우( 체할수웃없문경있는제우가는아크지에점:경우있▁for▁eg▁in는▁where▁has▁branch가:제▁issue문▁to):features/23가지라고 쓰여 있기 때문에.features 수 . Github이라는 이름의 수 . 이름이 로컬 지점일 수 있습니다.features원인이 되고 있습니다.

지점을 사로분삭기제로 합니다.git branch -D features은 그면당체을할웃수것있다입니을로 할 수 입니다.git checkout features/23그리고 그것은 예상대로 작동할 것입니다.

Visual Studio Git Changes에서 이 작업을 수행합니다.

앞서 언급한 바와 같이.나는 dev 브랜치를 만드는 실수를 했습니다. main dev

나중에 그냥 dev/some branch name이라고 부를 수 있을 거라고 생각했습니다.

솔루션은 dev를 삭제한 다음 dev/some 브랜치 이름을 만드는 것이었습니다.다음 dev 분기는 dev/nextbranchname이라고 합니다.이것은 dev가 폴더 뷰가 되고 그 이후에 분기가 정렬되는 Visual Studio와 매우 잘 통합됩니다.

언급URL : https://stackoverflow.com/questions/2527355/using-the-slash-character-in-git-branch-name

반응형