2012-03-17 3 views
2

그래서이 질문에 을 묻지 만 어떤 적합한 대답도 찾지 못했습니다. 내가 프롬프트에서 현재 자식의 이름을 표시하려면 찾고 있어요,하지만 예쁜 방식으로 : 만약 내가 지점에있어, 나는 지점의 이름을 원해; 그것이 지사가 아니라면, 내 프롬프트에서 상대 이름 (예 : master~2)을 원합니다.예쁜 자식 이름을 얻으십시오

처음에는 what you can see here과 같은 것을 사용했습니다. 그것은 잘 작동했습니다 : 나는 지점의 이름을 가지고 있었고, 레브 SHA1 번호를 가지고있었습니다. 그럼 처음에 위대했다 git name-rev에 따라 접근으로 이동하지만, 그때 이름이 때로는 섞여 나타났습니다 : master을 병합 한 후, 두 가지 지점에서 준비가되었습니다. 내 프롬프트에 master이 있습니다. 얼마나 많이 내가 이것에 의지 하는지를 감안할 때, 나는 이것을 가질 수 없다. 그러나 SHA1 번호 대신 master~2을 갖는 것은 정말 좋았습니다.

두 가지 방법을 결합 할 수있는 방법이 있기를 바랍니다. 태그 이름도 표시 할 수 있다면 가져 가겠습니다. (많이 사용하지 않지만 은 아직입니다.) 그리고 맨 위에있는 명령 만 git 내부의 파일을 찾는 것입니다 - 그들은 어떤 시점에서 변경할 수 있습니다.

읽어 주셔서 감사합니다. zsh을-자식 저장소에서 촬영

답변

1

:

git describe HEAD --all --long 

당신은 주위를 조정할 수 있습니다 https://github.com/jcorbin/zsh-git/blob/master/functions/zgitinit#L70

name=$(git symbolic-ref -q HEAD) 
if [ $? -eq 0 ]; then 
    if [[ $name == refs/(heads|tags)/* ]]; then 
     name=${name#refs/(heads|tags)/} 
    fi 
else 
    name=$(git name-rev --name-only --no-undefined --always HEAD) 
    if [ $? -ne 0 ]; then 
     return 1 
    elif [[ $name == remotes/* ]]; then 
     name=${name#remotes/} 
    fi 
fi 

또한

+0

흠, 아마 비 bash는 호환 일을 가지고 있지만, 요점은 당신이 상징적 심판 자식을 사용할 수 있으며, 오류의 결과를 얻을 경우와 같이이 자식 이름-REV를 사용해야 것이다. – abresas

+0

나는 사실이다. 이 존재하지만 나중에 시도 할 것입니다 몰랐습니다, 감사합니다 :) – ksol

0

는 설명 자식 살펴 보자 : zsh을 사용을 고려할 수 있습니다 다른 옵션과 함께 좋은 정보를 얻으십시오. --tags 옵션과 함께 사용하면 가장 최근에 발견 된 태그와 커밋 된 거리를 얻을 수 있습니다.

$ git describe HEAD --tags 
1.1-4-g860832e 

예제에서 우리는 태그 1.1보다 4 개의 커밋이 있음을 보여줍니다. 또한 'g'다음에 sha1 해시를 표시합니다.이 경우 짧은 해시는 860832e입니다.

1

여기 zsh 응답의 bash 버전이 있습니다. 코멘트로 남겨 두려고했지만 댓글에 코드 블록을 게시 할 수 없습니다. : P

name=$(git symbolic-ref -q HEAD) 
if [[ -n "$name" ]]; then 
    name="${b#refs/heads/}" 
else 
    name=$(git name-rev --name-only --no-undefined --always HEAD) 
    name="${name#tags/}" 
    name="${name#remotes/}" 
fi 
관련 문제