2011-02-13 1 views
19

다음 셸 코드가 올바르게 참조 기호 Git 기호 참조의 권장 용도는 무엇입니까?

git symbolic-ref "first" "refs/heads/master" 
git symbolic-ref "second" "first" 
git symbolic-ref "nested/third" "second" 
git symbolic-ref "refs/heads/fourth" "nested/third" 

다음 셸 코드가 올바르게 마스터의 선단 최신 생성 참조 기호를 해결 체인을 생성한다. 이러한 사용 사례

git show-ref "refs/heads/fourth" 

없음은 공식 문서 (git-symbolic-ref doc, git-show-ref doc)에 설명되지 않습니다.

  • refs/heads 디렉토리에 심볼릭 참조를 저장하기 위해 OK인가 그러나

    , 다음

    git check-ref-format --print "first" 
    

    그래서, 내 질문이 작동하지 않는 이유는 무엇입니까?
  • 기호 참조를 연결하는 것이 좋습니까?
  • "first"이 전달 될 때 check-ref 형식이 실패하므로 "HEAD"과 동일한 수준의 기호 참조를 만드는 것이 좋지 않습니까? 또는이 명령은 기호 링크를 다루는 것이 아닙니다.

내 의도는 무엇이 지원되고 있는지, 그리고 내가 무엇이든지 돌아 다니거나 버그로부터 이익을 얻지 못한다는 것을 분명히 이해하는 것입니다.

+0

'HEAD'가 주석 태그를 가리키고있을 때 이걸 가지고 노는 동안, 나는 'git-commit'을 segfault로 가져 왔습니다. –

+1

@jleedev : 이것은 버그가 아닙니다. 사용자가 불쾌한 일을하지 못하도록 방지하는 기능입니다. :-) – nulltoken

답변

15

나는 결국 posted이 질문에 자식 개발 메일 링리스트.

Junio C Hamano, 리드 자식 관리자 (+8700 커밋)는 다음과 같은 답변을 제공합니다.

지금 symrefs의 두 개의 유효한 종류가 있습니다

  • .git/HEAD, 가리키는 어딘가에 심판/헤드/계층 구조에 따라;

  • .git/심판/리모트/{일부 원격 이름} 어딘가에 심판/리모트/{동일한 원격 이름}/계층 구조에서 가리키는/HEAD.

코드는, 재귀 symrefs를 해결하기 위해 준비 이외의 symrefs 위의 두 종류, 어떤 메커니즘의 설계 범위를 벗어나는 다른 곳에서 포인트 있지만 의 모든 것을 symrefs 할 수있다 을 지원하기위한 것입니다. 코드가 그들에게하는 것 (크래쉬없이)은 디자인이 아니며, 단지 정의되지 않은 동작입니다 ( ).

은 1.8.0에서 원격 추적 계층 구조를 재구성하기로 결정할 경우 별다른 변화가 없습니다. 전자는 전혀 변경되지 않으며 후자의 은 개의 refs/remotes/{동일한 리모컨 name}/heads hierarchy를 가리키며 시작됩니다.

나는 심하게 악의적 인 생각을 회상한다. 재미있게 .git/HEAD를 가리키는 메커니즘 locations; 여전히 그렇게 할 수 있습니다. 그런 경우라면 위의 목록을 확장하여 사용법을 다루어야합니다.

+0

상기 메일 링리스트 스레드에 대한 링크 : http://git.661346.n2.nabble.com/What-s-the-definition-of-a-valid-Git-symbolic-reference-tt6025154.html#a6026446 – Magicmaaan

3

일반적으로 symrefs는 refs/ 아래에 있습니다. - 적어도 git suite가하는 것입니다 (예 : git filter-tree를 사용할 때 refs/original/...이됩니다). 일부 도구는 refs/ 접두사가없는 참조를 무시하도록 선택할 수 있습니다.

$ git symbolic-ref refs/first refs/heads/master 
$ git check-ref-format --print refs/first 
refs/first 
+0

그래서 허점으로부터 혜택을 얻고 있다는 것을 이해하고 있습니까? symref 체이닝에 대해 알았습니까? 그것이 유효한가 또는 나는 또한 "non-guarded-against"사용법을 이용하고 있습니까? – nulltoken

+0

"보통"- 모든 사람이 가지고있는 하나의 symref를 제외하고는,'HEAD'. – Cascabel

+1

.git/refs/밖에서는 refs가 가능합니다. FETCH_HEAD, HEAD, ORIG_HEAD, RENAMED-REF와 같이'git log'를 호출 할 수 있습니다. 그러나 gitk는 HEAD를 제외하고는 그들을 보여주지 않을 것입니다. – user611775

1

심볼릭 링크를 더 투명하게 사용할 수 있고 밀어 넣을 수도 있습니다. 새로운 워크 플로를위한 강력한 도구가 될 수 있습니다. 현재, 심볼릭 링크를 생성 한 후 밀어 넣으면 서버는 해당 참조의 링크가 아니라 해시를 갖게됩니다.

관련 문제