커맨드 라인에서 * branches *에 대한 자식 자동 완성?


350

Linux 컴퓨터 에서 Git을 사용 하여 분기 를 자동 완성 했습니다 .

[우리가 자식 지점 완료, 얘기 참고 하지 bash는 완료 (예 : 명령, 파일 등). 따라서 전혀 레인의 대답 은]

예를 들어 git checkout+ 를 입력 TAB하고 분기 목록을 가져올 수 있습니다 .

또는 "feb"로 시작하는 모든 분기를 가져 오려면 git checkout feb*+ TAB를 입력 할 수 있습니다 .

Mac에서이 기능을 사용하려면 어떻게해야합니까?

나는 다운로드 및 실행되지 시도 bash-completion/bash_completionbash-completion/bash_completion.sh.in기쁨을하지만. 첫 번째에 대한 오류 메시지가 표시되었습니다 declare: -A invalid_option. 두 번째는 오류가 없었습니다. 내가 git checkout+ TAB인데도 여전히 분기가 아닌 디렉토리에 파일 목록이 표시됩니다. 나는 프로젝트 루트에 있습니다.

디렉토리 및 bash 명령에 대한 자동 완성이 정상적으로 작동하므로 Git에만 해당됩니다.

답변:


483

좋아, 그래서 필요한 자식 자동 완성 스크립트를.

나는이 URL에서 그것을 얻었다 :

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

홈 디렉토리 ( ~)가 대상과 함께 사용 되므로이 디렉토리를 실행할 때 어떤 디렉토리에 있는지 걱정할 필요가 없습니다 .

그런 다음 ~/.bash_profile파일에 다음과 같은 '존재하는 경우 실행'코드를 추가했습니다.

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

업데이트 : .bashrc파일 을 축소하기 위해이 코드를 더 간결하게 만들고 있습니다.이 경우에는 다음을 사용합니다.

test -f ~/.git-completion.bash && . $_

참고 : $_이전 명령에 대한 마지막 인수를 의미합니다. 그래서 . $_실행 의미 - "가"인 .git-completion.bash이 경우

이것은 여전히 ​​Ubuntu와 OSX 및 스크립트 .git-completion.bash스크립트가 없는 시스템에서 작동합니다 .

이제 git Tab(실제로 git TabTab) 매력처럼 작동합니다!

추신 : 이것이 박쥐에서 작동하지 않으면 chmod u+x ~/.git-completion.bash필요한 권한을 부여 하기 위해 달려야 할 수도 있습니다 .

  • chmod 파일 권한을 수정하는 명령입니다
  • u 파일을 소유 한 사용자, 기본적으로 작성자, 즉 사용자를 의미합니다.
  • + 권한 설정 / 활성화 / 추가를 의미
  • x 실행 권한, 즉 스크립트를 실행하는 기능

1
bash 스크립트를 추가 한 후 터미널을 다시 시작하면 작동합니다. Models폴더 에 자동 완성하려고 할 때 내 폴더 로 자동 완성하려고 시도한 이유가 궁금 m Tab합니다 master.
Alex

1
다른 팁 은 unix.stackexchange.com/q/48862/10043 을 참조하십시오
Michael Durrant

3
수락 된 답변이 누구에게도 효과가 없다면 source ~/.bash_profile코드를 붙여 넣은 후 시도하십시오 . 터미널을 다시 시작해도 같은 작업이 수행됩니다.
Ben

감사합니다! 다른 것들을 시도했지만 아무것도 작동하지 않았습니다 (이 github.com/bobthecow/git-flow-completion/wiki/… 포함 ). 귀하의 솔루션은 매력처럼 작동했습니다.)
rgoliveira

1
(Brew는 git없지만 Apple 기본값 은 아닙니다 git)brew install gitgit checunknown option: --list-cmds=list-mainporcelain,others,nohelpers,alias,list-complete,config usage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>]
Sachin

89

어떤 사람들은 패키지 관리자를 사용하여 Mac OS 패키지의 설치, 업데이트 및 구성을 자동화하는 것을 선호합니다. 저는 패키지 관리자의 팬이며 Homebrew는 Mac OS 용 최고의 패키지 관리자라고 생각합니다 (일부는 사실상 Mac OS 패키지 관리자라고합니다).

Homebrew를 설치하고 나면 bash-completion 과 함께 git 을 간단히 설치할 수 있습니다 .brew install git bash-completion

그런 다음에 다음을 입력해야합니다 ~/.bash_profile.

if [ -f `brew --prefix`/etc/bash_completion.d/git-completion.bash ]; then
  . `brew --prefix`/etc/bash_completion.d/git-completion.bash
fi

(참고 :이 설치가 404 오류로 실패하고 이미 자식이 설치되어 있으면이 추출 설치의 자식 부분을 제거하십시오.)

brew와 함께 git 및 bash-completion을 설치하는 방법에 대한 자세한 내용은 여기를 참조하십시오.


