2010-03-26 2 views
155

나는 브랜치에 "feature/xyz"와 같은 패턴이있는 인기있는 Git 프로젝트에서 어딘가를 보았다고 확신한다.Git 브랜치 이름에 슬래시 문자 사용하기

$ git checkout -b labs/feature 

하나가를 만들 않는 방법에 대한

$ 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 

같은 문제가 (내 초기 시도) : 나는 슬래시 문자 분기를 만들려고 할 때

그러나, 오류가 발생합니다 슬래시 문자로 힘내에 지점?

+0

실제로 'HEAD'에 문제가있는 것 같습니다.git은'HEAD'가 아직 생성되지 않은 지점 인'labs/feature'에 대한 링크라고 생각합니다. 어떻게 이런 일이 일어 났는지는 모르겠지만'foo/bar'라는 이름의 브랜치를 만들려는 시도는 작동하지 않습니다. 네 머리가 어떻게 엉망이 됐는지 아는가? –

+0

"foo/bar"가 아니라 "labs/feature"라는 혼란스러운 점이 유감스럽게 생각합니다. –

답변

175

확실한 지점 labs이 (this thread처럼) 존재하지 않습니까?

You can't have both a file, and a directory with the same name.

You're trying to get git to do basically this:

% 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 

You're getting the equivalent of the "cannot create directory" error.
When you have a branch with slashes in it, it gets stored as a directory hierarchy under .git/refs/heads .

+3

깊이있는 답장을 보내 주셔서 감사합니다. Interstingly 나는 git branch foo/bar (작동)를 시도했습니다. 그 다음 git branch -d foo/bar,하지만 foo/디렉토리 (현재는 비어 있음)가 여전히 존재한다는 것을 알았습니다! 편집 : 그리고 그것은 "git branch foo"할 즉시 바뀝니다. 모든 것이 잘됩니다. –

+0

@faB : wicked ... 그러나 예기치 않은 것은 아닙니다 : 'foo' 네임 스페이스에서 bar를 삭제했으나 다른 분기 나 네임 스페이스의 네임 스페이스 역할을 할 수 있습니다. – VonC

+0

정말로 중요 하긴하지만, 'pack-refs'라고 부르는 경우에도 git은 자세를 바꾸지 않으므로, 이것을 방지하기 위해 밖으로 나갈 것입니다. –

-2

내가 틀릴 수도 있지만, 원격 저장소와 관련된 슬래시 만 나타났습니다 (예 : origin/master).

+9

이름에 '/'가있는 로컬 분기를 만드는 것이 완벽하고 가능합니다. '네임 스페이스'에서 관련 분기를 그룹화하는 일반적인 방법입니다. –

+0

네, 정직하게 배우면 혼란 스러울 수 있지만 이름도 유용 할 수 있습니다. 그런 다음 다시 슬래시 또는 대시를 사용하여 개인적인 취향을 초월하는 것이 중요한지 확실하지 않습니다. –

+1

git flow는 다음과 같은 네임 스페이스 스타일을 사용합니다. – Rimian

84

계층 적 분기 이름 (슬래시가있는 분기 이름)이 가능합니다. 예를 들어 제 저장소에서 나는 그러한 지사를 가지고 있습니다. 한가지주의해야 할 점은 저장소에 'foo'브랜치와 'foo/bar'브랜치를 둘 다 가질 수 없다는 것입니다.

문제는 이름에 슬래시가있는 분기를 만드는 것과 관련이 없습니다.

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

위의 오류 메시지

가 '랩/기능'지점이 아닌 'foo는/바'에 대해 이야기 (이것은 copy'n'paste의 실수 세션 즉 당신이 편집 된 부분은 제외). git branch 또는 git rev-parse --symbolic-full-name HEAD의 결과는 무엇입니까?

+1

혼란에 대해 사과드립니다. foo/bar 예제를 처음 작성했습니다. 내 실제 테스트에서 오류 메시지를 붙여 넣습니다. 다시는하지 않겠습니다. :) 그리고 실수로 죄송합니다. 실은 이미 "실험실"지점이있었습니다. –

21

가끔 이미 기본 이름이있는 분기가있는 경우 이러한 문제가 발생합니다. 이미 features라는 이름의 브랜치를 가지고, 불행하게도

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

, 나는 질문 아스 커의 예외를 가지고 :

나는이 시도.

브랜치 제거 features이 문제를 해결하면 위의 명령이 작동합니다.

15

내 경우에는 사용하지 않은 labs 브랜치가 있다는 것을 잊어 버렸습니다. 이 문제를 해결 삭제 :

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

설명 :

이름은에만 모두 부모 지점 또는 일반 지점이 아니라 할 수있다. 그 이유는 지점 labslabs/feature은 동시에 존재할 수 없습니다.

이 문제는 파일 시스템에 분기가 저장되어 있고 labs과 같은 디렉토리에 labs이라는 파일을 가질 수 없기 때문에 발생합니다.

관련 문제