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_