27
추가 git및 추가 bash-completion는 추가 와 .git-completion.bash 전혀 다릅니다. 서로 다른 프로그램이며 매우 다른 작업을 수행합니다. 하나는 bash 명령 자동 완성을 수행하고 다른 하나는 git 명령 자동 완성을 수행하고 'twain이 만나는 nair;)
Michael Durrant

매력처럼 일하고 많은 감사합니다. 내가 추가 한 스크립트의 사용법이 무엇인지 설명해 주 ~/.bash_profile시겠습니까?
Vikas Bansal

다른 사람들 이이 답변에 대해 말했지만 터미널에서 git 자동 완성 작업을 수행 한 것입니다.
Iain

32

이것을 터미널에서 실행하십시오 :

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

그런 다음이 작업을 수행하십시오.

vi ~/.bash_profile

이 줄을 추가하십시오 :

if [ -f ~/.git-completion.bash ]; then
  . ~/.git-completion.bash
fi

그게 다야. 이것은 나를 위해 일했습니다.


1
사람이 텍스트 편집기로 bash_profile을 열 것을 선호하는 경우 (2 단계), 그냥 이렇게 : 개방 -e .bash_profile을을
니콜라스 보댕 - Ripert

2
버진 Mac OS High Sierra에는 ~/.bash_profile파일이 없습니다. 파일을 만들고 if스크립트를 저장하고 저장하면됩니다. 셸을 다시로드하면 작동합니다.
agm1984

11

git그리고 git-completion.bash이미 (맥 OS 명령 줄 도구와 함께 xcode-select --install). bash 자동 완성을 사용하려면 이것을 bash에 추가하십시오 ~/.bash_profile.

[ -f /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash ] && . /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash

이것은 또한 git 브랜치에 대해 자동 완성 기능을 활성화합니다.


명령 줄 도구가 설치되어 있지만 필자의 경우 해당 파일이 없습니다. brew와 함께 가기에 행복합니다 (그리고 내 자식도 brew와 함께 있기 때문에 아마도 더 현명합니다).
drevicko

감사! IMO, 초록색 확인 표시가있는 답변이어야합니다.
geekisthenewcool

8

다음은 일부 혼란스러운 부분입니다. 추출 또는 포트가 설치되어 있지만 시스템 git in을 사용하고 /usr/bin/있습니다. 이것을 확인하려면 :

which git

당신이 볼 경우 /usr/bin/git다음 중 하나를 양조가 제대로 구성되지 않았거나 당신은 양조를 통해 자식을 설치하지했습니다.

brew를 통해 git을 설치하면 brew에 대해 bash 완료를 활성화하면 git에 대한 bash 완료도 활성화됩니다. 때문입니다 /usr/local/etc/bash_completion실제로는 모든 것을 소싱 /usr/local/bash_completion.d, 그리고 자식에 대한 양조 패키지가 자식 완료 스크립트를 설치합니다.


이것은 의미가 있지만 "양조에 대한 배쉬 완성을 어떻게 가능하게 할 것"입니까? 당신은 그렇게하는 방법을 잃어 버렸습니다, 이것은 당신의 대답의 일부가되어야합니다
skplunkerin

난 그냥 단순화
.guide

4

"bash_completion"옵션을 활성화하여 MacPorts에서 bash 및 git을 설치할 수 있습니다. 아마도 git과 완료를 최신으로 유지하는 가장 쉬운 방법 일 것입니다.

http://denis.tumblr.com/post/71390665/adding-bash-completion-for-git-on-mac-os-x-snow-leopard

MacPorts를 설치하려면 : http://www.macports.org/install.php/

추가 정보

Linux 시스템에서 완료 설정을 찾으려면 /etc/bash_completion.d/git (긴 파일)를 확인하십시오. 완료 프레임 워크가 / etc / bash_completion (/etc/profile.d/bash_completion.sh; / etc / profile의 파일에서 제공)을 통해 소스 프레임 워크에서 제공하도록 설계 되었기 때문에 자체적으로 복사하는 것은 아마 작동하지 않습니다. .d는 / etc / profile에서 제공됩니다).


2

소싱 후에도 git 완료가 부분적으로 손상된 경우 https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bashgit 버전을 업데이트해야 할 수도 있습니다.

예를 들어 git check+를 입력 TAB하면 올바르게 자동 완성 git checkout됩니다. 그러나 git checkout+를 입력하면 TAB분기 목록이 표시되지 않았습니다 HEAD.

나를위한 해결책은 내 git버전 을 업데이트하는 것이 었습니다 . 나는 2.7.0에 있었는데, 분명히 최신 버전과 호환되지 않았습니다 git-completion.bash. 나는 그것을 실행 brew upgrade git하여 2.13.0으로 업데이트했으며 이제는 지점 이름을 자동 완성합니다.


저도 같은 문제를 얻고 있었다, 그러나 나는 실행했다 brew upgrade gitbrew link git (재정의 활성화와 함께)
TOPE

1
@Tope를 잡아 주셔서 감사합니다. 로 변경 update되었습니다 upgrade.
wisbucky

2

