git의 사용자 정의 bash 자동 완성이 다른 git 자동 완성을 중단합니다.

git의 사용자 정의 bash 자동 완성이 다른 git 자동 완성을 중단합니다.

git commit클릭시 자동완성 기능을 추가 하려고 합니다 TabTab.

제가 개발 중인 자동 완성 기능은 분기 명명 규칙을 기반으로 합니다. 관례는 분기 이름 끝에 PivotalTracker Id 번호를 추가하는 것이므로 일반적인 분기는 다음과 같습니다 foo-bar-baz-1449242.

[#1449242]커밋 메시지 시작 부분에 접두사를 추가하여 커밋을 PivotalTracker 카드와 연결할 수 있습니다. git commit이 내용을 입력하고 사용자가 클릭하면 자동으로 삽입되도록 하고 싶습니다 TabTab.

나는 여기서 이 작업을 수행했습니다.https://github.com/tlehman/dotfiles/blob/master/ptid_git_complete

(편의상 소스코드는 다음과 같습니다.)

  function _ptid_git_complete_()
  {
    local line="${COMP_LINE}"                   # the entire line that is being completed

    # check that the commit option was passed to git 
    if [[ "$line" == "git commit" ]]; then 
      # get the PivotalTracker Id from the branch name
      ptid=`git branch | grep -e "^\*" | sed 's/^\* //g' | sed 's/\-/ /g' | awk '{ print $(NF) }'`
      nodigits=$(echo $ptid | sed 's/[[:digit:]]//g')

      if [ ! -z $nodigits ]; then
        : # do nothing
      else
        COMPREPLY=("commit -m \"[#$ptid]")
      fi
    else
      reply=()
    fi
  }

  complete -F _ptid_git_complete_ git

문제는 이것이 정의된 git 자동 완성 기능을 손상시킨다는 것입니다.git-autocomplete.bash

이 기능을 git-autocompletion.bash와 호환되게 하려면 어떻게 해야 합니까?

답변1

__git_complete(에 정의됨 )을 사용하여 자신만의 함수를 설치 git-autocompletion.bash하고 함수를 원래 함수로 대체할 수 있습니다. 다음과 같이 보일 수 있습니다:

function _ptid_git_complete_()
{
  local line="${COMP_LINE}"                   # the entire line that is being completed

  # check that the commit option was passed to git 
  if [[ "$line" == "git commit " ]]; then 
    # get the PivotalTracker Id from the branch name
    ptid=`git branch | grep -e "^\*" | sed 's/^\* //g' | sed 's/\-/ /g' | awk '{ print $(NF) }'`
    nodigits=$(echo $ptid | sed 's/[[:digit:]]//g')

    if [ ! -z $nodigits ]; then
      : # do nothing
    else
      COMPREPLY=("-m \"[#$ptid]")
    fi
  else
    __git_main
  fi
}

__git_complete git _ptid_git_complete_

관련 정보