지금까지, 내가 찾은 최고의 기준이 매우 문제에 해결하기 위해 SpinDance 에 의해, 코너 리빙스턴 :

는 IF 자식-completion.bash 스크립트가 시스템에 존재하지 않는, 내가 (인 위 제공된 링크에서 검색하십시오 )와라는 새로운 파일을 로컬 컴퓨터에 저장 자식-completion.bash 에서 / usr / local / etc / bash_completion.d / 디렉토리. 는 IF 자식-completion.bash 스크립트가 시스템에 존재하지만 아닌 /usr/local/etc/bash_completion.d/의 디렉토리, 우리는 그 디렉토리에 복사본을 만들어야합니다. 빠른 sudo cp /current/path/to/your/git-completion.bash /usr/local/etc/bash_completion.d/git-completion.bash 가 트릭을 수행해야합니다. /usr/local/etc/bash_completion.d/ 에 관심이있는 사람들을 위해 디렉토리 : 새 완료 명령을 저장하기위한 것이며 시스템에없는 경우 작성해야합니다.

이 시점에서 git-completion.bash 스크립트는 로컬 컴퓨터의 /usr/local/etc/bash_completion.d/ 디렉토리 에 있어야합니다 . 이제 ~ / .bash_profile 에서 git completion 스크립트를 bash에 연결합니다 .

참고 : 이전 문장의 물결표는 컴퓨터의 홈 디렉토리를 나타냅니다. ~ / .bash_profile에 다음 행을 추가하십시오 : source /usr/local/etc/bash_completion.d/git-completion.bash 및 저장하십시오. 마지막 단계는 bash 프로필을 다시로드하는 것입니다. 현재 bash 세션에서 source ~ / .bash_profile 을 실행하여이를 달성 할 수 있습니다 .


1

그것을 시도하고 가지에 잘 작동하지만 git st+하면 tab다음과 같은 오류가 표시됩니다.

알 수없는 옵션 : --list-cmds = list-mainporcelain, 기타, 노 헬퍼, 별칭, 목록 완성, 구성 사용법 : git [--version] [--help] [-C] [-c =] [--exec -path [=]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no-pager] [--no-replace-objects] [--bare] [--git-dir =] [--work-tree =] [--namespace =] []

인터넷을 검색하고 찾을 수 --list-cmds있는이 .git-completion.bash망할 놈의 최신 버전에 있었고, 내 Mac에 자식 버전이었다2.17.2

해결책은 다음과 같습니다.

해결책 1

  1. git --version명령 을 사용하여 자식 버전을 확인하십시오.
  2. 그런 다음 URL에 동일한 버전 번호를 입력하십시오.

    curl https://raw.githubusercontent.com/git/git/v2.17.2/contrib/completion/git-completion.bash -o ~/.git-completion.bash
  3. 그런 다음 상단 답변과 동일한 단계를 수행하고 아래 코드를 입력하십시오. ~/.bash_profile

    if [ -f ~/.git-completion.bash ]; then
      . ~/.git-completion.bash
    fi
    

해결책 2

git 버전을 최신 버전으로 업데이트하려고하면 제대로 작동합니다.


0

설치 - 오 나의-zsh을 기본 쉘로 설정하고 zsh을하고 나중에 나 한테 감사 :)


나는 그것을 처리 할 필요가 없도록하기 위해, 탭을 누른 후에도 여전히 지점 제안이 없다
Jytug

실제로 oh-my-zsh 또는 별도의 플러그인 시스템 이 전혀 필요하지 않습니다 ! 힘내 완성은 상자에서 나옵니다, 당신은 그것을 활성화해야합니다.
SilverWolf

0

대부분의 사용자는 gitxcode 명령 줄 도구의 일부로 설치되며 /usr/bin/gitgit의 bash 완료 규칙은에서 사용할 수 있습니다 /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash.

이 경우 Homebrew에서 git을 설치하거나 raw.githubusercontent.com에서 소스 git 완료 규칙을 설치할 필요가 없습니다. 다음과 같이 심볼릭 링크를 만드십시오.

cd /usr/local/etc/bash_completion.d/
ln -s /Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash git

참고 : bash-completionHomebrew에서 패키지를 설치하고 구성했는지 확인하십시오 .


-2

.bashrc파일을 찾으십시오 .

그것을 열고 하단 에이 줄을 추가하십시오 :

source /etc/bash_completion.d/git


1
/etc/bash_completion.d/비교적 새로운 시스템 (OSX 10.10.3)에 폴더 가 없습니다 .
livingtech 2016 년

그것을 만들어보십시오.
crmpicco

bash_completion이 아니라 git_completion이 다른 작업을 수행합니다.
Michael Durrant

@MichaelDurrant 작동합니다. 날 믿어. ;) prowrestlingtees.com/media/catalog/product/cache/1/image/…
crmpicco

@crmpicco 작성 지침을 제공해 주 /etc/bash_completion.d/git시겠습니까? 답을 더 가치있게 만들 것입니다.
Dannid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.